从大型语料库创建DTM

时间:2016-10-08 11:44:09

标签: python pandas scikit-learn nltk

我在列表中包含了一组文本,我从csv文件中加载了

texts=['this is text1', 'this would be text2', 'here we have text3']

我想通过使用词干创建一个文档术语矩阵。 我也阻止他们:

[['text1'], ['would', 'text2'], ['text3']]

我想要做的是创建一个计算所有词干术语的DTM(然后我需要对行进行一些操作)。

对于未经编辑的文本,我可以使用函数fn_tdm_df报告here来制作短文本的DTM。 然而,对我来说更实际的是制作词干的DTM。为了更清楚,我应用“fn_tdm_df”的输出:

  be  have  here   is  text1  text2  text3  this   we  would
0  1.0   1.0   1.0  1.0    1.0    1.0    1.0     1  1.0    1.0
1  0.0   0.0   0.0  0.0    0.0    0.0    0.0     1  0.0    0.0

首先,我不知道为什么我只有两行,而不是三行。其次,我想要的输出类似于:

  text1  would  text2  text3
0   1      0      0      0
1   0      1      1      0
2   0      0      0      1

我很抱歉,但我对此输出非常绝望。我还尝试在R上导出和重新导入词干文本,但它没有正确编码。我可能需要处理DataFrames,就像大量的数据一样。你会建议我什么?

-----更新

使用CountVectorizer我并不完全满意,因为我没有一个易于处理的矩阵,我可以很容易地对行/列进行规范化和求和。

这是我正在使用的代码,但它阻止了Python(数据集太大)。我怎样才能有效地运行它?

vect = CountVectorizer(min_df=0., max_df=1.0)
X = vect.fit_transform(texts)
print(pd.DataFrame(X.A, columns=vect.get_feature_names()).to_string())
df = pd.DataFrame(X.toarray().transpose(), index = vect.get_feature_names())

1 个答案:

答案 0 :(得分:1)

为什么不使用sklearnCountVectorizer()方法将文本文档集合转换为令牌计数矩阵。还有什么使用scipy给出了稀疏的计数表示。

您可以将原始条目提供给方法,也可以像您一样预处理它(阻止+停用词)。

检查出来:CountVectorizer()