SpaCy использует лемматизатор как самостоятельный компонент - PullRequest
0 голосов
/ 11 марта 2020

Я хочу использовать лемматизатор SpaCy в качестве отдельного компонента (потому что у меня есть предварительно токенизированный текст, и я не хочу повторно объединять его и запускать весь конвейер, потому что SpaCy, скорее всего, будет по-разному токенизироваться в некоторых случаях).

Я нашел лемматизатор в пакете, но мне как-то нужно загрузить словари с правилами для инициализации этого лемматизатора. Эти файлы должны быть где-то в модели Engli sh или немецкой модели, верно? Я не смог найти их там.

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

Я нашел похожий вопрос здесь: Проблема / согласованность Spacy lemmatizer , но этот не полностью ответил, как получить эти файлы словаря из модель. Параметр spacy.lang. * Больше не существует в новых версиях.

1 Ответ

2 голосов
/ 11 марта 2020

Вот фрагмент кода, который у меня был, который использовал лемматизатор SpaCy сам по себе. Я не где-то, я могу запустить его, поэтому он может иметь небольшую ошибку или два, если я допустил ошибку редактирования.

Обратите внимание, что в общем случае вам нужно знать upos для слова, чтобы правильно лемматизировать. Этот код вернет все возможные леммы, но я бы посоветовал изменить его так, чтобы оно соответствовало 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
...