SpaCy 使用 Lemmatizer 作为独立组件

SpaCy use Lemmatizer as stand-alone component

我想将 SpaCy 的词形还原器用作独立组件(因为我有预先标记化的文本,我不想重新连接它和 运行 完整的管道,因为 SpaCy 很可能会标记化在某些情况下有所不同)。

我在包中找到了词形还原器,但不知何故我需要用规则加载词典来初始化这个词形还原器。 这些文件一定在英文或德文模型的某处吧?我在那里找不到它们。

from spacy.lemmatizer import Lemmatizer
where do the LEMMA_INDEX, etc. files are comming from?
lemmatizer = Lemmatizer(LEMMA_INDEX, LEMMA_EXC, LEMMA_RULES)

我在这里发现了一个类似的问题: 但是这个并没有完全回答如何从模型中获取这些字典文件。 spacy.lang.* 参数似乎不再存在于较新的版本中。

这是我提取的一段代码,它本身使用了 SpaCy 词形还原器。我不在我可以运行的地方,所以如果我犯了一个编辑错误,它可能会有一两个小错误。

请注意,一般来说,您需要知道单词的 upos 才能正确词形还原。此代码将 return 所有可能的引理,但我建议修改它以传递正确的 upos 为您的词。

class SpacyLemmatizer(object):
    def __init__(self, smodel):
        import spacy
        self.lemmatizer = spacy.load(smodel).vocab.morphology.lemmatizer

    # get the lemmas for every upos
    def getLemmas(self, entry):
        possible_lemmas = set()
        for upos in ('NOUN', 'VERB', 'ADJ', 'ADV'):
            lemmas = self.lemmatizer(entry, upos, morphology=None)
            lemma = lemmas[0]    # See morphology.pyx::lemmatize
            possible_lemmas.add( lemma )
        return possible_lemmas