Source code for cltk.wordnet.processes

"""``Process`` to wrap WordNet."""

from copy import copy
from dataclasses import dataclass
from typing import Optional

from boltons.cacheutils import cachedproperty

from cltk.core.data_types import Doc, Process
from cltk.wordnet.wordnet import WordNetCorpusReader

[docs]@dataclass class WordNetProcess(Process): """A ``Process`` type to capture what the ``wordnet`` module can do for a given language. """ language: str = None @cachedproperty def algorithm(self) -> Optional[WordNetCorpusReader]: """Returns a WordNetCorpusReader appropriate to the Document's language""" language = None if self.language == "lat": language = "lat" elif self.language == "grc": language = "grk" elif self.language == "san": language = "skt" if language is not None: return WordNetCorpusReader(language)
[docs] def run(self, input_doc: Doc) -> Doc: """Adds a list of Synset objects, representing a Word's senses, to all lemmatized words""" output_doc = copy(input_doc) wn = self.algorithm for word in output_doc.words: # TODO: map CLTK lemmas to WN lemmas if word.lemma: synsets = list(wn.lemma(word.lemma, return_ambiguous=False).synsets()) word.synsets = synsets return output_doc