簡體   English   中英

來自稀疏矩陣的 gensim 語料庫

[英]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一次。 第二個文檔包含一次word1word1

場景二

如果您將列名視為單個文檔,則可以執行以下操作:

mydict.doc2bow(tmp.columns, allow_update=True) 
# [(0, 1), (1, 1), (2, 1), (3, 1), (4, 1), (5, 1)]

您的語料庫由單個文檔組成,其中包含word0word5一次

一點背景

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM