清理并标记化后的数据框测试。from nltk.tokenize import TweetTokenizertt = TweetTokenizer()test['tokenize'] = test['tweet'].apply(tt.tokenize)print(test)输出0 congratulations dear friend ... [congratulations, dear, friend]1 happy anniversary be happy ... [happy, anniversary, be, happy]2 make some sandwich ... [make, some, sandwich]我想为我的数据创建一个词袋。以下给了我错误:'list'对象没有属性'lower'from sklearn.feature_extraction.text import CountVectorizervectorizer = CountVectorizer()BOW = vectorizer.fit_transform(test['tokenize'])print(BOW.toarray())print(vectorizer.get_feature_names())第二个:AttributeError: 'list' object has no attribute 'split'from collections import Countertest['BOW'] = test['tokenize'].apply(lambda x: Counter(x.split(" ")))print(test['BOW'])你能帮我一个方法或两个。谢谢!
2 回答
UYOU
TA贡献1878条经验 获得超4个赞
vectorizer.fit_transform将可迭代的 str、unicode 或文件对象作为参数。您已经传递了一个可迭代的列表(标记化字符串)。您可以只传递原始字符串集,test['tweet']因为 CountVectorizer 会为您进行标记化。
from sklearn.feature_extraction.text import CountVectorizer
vectorizer = CountVectorizer()
BOW = vectorizer.fit_transform(test['tweet'])
print(BOW.toarray())
print(vectorizer.get_feature_names())
这应该会给你预期的输出。
慕斯王
TA贡献1864条经验 获得超2个赞
如您的输出示例所示,test['tokenize']包含单元格中的列表。这些列表是通过按“”拆分从字符串中检索到的值,因此要使此行test['BOW'] = test['tokenize'].apply(lambda x: Counter(x.split(" ")))
正常工作,请尝试将其更改为test['BOW'] = test['tokenize'].apply(lambda x: Counter(x))
添加回答
举报
0/150
提交
取消