как сделать лемматизацию с помощью пакета NLTK - PullRequest
0 голосов
/ 11 июля 2020

У меня есть python скрипт, который должен выполнить лемматизацию для ввода данных (фрейм данных).

проблема в том, что когда я пытаюсь распечатать результат большинства существующих слов в фрейме данных, он отображает результат ниже .

Most common words:
[('**word**', 141), ('twitter', 47), ('pic', 46), ('**Portugal**', 37), ('**words**', 28), ('protest', 19), ('**Portuguese**', 19), ('country', 18), ('spread', 17), ('people', 15)]

где результат должен быть:

Most common words:
[('**word**', 141), ('twitter', 47), ('pic', 46), ('**Portugal**', 37), ('protest', 19), ('country', 18), ('spread', 17), ('people', 15)]

код:

from nltk.corpus import stopwords,wordnet
from nltk.stem.wordnet import WordNetLemmatizer


def get_wordnet_pos(word):
    """Map POS tag to first character lemmatize() accepts"""
    tag = nltk.pos_tag([word])[0][1][0].upper()
    tag_dict = {"J": wordnet.ADJ,
                "N": wordnet.NOUN,
                "V": wordnet.VERB,
                "R": wordnet.ADV}

    return tag_dict.get(tag, wordnet.NOUN)


ppt = '''...!@#$%^&*()....{}’‘ “”  “[]|._-`/?:;"'\,~12345678876543'''
w_tokenizer = nltk.tokenize.WhitespaceTokenizer()
lemmatizer = nltk.stem.WordNetLemmatizer()
def lemmatize_text(text):
    return (" ".join([lemmatizer.lemmatize(w, get_wordnet_pos(w)) for w in w_tokenizer.tokenize(text) if w not in ppt]))
    
...