Я применяю лемматизатор wordNet в своем корпусе, и мне нужно определить тег pos для лемматизатора:
stemmer = PorterStemmer()
def lemmitize(document):
return stemmer.stem(WordNetLemmatizer().lemmatize(document, pos='v'))
def preprocess(document):
output = []
for token in gensim.utils.simple_preprocess(document):
if token not in gensim.parsing.preprocessing.STOPWORDS and len(token) > 3:
print("lemmitize: ", lemmitize(token))
output.append(lemmitize(token))
return output
Теперь, как вы можете видеть, я определяю pos для глагола (и я знаю, что pos по умолчанию в wordNet — это существительное), однако, когда я лемматизировал свой документ:
the left door closed at the night
Я выхожу как:
output: ['leav', 'door', 'close', 'night']
что это не то, что я ожидал. В приведенных выше предложениях left
указывает на какую дверь (например, на правую или на левую). Если я выберу pos ='n'
, эта проблема может быть решена, но тогда она будет действовать как изношенная сеть по умолчанию и не будет влиять на такие слова, как taken
.
Я нашел аналогичную проблему в здесь и изменил список исключений в nltk_data/corpora/wordnet/verb.exc
, и я изменил left leave
на left left
, но все же я получаю те же результаты, что и leav
.
Теперь мне интересно, есть ли какое-либо решение этой проблемы или, в лучшем случае, есть ли способ, которым я можно добавить собственный словарь некоторых слов (только для моего документа), чтобы wordNet не лемматизировал их, например:
my_dict_list = [left, ...]