mirror of
https://github.com/explosion/spaCy.git
synced 2024-12-26 01:46:28 +03:00
adc9745718
* Restructure tag maps for MorphAnalysis changes Prepare tag maps for upcoming MorphAnalysis changes that allow arbritrary features. * Use default tag map rather than duplicating for ca / uk / vi * Import tag map into defaults for ga * Modify tag maps so all morphological fields and features are strings * Move features from `"Other"` to the top level * Rewrite tuples as strings separated by `","` * Rewrite morph symbols for fr lemmatizer as strings * Export MorphAnalysis under spacy.tokens * Modify morphology to support arbitrary features Modify `Morphology` and `MorphAnalysis` so that arbitrary features are supported. * Modify `MorphAnalysisC` so that it can support arbitrary features and multiple values per field. `MorphAnalysisC` is redesigned to contain: * key: hash of UD FEATS string of morphological features * array of `MorphFeatureC` structs that each contain a hash of `Field` and `Field=Value` for a given morphological feature, which makes it possible to: * find features by field * represent multiple values for a given field * `get_field()` is renamed to `get_by_field()` and is no longer `nogil`. Instead a new helper function `get_n_by_field()` is `nogil` and returns `n` features by field. * `MorphAnalysis.get()` returns all possible values for a field as a list of individual features such as `["Tense=Pres", "Tense=Past"]`. * `MorphAnalysis`'s `str()` and `repr()` are the UD FEATS string. * `Morphology.feats_to_dict()` converts a UD FEATS string to a dict where: * Each field has one entry in the dict * Multiple values remain separated by a separator in the value string * `Token.morph_` returns the UD FEATS string and you can set `Token.morph_` with a UD FEATS string or with a tag map dict. * Modify get_by_field to use np.ndarray Modify `get_by_field()` to use np.ndarray. Remove `max_results` from `get_n_by_field()` and always iterate over all the fields. * Rewrite without MorphFeatureC * Add shortcut for existing feats strings as keys Add shortcut for existing feats strings as keys in `Morphology.add()`. * Check for '_' as empty analysis when adding morphs * Extend helper converters in Morphology Add and extend helper converters that convert and normalize between: * UD FEATS strings (`"Case=dat,gen|Number=sing"`) * per-field dict of feats (`{"Case": "dat,gen", "Number": "sing"}`) * list of individual features (`["Case=dat", "Case=gen", "Number=sing"]`) All converters sort fields and values where applicable.
118 lines
2.6 KiB
Cython
118 lines
2.6 KiB
Cython
from libc.stdint cimport uint8_t, uint32_t, int32_t, uint64_t
|
|
|
|
from .typedefs cimport flags_t, attr_t, hash_t
|
|
from .parts_of_speech cimport univ_pos_t
|
|
|
|
from libcpp.vector cimport vector
|
|
from libc.stdint cimport int32_t, int64_t
|
|
|
|
|
|
|
|
cdef struct LexemeC:
|
|
flags_t flags
|
|
|
|
attr_t lang
|
|
|
|
attr_t id
|
|
attr_t length
|
|
|
|
attr_t orth
|
|
attr_t lower
|
|
attr_t norm
|
|
attr_t shape
|
|
attr_t prefix
|
|
attr_t suffix
|
|
|
|
attr_t cluster
|
|
|
|
float prob
|
|
float sentiment
|
|
|
|
|
|
cdef struct SerializedLexemeC:
|
|
unsigned char[8 + 8*10 + 4 + 4] data
|
|
# sizeof(flags_t) # flags
|
|
# + sizeof(attr_t) # lang
|
|
# + sizeof(attr_t) # id
|
|
# + sizeof(attr_t) # length
|
|
# + sizeof(attr_t) # orth
|
|
# + sizeof(attr_t) # lower
|
|
# + sizeof(attr_t) # norm
|
|
# + sizeof(attr_t) # shape
|
|
# + sizeof(attr_t) # prefix
|
|
# + sizeof(attr_t) # suffix
|
|
# + sizeof(attr_t) # cluster
|
|
# + sizeof(float) # prob
|
|
# + sizeof(float) # cluster
|
|
# + sizeof(float) # l2_norm
|
|
|
|
|
|
cdef struct SpanC:
|
|
hash_t id
|
|
int start
|
|
int end
|
|
int start_char
|
|
int end_char
|
|
attr_t label
|
|
attr_t kb_id
|
|
|
|
|
|
cdef struct TokenC:
|
|
const LexemeC* lex
|
|
uint64_t morph
|
|
univ_pos_t pos
|
|
bint spacy
|
|
attr_t tag
|
|
int idx
|
|
attr_t lemma
|
|
attr_t norm
|
|
int head
|
|
attr_t dep
|
|
|
|
uint32_t l_kids
|
|
uint32_t r_kids
|
|
uint32_t l_edge
|
|
uint32_t r_edge
|
|
|
|
int sent_start
|
|
int ent_iob
|
|
attr_t ent_type # TODO: Is there a better way to do this? Multiple sources of truth..
|
|
attr_t ent_kb_id
|
|
hash_t ent_id
|
|
|
|
|
|
cdef struct MorphAnalysisC:
|
|
hash_t key
|
|
int length
|
|
attr_t* fields
|
|
attr_t* features
|
|
|
|
|
|
# Internal struct, for storage and disambiguation of entities.
|
|
cdef struct KBEntryC:
|
|
|
|
# The hash of this entry's unique ID/name in the kB
|
|
hash_t entity_hash
|
|
|
|
# Allows retrieval of the entity vector, as an index into a vectors table of the KB.
|
|
# Can be expanded later to refer to multiple rows (compositional model to reduce storage footprint).
|
|
int32_t vector_index
|
|
|
|
# Allows retrieval of a struct of non-vector features.
|
|
# This is currently not implemented and set to -1 for the common case where there are no features.
|
|
int32_t feats_row
|
|
|
|
# log probability of entity, based on corpus frequency
|
|
float freq
|
|
|
|
|
|
# Each alias struct stores a list of Entry pointers with their prior probabilities
|
|
# for this specific mention/alias.
|
|
cdef struct AliasC:
|
|
|
|
# All entry candidates for this alias
|
|
vector[int64_t] entry_indices
|
|
|
|
# Prior probability P(entity|alias) - should sum up to (at most) 1.
|
|
vector[float] probs
|