Source code for cltk.morphology.utils

"""Misc helper functions for extracting morphological
info from CLTK data structures.
"""

from typing import List, Optional, Tuple, Union

from cltk.core.data_types import Word
from cltk.core.exceptions import CLTKException
from cltk.morphology.universal_dependencies_features import (
    NOMINAL_FEATURES,
    VERBAL_FEATURES,
    MorphosyntacticFeature,
)

ALL_POSSIBLE_FEATURES = NOMINAL_FEATURES + VERBAL_FEATURES


[docs]def get_pos(word: Optional[Word]) -> Union[str, None]: """Take word, return structured info.""" if not word: return None return word.pos.name
[docs]def get_features( word: Optional[Word], prepend_to_label: str = None, ) -> Tuple[List[str], List[Union[str, int, float, None]]]: """Take a word, return a list of feature labels.""" features_present = list() # type: List[Union[str, None]] feature_variables = list() # type: List[str] for possible_feature in ALL_POSSIBLE_FEATURES: feature_variables.append(str(possible_feature).lower()) if not word: features_present.append(None) continue try: feat = word.__getattr__(possible_feature)[0] # type: MorphosyntacticFeature features_present.append(str(feat.name)) except CLTKException: features_present.append(None) if prepend_to_label: feature_variables = [prepend_to_label + name for name in feature_variables] return feature_variables, features_present