2017-07-18 51 views
0

我試圖用Gensim在Persian語言中創建一個word2vec模型,它具有「space」作爲字符分隔符,我使用python 3.5。我遇到的問題是我給了一個文本文件作爲輸入,它返回一個只包含每個字符而不是單詞的模型。我也給其推薦的輸入作爲單詞的列表:word2vec模型由charachters而不是單詞構成

Python Gensim word2vec vocabulary key

它不工作對我來說,我認爲它不考慮的話的序列中的句子,因此不會是正確的。

我做了我輸入一些預處理其中包括:

崩潰多個空格成一個單一的一個
記號化通過拆分上空白
刪除單詞少於3個字符長 刪除停用詞

我把文本給了word2vec,它給了我正確的結果,但是我需要python,所以我的選擇僅限於使用Gensim。

另外我試圖加載由gensim上的word2vec源代碼生成的模型我得到錯誤,所以我需要由Gensim創建word2vec模型。

我的代碼是:

wfile = open('aggregate.txt','r')  
    wfileRead = wfile.read()  
    model = word2vec.Word2Vec(wfileRead , size=100) 
    model.save('Word2Vec.txt') 
+0

你用'character-encoding'標記了你的問題,但你似乎並沒有意識到如何處理它。強烈建議您在打開它時明確指定「aggregate.py」的編碼,而不是依賴環境的默認編碼。很可能是默認是(偶然的)正確的選擇,並且你的問題與編碼無關,但這是排除在外的第一件事情之一。 – lenz

+0

@lenz謝謝你的回覆,是的,我檢查編碼。 「aggregate.txt」文件編碼是「utf-8」,它是python 3.5的defult編碼。這不是問題,在這種情況下,我會得到編碼錯誤,它不會給我一個基於特徵的模型。 –

+0

打開讀取/寫入文件時,默認編碼不一定是UTF-8。它取決於你的操作系統配置(例如,在Unix系統上,它取決於環境變量'LC_ALL'),你可以用'locale.getpreferredencoding()'來檢查它是什麼。 – lenz

回答

1

的gensim Word2Vec模型並不指望作爲其文本的例子(句子),但名單 - - 令牌。因此,在將代碼傳遞給Word2Vec之前,由代碼來標記文本。

您所顯示的代碼只是將來自'aggregate.txt'文件的原始數據傳遞到Word2Vec中作爲wFileRead

看那gensim文檔中的例子,包括附帶gensim的LineSentence類的想法

0

您需要將文本標記化使用nltk話。

from nltk import word_tokenize 

tokenized_text = word_tokenize(wfileRead) 
model = word2vec.Word2Vec(tokenized_text , size=100) 
相關問題