WordNet Lemmatizer разве он не лемматизирует все перегибы слова в файле CSV

#python #nltk #tokenize #lemmatization

#python #nltk #маркировать #лемматизация

Вопрос:

Я хочу лемматизировать все слова в предложениях (файл CSV, и этот файл содержит твиты) для нашей цели уменьшить частоту слов. С помощью wordnet lemmatizer. Я знаю, что defult для lemmatizer является СУЩЕСТВИТЕЛЬНЫМ, но я хочу лемматизировать для многих тегов pos.

Например, все эти слова death, died, dead становятся их корнем die . Другой пример угрожает не возвращением к корневой угрозе, а террористической, террористической, террористической к корню.

Я думаю, я хочу обозначить слова, а не предложения, и лемматизировать их.

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

 import nltk
from nltk.tokenize import word_tokenize
from nltk.stem.wordnet import WordNetLemmatizer
from nltk.corpus import wordnet
lemmatizer = nltk.stem.WordNetLemmatizer()
wordnet_lemmatizer = WordNetLemmatizer()


def nltk_tag_to_wordnet_tag(nltk_tag):
    if nltk_tag.startswith('J'):
        return wordnet.ADJ
    elif nltk_tag.startswith('V'):
        return wordnet.VERB
    elif nltk_tag.startswith('N'):
        return wordnet.NOUN
    elif nltk_tag.startswith('R'):
        return wordnet.ADV
    else:
        return None

def lemmatize_sentence(sentence):
    #tokenize the sentence and find the POS tag for each token
    nltk_tagged = nltk.pos_tag(nltk.word_tokenize(sentence))
    #tuple of (token, wordnet_tag)
    wordnet_tagged = map(lambda x: (x[0], nltk_tag_to_wordnet_tag(x[1])), nltk_tagged)
    lemmatized_sentence = []
    for word, tag in wordnet_tagged:
        if tag is None:
            #if there is no available tag, append the token as is
            lemmatized_sentence.append(word)
        else:
            #else use the tag to lemmatize the token
            lemmatized_sentence.append(lemmatizer.lemmatize(word, tag))
    return " ".join(lemmatized_sentence)
# Lemmatizing
df['Lemmatize'] = df['text'].apply(lambda x: lemmatize_sentence(x))
print(df.head())
 

Спасибо за помощь