python - Python 中标记化数据的有效数据结构是什么?

标签 python performance text pandas tokenize

我有一个 pandas 数据框,其中有一列包含一些文本。我想修改数据框,以便为所有行中出现的每个不同单词有一列,并用一个 bool 值指示该单词是否出现在我的文本列中该特定行的值中。

我有一些代码可以做到这一点:

from pandas import *

a = read_table('file.tsv', sep='\t', index_col=False)
b = DataFrame(a['text'].str.split().tolist()).stack().value_counts()

for i in b.index:
    a[i] = Series(numpy.zeros(len(a.index)))

for i in b.index:
    for j in a.index:
        if i in str.split(a['text'][j]:
            a[i][j] = 1

但是,我的数据集非常大(200,000 行和大约 70,000 个唯一单词)。有没有更有效的方法来执行此操作,并且不会损坏我的计算机?

最佳答案

我建议使用sklearn,特别是CountVectorizer

import pandas as pd
from sklearn.feature_extraction.text import CountVectorizer
vect= CountVectorizer(binary =True)



 df= pd.DataFrame({'text':['cat on the cat','angel eyes has','blue red angel','one two blue','blue whales eat','hot tin roof','angel eyes has','have a cat'],'labels':\
                  [1,0,1,1,0,0,1,1]})




X = vect.fit_transform(df['text'].values)
y = df['labels'].values
X

<8x16 sparse matrix of type '<type 'numpy.int64'>'
with 23 stored elements in Compressed Sparse Row format>

这将返回一个稀疏矩阵,其中mdf中的行,n是单词集。在矩阵的大多数元素为 0 的情况下,稀疏格式更适合节省内存。将其保留为稀疏似乎是可行的方法,并且许多“sklearn”算法都采用稀疏输入。

您可以从 X 创建一个数据框(如果确实需要,但它会很大):

word_counts =pd.DataFrame(X.todense(),columns = vect.get_feature_names())

关于python - Python 中标记化数据的有效数据结构是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28667154/

相关文章:

python - django 多选浏览器按钮,形式类似于 html

c++ - Visual Studio Profiler 不显示源代码位置

json - Nginx返回带有伪造的200状态代码的空json对象

jquery - 使用 jQuery 实现内联文本元素的交叉淡入淡出

html - 影响 :active 上的多个类

python - 如何在 ObjC 中声明原始二进制/十六进制数据以及如何在参数中传递它?

python - MacOSX 中的 PyGame : CGContextDrawImage: invalid context 0x0

vim - 在 80 个字符处换行

python - 将新字典添加到现有字典中作为键的值

sql-server - 对于特定范围,DBCC FREEPROCCACHE 和 DBCC DROPCLEANBUFFERS 相似