如何使用 sklearn 计算词-词共现矩阵?

新手上路,请多包涵

我正在 sklearn 中寻找一个模块,它可以让你推导出词-词共现矩阵。

我可以获得文档术语矩阵,但不确定如何获取共现的词词矩阵。

原文由 newdev14 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 764
1 个回答

这是我在 scikit-learn 中使用 CountVectorizer 的示例解决方案。并参考这篇 文章,您可以简单地使用矩阵乘法来获得词词共现矩阵。

 from sklearn.feature_extraction.text import CountVectorizer
docs = ['this this this book',
        'this cat good',
        'cat good shit']
count_model = CountVectorizer(ngram_range=(1,1)) # default unigram model
X = count_model.fit_transform(docs)
# X[X > 0] = 1 # run this line if you don't want extra within-text cooccurence (see below)
Xc = (X.T * X) # this is co-occurrence matrix in sparse csr format
Xc.setdiag(0) # sometimes you want to fill same word cooccurence to 0
print(Xc.todense()) # print out matrix in dense format

您也可以参考 count_model 中的词典,

 count_model.vocabulary_

或者,如果您想按对角线分量进行归一化(参考上一篇文章中的答案)。

 import scipy.sparse as sp
Xc = (X.T * X)
g = sp.diags(1./Xc.diagonal())
Xc_norm = g * Xc # normalized co-occurence matrix

额外 注意@Federico Caccia 的回答,如果您不希望从自己的文本中出现虚假的共现,请将大于 1 的出现设置为 1,例如

X[X > 0] = 1 # do this line first before computing cooccurrence
Xc = (X.T * X)
...

原文由 titipata 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题