在 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')
我有一个推文数据框,我正在尝试在词形化的 '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')