在Python中对Twitter数据帧使用柠檬化和Tf-Idf计算时出错

在Python中对Twitter数据帧使用柠檬化和Tf-Idf计算时出错,python,tf-idf,lemmatization,Python,Tf Idf,Lemmatization,我有一个tweet的数据帧,我试图在“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.to

我有一个tweet的数据帧,我试图在“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]
因为专栏中有“希望”、“开始”这样的词,所以效果不好

我的第一个问题-如何改进柠檬化

现在,我想计算这个列的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\u公式化的
数据应该包含字符串而不是列表)。 为了更好地进行柠檬化,您可以使用
nltk.pos_tag
获取词性,然后根据词性标记对单词进行柠檬化,例如:

lemmatizer.lemmatize(word, 'v')

这样,考虑到它是一个动词,它将把单词语法化。

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

或:


谢谢你关于柠檬化的建议奏效了。我应该如何处理df.tweet\u柠檬化专栏?你能解释一下吗?
tfidfvectorier.fit
本身从文本(字符串)中提取单词,所以你需要将字符串传递给它;您可以使用
df.tweet\u lemmatized=df.tweet\u lemmatized.str.join(“”)
@利利奥,好的。现在它起作用了。我正在尝试将tf idf计算的列(不包含只有零的列)添加到原始数据帧“df”中。我该怎么做呢?你可以从
转换
的输出中得到的单词包中创建一个数据帧,然后将其与数据帧连接起来(不要忘记使用
列表(bagOfWords.toarray())
作为
pd.dataframe
的输入)。通过为
TfidfVectorizer
的构造函数设置
max_features
,您也只能从
变换中提取最前面的单词@连接的性能不好。它将Null添加到df。下面是我所做的:Tfidf_tweet=Tfidf.transform(df.tweet_柠檬化);结果=pd.DataFrame(Tfidf_tweet.toarray(),columns=Tfidf.get_feature_names());你知道为什么吗?
stemmer = nltk.PorterStemmer()
stemmer.step('hoping')
lemmatizer = WordNetLemmatizer()
lemmatizer.lemmatize("running", 'v')