Source code for rhoknp.cohesion.predicate

from typing import TYPE_CHECKING

if TYPE_CHECKING:
    from rhoknp.cohesion.pas import Pas
    from rhoknp.units.base_phrase import BasePhrase
    from rhoknp.units.clause import Clause
    from rhoknp.units.document import Document
    from rhoknp.units.phrase import Phrase
    from rhoknp.units.sentence import Sentence


[docs] class Predicate: """述語を表すクラス. Args: base_phrase: 述語の核となる基本句. cfid: 格フーレムID. """ def __init__(self, base_phrase: "BasePhrase", cfid: str | None = None) -> None: self.base_phrase: "BasePhrase" = base_phrase #: 述語の核となる基本句. self.cfid: str | None = cfid #: 格フーレムID. self._pas: "Pas" | None = None @property def text(self) -> str: """表層文字列.""" return self.base_phrase.text @property def sid(self) -> str: """文 ID.""" return self.base_phrase.sentence.sid @property def pas(self) -> "Pas": """述語項構造.""" assert self._pas is not None return self._pas @pas.setter def pas(self, pas: "Pas") -> None: """述語項構造. Args: pas: 述語項構造. """ self._pas = pas @property def document(self) -> "Document": """述語の核となる基本句が属する文書. Raises: AttributeError: 解析結果にアクセスできない場合. """ return self.base_phrase.document @property def sentence(self) -> "Sentence": """述語の核となる基本句が属する文.""" return self.base_phrase.sentence @property def clause(self) -> "Clause": """述語の核となる基本句が属する節. Raises: AttributeError: 解析結果にアクセスできない場合. """ return self.base_phrase.clause @property def phrase(self) -> "Phrase": """述語の核となる基本句が属する文節.""" return self.base_phrase.phrase def __str__(self) -> str: return self.text def __repr__(self) -> str: return f"<{self.__module__}.{self.__class__.__name__}: {self.text!r}>" def __hash__(self) -> int: return hash((self.base_phrase, self.cfid)) def __eq__(self, other: object) -> bool: if not isinstance(other, type(self)): return False return self.base_phrase == other.base_phrase and self.cfid == other.cfid