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.
- 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
andsegram.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 againstsegram.grammar.Sent
andsegram.grammar.Doc
objects as long as they are comprised of a single sentence. SeeSentSimilarity
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 factorshared / union
, whereshared
is the numebr of types present in both elements andunion
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 ofdecay_rate**depth
, wheredepth
is calculated relative to the depth of theself.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.
- Similarity
alias of
SentSimilarity