Python 使用sklearn的共现矩阵中的单词而不是数字

Python 使用sklearn的共现矩阵中的单词而不是数字,python,scikit-learn,networkx,Python,Scikit Learn,Networkx,我有这个密码。它读取句子列表,然后使用sklearn的CountVectorizer计算单词共现 from sklearn.feature_extraction.text import CountVectorizer data = ['this is a sentence', 'this was a monkey', 'all this is nice'] count_model = CountVectorizer(ngram_range=(1,1)) # default unigram mo

我有这个密码。它读取句子列表,然后使用sklearn的CountVectorizer计算单词共现

from sklearn.feature_extraction.text import CountVectorizer
data = ['this is a sentence', 'this was a monkey', 'all this is nice']

count_model = CountVectorizer(ngram_range=(1,1)) # default unigram model
X = count_model.fit_transform(data)
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
matrix_dense = Xc.todense() # matrix in dense format

import networkx as nx
G=nx.from_numpy_matrix(matrix_dense)
如果我执行
G.edges(data=True)
,它将输出以下内容:

   [(0, 1, {'weight': 1}),
 (0, 3, {'weight': 1}),
 (0, 5, {'weight': 1}),
 (1, 3, {'weight': 1}),
 (1, 4, {'weight': 1}),
 (1, 5, {'weight': 2})
等等。我如何获得单词而不是数字作为源、目标

编辑:

这是一个:

labels = count:model.get_feature_names() # get the word labels

G=nx.from_numpy_matrix(matrix_dense) # create graph

for node, label in zip(G.nodes(), labels): # add labels to the graph
    G.node[node]['label'] = label

使用networkx,您可以将一组节点替换为另一组节点。这是我的

以下是文档中的示例。它创建一个3节点图,然后使用新节点名创建该图的副本。通过在函数调用中将可选参数
copy
设置为
False
,也可以直接执行
G

G = nx.path_graph(3)
sorted(G)
> [0, 1, 2]
mapping = {0: 'a', 1: 'b', 2: 'c'}
H = nx.relabel_nodes(G, mapping)
sorted(H)
> ['a', 'b', 'c']

使用networkx,您可以将一组节点替换为另一组节点。这是我的

以下是文档中的示例。它创建一个3节点图,然后使用新节点名创建该图的副本。通过在函数调用中将可选参数
copy
设置为
False
,也可以直接执行
G

G = nx.path_graph(3)
sorted(G)
> [0, 1, 2]
mapping = {0: 'a', 1: 'b', 2: 'c'}
H = nx.relabel_nodes(G, mapping)
sorted(H)
> ['a', 'b', 'c']

您可以使用
。在
CountVectorizer
对象上获取特征名称,以获取相应索引处的特征名称列表。谢谢。现在,将功能名称作为列表,那么如何在图中获得标签呢?嗯,这是一个映射,数字->字符串,因此您可以简单地迭代从
.edges
返回的列表,并相应地替换您想要的任何内容…谢谢!我用解决方案编辑了上面的内容。您可以使用
。在
CountVectorizer
对象上获取特征名称,以获取相应索引处的特征名称列表。谢谢。现在,将功能名称作为列表,那么如何在图中获得标签呢?嗯,这是一个映射,数字->字符串,因此您可以简单地迭代从
.edges
返回的列表,并相应地替换您想要的任何内容…谢谢!我用解决方案编辑了上面的内容。很好。但是在这种情况下,如果手动键入太长,我想还必须基于
.get\u feature\u names()
创建
映射
字典。事实上,我建议不要手动键入,即使它很短,因为如果代码能够生成映射,则在情况发生变化时更容易重用。很好。但在这种情况下,如果手动键入太长,我想还必须基于
.get\u feature\u names()
创建
映射
字典。事实上,我建议不要手动键入,即使它很短,因为如果代码能够生成映射,则在情况发生变化时更易于重用。