python - 使用文本字符串创建 Pandas 数据框中出现的单词矩阵

标签 python pandas scikit-learn

我有一个包含一列文本数据的 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/

相关文章:

Python LIST 函数不返回新列表

python - 如何从Python中的列表中删除单引号

python - 如何持久化 Python TextBlob 的模型?

python - Python 中的偏相关

python - 如何在 Python scikit-learn 中输出随机森林中每棵树的回归预测?

python - 在 matplotlib 中使用 savefig() 时的 unicode 文本

python - Flask WTForm 验证 SelectField 失败...为什么?

Python Pandas groupby 并使用分组计算 ala dplyr 改变一个新列

python - 将 Pandas 中的昵称与名字相匹配

python - 想要在列表中存储变量名称,而不是变量的内容