2016-02-24 160 views
2

我相信我的問題很簡單,但我對python很陌生,我認爲這讓我失望了一下。打印維基百科文章標題來自Gensim WikiCorpus

我已經下載了一個維基百科轉儲,如「準備語料庫」中所述:https://radimrehurek.com/gensim/wiki.html。然後我運行以下幾行代碼:

import gensim 

# these next two lines take around 16 hours 
wikiDocs = gensim.corpora.wikicorpus.WikiCorpus('enwiki-latest-pages-articles.xml.bz2') 
gensim.corpora.MmCorpus.serialize('wiki_en_vocab200k', wikiDocs) 

這些代碼行取自上面的鏈接。現在,在一個單獨的腳本中,我已經完成了一些文本分析。該文本分析的結果是一個數字,代表wikiDocs語料庫中特定文章的索引。這個問題,我不知道如何打印出那篇文章的文字。嘗試明顯的一點就是:

wikiDocs[index_of_article] 

而是返回我已經嘗試了一些其他的事情錯誤

TypeError: 'WikiCorpus' object does not support indexing 

,但我堅持。謝謝你的幫助。

+1

你經常可以得到一個很長的路用'幫助(wikiCorpus)'足見其docstring(如果有的話)或'dir(wikiDocs)',它顯示你所做的實例的界面。否則,運行在IPython中,例如在Jupyter Notebook中,爲您提供了製表符完成和其他漂亮的工具,用於探查對象以找出如何處理它。 – kwinkunks

回答

3

這實際上並不是這麼簡單的問題,它不起作用的原因是WikiCorpus不是一個迭代器,它只是一個具有一些保存和加載函數的類。你可以看到功能買打字WikiCorpus.並按下TAB到IPython中(這顯示了TAB-完成的選項:

In [8]: wikiDocs = gensim.corpora.wikicorpus.WikiCorpus. 
gensim.corpora.wikicorpus.WikiCorpus.get_texts gensim.corpora.wikicorpus.WikiCorpus.load   gensim.corpora.wikicorpus.WikiCorpus.save_corpus 
gensim.corpora.wikicorpus.WikiCorpus.getstream gensim.corpora.wikicorpus.WikiCorpus.save 

看起來我們要get_texts,這可能會返回一個迭代器,而不是一個名單雖然,(迭代器不直接支持索引兩種),所以你將不得不使用

list(wikidocs.get_texts())[i] 

from itertools import islice 
next(islice(wikidocs.get_texts(),i,i+1)) 
+0

是的。 wikiDocs不是數組或列表。事實上它是gensim定義類的一個對象。 –

相關問題