#python #python-3.x #nltk #lemmatization
#python #python-3.x #nltk #лемматизация
Вопрос:
Приведенный ниже код — это то, что у меня есть в настоящее время, который работает нормально, но он изменяет такие слова, как «didn’t» на «didn» и «t». Я бы хотел, чтобы он либо удалил апостроф, чтобы он отображался как «не», либо просто оставил его как «не», хотя это может привести к проблемам позже с TfidfVectorizer?
Есть ли какой-нибудь способ реализовать это без особых хлопот?
def get_wordnet_pos(word):
"""Map POS tag to first character lemmatize() accepts"""
tag = 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)
lemmatizer = WordNetLemmatizer()
def lemmatize_review(review):
"""Lemmatize single review string"""
lemmatized_review = ' '.join([lemmatizer.lemmatize(word, get_wordnet_pos(word)) for word in word_tokenize(review)])
return lemmatized_review
review_data['Lemmatized_Review'] = review_data['Review'].apply(lemmatize_review)
Ответ №1:
Вы можете просто заменить "'"
символ на и пустой символ ""
, прежде чем приступить к лемматизации, как показано ниже:
>>> word = "didn't can't won't"
>>> word
"didn't can't won't"
>>> x = word.replace("'", "")
>>> x
'didnt cant wont'
Ответ №2:
вы можете использовать tweettokenizer вместо word tokenizer
from nltk.tokenize import TweetTokenizer
str = "didn't can't won't how are you"
tokenizer = TweetTokenizer()
tokenizer.tokenize(str)
#op
["didn't", "can't", "won't", 'how', 'are', 'you']