我正在寻找一种有效的方法在Python中构建一个术语文档矩阵,可以与额外的数据一起使用。
我有一些文本数据和一些其他属性。我想对文本进行一些分析,并希望能够将从文本中提取的特征(如单词标记或LDA主题)与其他属性相关联。
我的计划是将数据加载为Pandas数据框架,然后每个响应将表示一个文档。不幸的是,我遇到了一个问题:
import pandas as pd
import nltk
pd.options.display.max_colwidth = 10000
txt_data = pd.read_csv("data_file.csv",sep="|")
txt = str(txt_data.comment)
len(txt)
Out[7]: 71581
txt = nltk.word_tokenize(txt)
txt = nltk.Text(txt)
txt.count("the")
Out[10]: 45
txt_lines = []
f = open("txt_lines_only.txt")
for line in f:
txt_lines.append(line)
txt = str(txt_lines)
len(txt)
Out[14]: 1668813
txt = nltk.word_tokenize(txt)
txt = nltk.Text(txt)
txt.count("the")
Out[17]: 10086
注意,在两种情况下,文本都被处理成只剩下除了空格、字母和,.?!以外的内容(为简单起见)。如您所见,将pandas字段转换为字符串会返回较少的匹配项,而字符串的长度也较短。
有没有办法改进上面的代码?
此外,
str(x)
将注释创建为1个大字符串而[str(x) for x in txt_data.comment]
创建了一个列表对象,该对象无法分解为词袋。如何最好地生成一个nltk.Text
对象,使其保留文档索引?换句话说,我正在寻找一种从tm
包中创建Term Document Matrix(即R的等价于TermDocumentMatrix()
)的方法。非常感谢。