我有一个包含一列文本数据的 Pandas 数据框。我想将此文本数据的每一行与我感兴趣的单词列表进行比较。比较应该生成一个矩阵,该矩阵显示该行数据的文本中出现的单词(0 或 1)。
输入数据框:
text
That bear talks
The stone rocks
Tea is boiling
The bear drinks tea
输入单词列表:
[bear, talks, tea]
结果:
text bear talks tea
That bear talks 1 1 0
The stone rocks 0 0 0
Tea is boiling 0 0 1
The bear drinks tea 1 0 1
我在 sklearn.feature_extraction.text.HashingVectorizer 上找到了一些信息,但据我了解,它只是获取整个数据框并将其分解为组成词并计算这些词。我想做的是在一个非常有限的列表上做。
使用 sklearn 我做了以下事情:
from sklearn.feature_extraction.text import HashingVectorizer
countvec = HashingVectorizer()
countvec.fit_transform(resultNLdf2.text)
但这给了我以下信息:
<73319x1048576 sparse matrix of type '<class 'numpy.float64'>'
with 1105683 stored elements in Compressed Sparse Row format>
这似乎有点大,除非我可以从这个稀疏矩阵中选择我想要的词,但我不知道如何使用它。
如果我用了错误的词来解释这个问题,我很抱歉,我不确定你是否会把它称为矩阵。
编辑
我正在处理的真实数据相当大,有 1264555 行推文字符串。至少我学会了不要过度简化问题 :-p。这使得一些给定的解决方案(感谢您提供帮助!!)由于内存问题或速度极慢而无法工作。这也是我关注 sklearn 的原因。
与:
from sklearn.feature_extraction.text import CountVectorizer
words = ['bear', 'talks', 'tea']
countvec = CountVectorizer(vocabulary=words)
countvec.fit_transform(resultNLdf2.text)
您实际上可以通过给出一个简单的列表来限制您想要查看的单词。但这给我留下了一个问题,即它的格式我不确定如何处理,如上所述。
最佳答案
您可以使用 Series.str.get_dummies
>>> print df.join(df.text.str.get_dummies(' ').loc[:, ['bear', 'talks', 'tea']])
text bear talks tea
0 That bear talks 1 1 0
1 The stone rocks 0 0 0
2 Tea is boiling 0 0 0
3 The bear drinks tea 1 0 1
关于python - 使用文本字符串创建 Pandas 数据框中出现的单词矩阵,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33367210/