在 Python 中对 Twitter 数据框使用词形还原和 Tf-Idf 计算时出错

Error when using Lemmatization and Tf- Idf calculation on Twitter data frame in Python

我有一个推文数据框,我正在尝试在词形化的 'tweet' 列上计算 Tf-Idf。我对词形还原的结果有疑问,在尝试计算 Tf-Idf 时遇到错误。

下面是我的代码:

w_tokenizer = nltk.tokenize.WhitespaceTokenizer()
lemmatizer=WordNetLemmatizer()

def lemmatize_text(tweet):
    return [lemmatizer.lemmatize(w) for w in w_tokenizer.tokenize(tweet)]

df['tweet_lemmatized'] = df['tweet'].apply(lemmatize_text)

这是包含新列 'tweet_lemmatized' 的数据框示例:

  target       tweet_lemmatized
    0        [believe, department, year, released, hoping]
    1        [huge, expected, tomorrow, night, beginning]

效果不佳,因为列中有'hoping'、'beginning'等词。

我的第一个问题——如何改进词形还原?

现在我想计算此列的 Tf-Idf 并在我的数据框中生成包含顶部单词的新列。

这是我的 Tf-Idf 代码: 我想将顶部单词添加到我的原始数据框 'df'。

from sklearn.feature_extraction.text import TfidfVectorizer, ENGLISH_STOP_WORDS

tfidf= TfidfVectorizer(ngram_range=(1,2), max_features=100,  
       stop_words=ENGLISH_STOP_WORDS).fit(df.tweet_lemmatized)

tfidf_tweet = tfidf.transform(df.tweet_lemmatized)

result=pd.DataFrame(tfidf_tweet.toarray(), columns=tfidf.get_feature_names())

这是我得到的错误:

AttributeError: 'list' object has no attribute 'lower'

TfidfVectorizer.fit 采用字符串输入而不是列表(您的 df.tweet_lemmatized 数据应包含字符串而不是列表)。 为了更好的词形还原,可以使用 nltk.pos_tag 获取词性,然后根据词的标签对单词进行词形还原,例如:

lemmatizer.lemmatize(word, 'v')

考虑到它是一个动词,这样它会词形化 word

您可以使用 PorterStemmer() 或修改 WordNetLemmatizer()

stemmer = nltk.PorterStemmer()
stemmer.step('hoping')

或:

lemmatizer = WordNetLemmatizer()
lemmatizer.lemmatize("running", 'v')