Python 基于稀疏矩阵的gensim语料库
我有一个这样的数据框Python 基于稀疏矩阵的gensim语料库,python,python-3.x,gensim,Python,Python 3.x,Gensim,我有一个这样的数据框 import pandas as pd from gensim.corpora import Dictionary tmp = pd.DataFrame({"word": [1, 0, 0, 0, 0, 0], "house": [0, 1, 0, 0, 0, 0], "tree": [0, 0, 1, 0, 0, 1], # occurred twice
import pandas as pd
from gensim.corpora import Dictionary
tmp = pd.DataFrame({"word": [1, 0, 0, 0, 0, 0],
"house": [0, 1, 0, 0, 0, 0],
"tree": [0, 0, 1, 0, 0, 1], # occurred twice
"car": [0, 0, 0, 1, 0, 0],
"food": [0, 0, 0, 0, 1, 0],
"train": [0, 0, 0, 0, 0, 1]})
mydict = gensim.corpora.Dictionary()
由此,我想创建一个gensim
语料库
我尝试了mycorp=[mydict.doc2bow(col,allow_update=True)作为tmp.columns中的col]
,但生成的语料库似乎没有正确创建:
TypeError:doc2bow需要输入一个unicode标记数组,而不是一个字符串
有人能帮我吗?我希望生成的字典表示单词“tree”在此数据帧中出现两次(即列的总和)。mydict.doc2bow的输入似乎不正确。它需要一个字符串列表,而不是一个字符串。作为文档的字符串列表 情景1
如果您认为每个列名称是一个文档(即文档1是代码> [ Word ] ),那么您可以这样做:
[mydict.doc2bow([col], allow_update=True) for col in tmp.columns]
# [[(0, 1)], [(1, 1)], [(2, 1)], [(3, 1)], [(4, 1)], [(5, 1)]]
mydict.doc2bow(tmp.columns, allow_update=True)
# [(0, 1), (1, 1), (2, 1), (3, 1), (4, 1), (5, 1)]
这六个文档(每个子列表)只有一个单词。子列表中的元组表示(word\u id,frequency)
。因此,第一个文档包含一次word0
。第二个文档包含word1
一次,等等
情景2
如果您认为列名是单个文档,那么您可以这样做:
[mydict.doc2bow([col], allow_update=True) for col in tmp.columns]
# [[(0, 1)], [(1, 1)], [(2, 1)], [(3, 1)], [(4, 1)], [(5, 1)]]
mydict.doc2bow(tmp.columns, allow_update=True)
# [(0, 1), (1, 1), (2, 1), (3, 1), (4, 1), (5, 1)]
其中,语料库由单个文档组成,其中包含一次word0
到word5
一点点背景
与直接处理字符串(“标记”)不同,如“word”、“house”等,gensim
使用表示字符串的整数。这些整数是单词ID。要查看哪个单词对应哪个id,可以使用:
mydict.token2id['word']
# 0
单词包被表示为一个元组,带有(word\u id,frequency)
,因为任何给定的单词都可能在文档中出现多次。特别是在较长的文档中,单个单词可能出现100次
gensim聪明地保存了
(word\u id,100)
,而不是将对该单词的引用保存100次。这表示某个单词在文档中出现100次 doc
的值是多少?您可能是指tmp.columns中的col的mycorp=[mydict.doc2bow([col],allow_update=True)]
您是对的。这就是我的意思——它会产生一条错误信息——我相应地更新了问题谢谢。使用场景1,我想使用矩阵中暗示的权重:“树”已经出现两次——我想在字典中表示这一点;(如何)我可以做到这一点?因为您指的是tmp.columns
,实际上您的“语料库”中只有一次“tree”,因为您不能有重复的列名。如果您在mydict.doc2bow(doc)
中使用doc=[“tree”、“tree”、“word”、“house”]
,那么您可以通过使用mydict.cfs
查看给定单词在语料库中出现的频率,它提供了一个字典,其中关键字是单词id,值是在语料库中出现的次数。我不知道您的数据是什么样的,但是对于您描述的问题,您输入的唯一相关部分是['word'、'house'、'tree'、'car'、'food'、'train']
谢谢。有没有办法将上述矩阵处理为doc1=[“word”]、doc2=[“house”]、doc3=[“tree”、“tree”]
等?是的,doc=[doc1、doc2、doc3]
然后yourdict=Dictionary(doc)
和yourdict.cfs