![](/img/trans.png)
[英]How to convert Gensim corpus to numpy array (or scipy sparse matrix) efficiently?
[英]gensim corpus from sparse matrix
我有一個這樣的數據框
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) for col in tmp.columns]
但生成的語料庫似乎沒有正確創建:
類型錯誤:doc2bow 需要輸入的 unicode 標記數組,而不是單個字符串
有人可以幫我弄這個嗎? 我希望生成的字典能夠表示單詞“tree”在此數據框中出現兩次的事實(即列的總和)。
mydict.doc2bow
的輸入似乎不正確。 它需要一個字符串列表,而不是單個字符串。 作為文檔的字符串列表。
如果您將每個列名稱視為一個文檔(即文檔 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)]]
這些是只有一個單詞的六個文檔(每個子列表)。 子列表中的元組表示(word_id, frequency)
。 所以第一個文檔包含word0
一次。 第二個文檔包含一次word1
, word1
。
如果您將列名視為單個文檔,則可以執行以下操作:
mydict.doc2bow(tmp.columns, allow_update=True)
# [(0, 1), (1, 1), (2, 1), (3, 1), (4, 1), (5, 1)]
您的語料庫由單個文檔組成,其中包含word0
到word5
一次
gensim
不是直接使用字符串(“tokens”),如“word”、“house”等, gensim
使用表示字符串的整數。 這些整數是單詞 id。 要查看哪個單詞對應哪個 id,可以使用:
mydict.token2id['word']
# 0
詞袋表示為一個帶有(word_id, frequency)
的元組,因為任何給定的詞都可能在文檔中出現多次。 特別是在較長的文檔中,單個單詞可能出現 100 次。
gensim 不是將對該單詞的引用保存 100 次,而是巧妙地保存(word_id, 100)
。 這表示某個單詞在文檔中出現了 100 次。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.