Есть ли какой-либо способ запретить моему wordnetlematizer лемматизировать сокращенные слова, такие как «не могу» или «не сделал»?

#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']