segram.grammar.sent module

class segram.grammar.sent.Sent(*args: Any, **kwds: Any)[source]

Bases: SentElement

Grammar sentence class.

All grammar classes must be defined as slots classes. This is necessary for ensuring low-memory footprint and better computational efficiency. Even classes with no new slots need to declare __slots__ = (). This requirement is checked during class construction. Other class-specific requirements of this sort as well as their related validation checks may be implemented on specialized grammar classes using the standard __init_subclass__ interface. This allows abstract base classes further down the inheritance chain to check for more complex requirements as well as apply dynamic class customizations. Components within a sentence form a directed acyclic graph with connections going from controlling to dependent components.

cmap

Mapping from head token ids to components.

pmap

Mapping from head tokens ids to phrases.

graph

Component graph.

conjuncts

Mapping from lead components to conjunct groups.

property root: Component

Root component.

property proots: Conjuncts[Phrase]

Root phrases.

property tokens: DataTuple[Token]

Tokens sequence of the element.

similarity(*args: Any, **kwds: Any) float[source]

Structured similarity with respect to other sentence or phrase.

All methods defined here are designed to ensure that:

  • Similarity of a phrase with respect to itself is 1.

  • Similarity x ~ y == y ~ x.

In some case the above may be true only approximately due to accumulation of floating point imprecision.

Parameters:
  • element – Grammar phrase to compare.

  • spec – Specification against which the phrase is to be compared. Can be another phrase, a string or an iterable of strings, which should be single words. A single strings is splitted at whitespace and turned into multiple words. Finally, an averaged word vector for all words is computed. Alternatively, a specification can have a form of a dictionary mapping names of phrase parts or components (see segram.grammar.phrases.Phrase.part_names and segram.grammar.phrase.Phrase.component_names) to either strings or iterables of strings convertible to word vectors (as previously) or other phrases. Importantly, phrases can be also compared against segram.grammar.Sent and segram.grammar.Doc objects as long as they are comprised of a single sentence. See SentSimilarity for details.

  • method

    Method for calculating similarity between phrases:

    components

    Components are grouped in buckets by type (verbs, nouns, prepositions and descriptions) and averaged vectors are compared between the same types. Finally, a weighted average (with weights defined by the weight parameter) is taken and rescaled with a factor shared / union, where shared is the numebr of types present in both elements and union is the total number of unique types among both of them. Thus, the final result is akin to a fuzzy Jaccard similarity:

    \[J = \frac{|A \cap B|}{|A \cup B|}\]
    phrases

    As above but based on phrase parts and phrase head compoents. See segram.grammar.Phrase.part_names for a full list.

    both

    As above but components and phrases are used together.

    average

    Simple average vectors calculated over all component head tokens are used. In this case weights are ignored.

    recursive

    NOTE. Currently not implemented. First, head components are compared between two phrases, and then the same rule is applied recursively to all parts (subjects, direct objects etc.) where for each type elements of the two phrases are matched in pairs to maximize similarity. As previously, weights can be applied to different types and a Jaccard-like rescaling is applied. Additionaly, importance of nested phrases may be discounted using decay_rate parameter by rescaling each weight with a factor of decay_rate**depth, where depth is calculated relative to the depth of the self.phrase.

  • weights – Dictionary mapping phrase part or component names to arbitrary weights (which must be positive). The weights do not have to be normalized and sum up to one.

  • decay_rate – Additional parameter used when method="recursive", which controls the rate at which contributions coming from nested subphrases are discounted.

  • only – Lists of part or component names to selectively use or ignore. Both arguments cannot be used at the same time.

  • ignore – Lists of part or component names to selectively use or ignore. Both arguments cannot be used at the same time.

Raises:

RuntimeError

classmethod from_data(doc: Doc, data: dict[str, Any]) Self[source]

Construct from a Doc and a data dictionary.

to_data() dict[str, Any][source]

Dump to data dictionary.

iter_token_roles() tuple[Token, Role | None][source]

Iterate over token-role pairs.

to_str(*, color: bool = False, **kwds: Any) str[source]

Represent as a string.

is_comparable_with(other: Any) None[source]

Are self and other comparable.

static check_sent(span: Span) bool[source]

Check if a span is a proper sentence.

print() None[source]

Pretty print summary.

Similarity

alias of SentSimilarity