【问题标题】:How to have scikit calculate document-term matrix from pre-tokenized documents?如何让 scikit 从预先标记的文档中计算文档术语矩阵?
【发布时间】:2018-08-15 14:18:24
【问题描述】:

我必须使用可以加载到字符串list 中的预标记文档。我想使用 scikit 的 CountVectorizer 为它们计算文档术语矩阵。这可能吗?

或者我应该自己手动构造/计算一个docterm矩阵吗?

我想为此使用 scikit 的原因是,需要将上述内容集成到使用 scikits CountVectorizer 和 BinomialNB 训练的程序中。

【问题讨论】:

  • 是的,您可以使用 CountVectorizer。但请确保将样本的所有术语包含在一个列表中,可以用空格分隔。
  • 对不起,我不明白。假设我已经有一份适合以前文档的简历,我该怎么做才能将多个列表(每个列表对应一个文档)转换为文档术语矩阵?谢谢
  • 只需调用 transform()
  • 这似乎不起作用。我有一个CountVectorizer cv、一个字符串列表text 和一个MultinomialNB predictor。如果我先dtm = cv.transform(text) 然后prediction = predictor.predict(dtm),我会得到与文本中的单词一样多的预测。似乎它为文本中的每个单词分配了一个类。我不想要那个。我有一个文本,我想将其分类为一个整体(因此我希望有 1 个预测)。我做错了吗?
  • 您传递给转换的列表中的每个元素(在您的情况下为text)将用作单独的样本。如果您希望它们被视为单个,请将它们作为单个字符串传递,并在列表中用空格分隔,这样 len(list)=1.

标签: python machine-learning scikit-learn countvectorizer


【解决方案1】:

在下面的代码中,text_list 是“列表列表”,换句话说就是 text_list = [[doc1],[doc2],...,[docn]]。您可以获得一个稀疏矩阵,其中包含语料库中每个文档的术语及其频率。

from sklearn.feature_extraction.text import CountVectorizer

count_vect = CountVectorizer()
TermCountsDoc = count_vect.fit_transform(text_list)   
Terms = np.array(count_vect.vocabulary_.keys())
T= TermCountsDoc.todense() #in case you need to transform it to dense matrix

【讨论】:

  • 感谢您的帮助。所以很奇怪,这对我不起作用。 Scikit 向我抱怨它如何期望一个字符串列表 - 而不是一个字符串列表列表......但是我找到了一种不同的方法,所以我没有进一步追求这个途径。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-05-16
  • 2018-05-04
  • 2015-05-19
  • 2018-04-29
  • 1970-01-01
  • 1970-01-01
  • 2018-12-12
相关资源
最近更新 更多