#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())
Спасибо за помощь