如何在 Python 中创建词袋

清理并标记化后的数据框测试。


from nltk.tokenize import TweetTokenizer

tt = 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 CountVectorizer

vectorizer = 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 Counter

test['BOW'] = test['tokenize'].apply(lambda x: Counter(x.split(" ")))

print(test['BOW'])

你能帮我一个方法或两个。谢谢!


慕盖茨4494581
浏览 118回答 2
2回答

UYOU

vectorizer.fit_transform将可迭代的 str、unicode 或文件对象作为参数。您已经传递了一个可迭代的列表(标记化字符串)。您可以只传递原始字符串集,test['tweet']因为 CountVectorizer 会为您进行标记化。from sklearn.feature_extraction.text import CountVectorizervectorizer = CountVectorizer()BOW = vectorizer.fit_transform(test['tweet'])print(BOW.toarray())print(vectorizer.get_feature_names())这应该会给你预期的输出。

慕斯王

如您的输出示例所示,test['tokenize']包含单元格中的列表。这些列表是通过按“”拆分从字符串中检索到的值,因此要使此行test['BOW'] = test['tokenize'].apply(lambda x: Counter(x.split(" ")))正常工作,请尝试将其更改为test['BOW'] = test['tokenize'].apply(lambda x: Counter(x))
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python