Source code for pyknp_eventgraph.pas

import collections
from logging import getLogger
from typing import List, Dict, Optional, TYPE_CHECKING

from pyknp.knp.pas import Pas as PyknpPAS

from pyknp_eventgraph.argument import Argument, ArgumentsBuilder, JsonArgumentsBuilder
from pyknp_eventgraph.builder import Builder
from pyknp_eventgraph.component import Component
from pyknp_eventgraph.predicate import Predicate, PredicateBuilder, JsonPredicateBuilder

if TYPE_CHECKING:
    from pyknp_eventgraph.event import Event

logger = getLogger(__name__)


[docs]class PAS(Component): """A PAS is the core of an event. Attributes: event (Event): An event that this PAS belongs. sid (str): An original sentence ID. ssid (int): A serial sentence ID. pas (:class:`pyknp.knp.pas.Pas`, optional): A PAS object in pyknp. predicate (Predicate): A predicate. arguments (Dict[str, List[Argument]]): A mapping of a case to arguments. """ def __init__(self, event: 'Event', pas: Optional[PyknpPAS] = None): self.event: Event = event self.sid: str = event.sid self.ssid: int = event.ssid self.pas: Optional[PyknpPAS] = pas self.predicate: Optional[Predicate] = None self.arguments: Optional[Dict[str, List[Argument]]] = collections.defaultdict(list)
[docs] def to_dict(self) -> dict: """Convert this object into a dictionary.""" return dict( predicate=self.predicate.to_dict(), argument={ case: [argument.to_dict() for argument in argument_list if argument.to_dict()] for case, argument_list in self.arguments.items() if any(argument.to_dict() for argument in argument_list) } )
[docs] def to_string(self) -> str: """Convert this object into a string.""" predicate = self.predicate.standard_reps arguments = [] for case, argument_list in self.arguments.items(): for argument in argument_list: if argument.head_reps: arguments.append(f'{case}: {argument.head_reps}') return f'<PAS, predicate: {predicate}, arguments: {"{" + ", ".join(arguments) + "}" if arguments else "None"}>'
class PASBuilder(Builder): def __call__(self, event: 'Event') -> PAS: logger.debug('Create a PAS.') pas = PAS(event, event.head.pas) PredicateBuilder()(pas) ArgumentsBuilder()(pas) event.pas = pas logger.debug('Successfully created a PAS.') return pas class JsonPASBuilder(Builder): def __call__(self, event: 'Event', dump: dict) -> PAS: logger.debug('Create a PAS.') pas = PAS(event) JsonPredicateBuilder()(pas, dump['predicate']) JsonArgumentsBuilder()(pas, dump['argument']) event.pas = pas logger.debug('Successfully created a PAS.') return pas