2012-04-16 27 views
0

夥計們,我已經爲NLTK提供了一套基本上簡單的XML文件的語料庫。我可以加載它只是罰款這樣的:如何使用NLTK加載多個語料庫XML文件並將其與Text類一起使用?

>>> from nltk.corpus import cicero 
>>> print cicero.fileids() 
['cicero_academica.xml', 'cicero_arati_phaenomena.xml', ...] 

現在,我明白了XMLCorpusReader不會給所有的XML文件,我的內容在一次,因爲它希望只有一個單一的XML一下子processe,對不對?我試圖繞過它寫一個for循環,把它放在一個列表中,並將它交給XMLCorpusReader,但沒有運氣...

簡而言之:我怎樣才能加載多個XML語料庫與NLTK並運行.words()在他們所有的一次?工作代碼示例會很好。

看來我不能一次加載所有的XML,並且使用它們(比如說用類Text()來再次說明,通過所有XML文件打印一個單詞的一致性,而不僅僅通過一個時間。

是否有任何解決此問題的解決方法或真正的NLTK解決方案?我應該寫一個神奇的繼承類的XMLCorpusReader嗎?我應該放棄XML,並去平面文件...?

這是類似我的問題,但到目前爲止,我認爲答案有沒有真正有用的NLTK明智:Can NLTK's XMLCorpusReader be used on a multi-file corpus?

+0

旁註:在考慮去爲平面文件,我發現這一點:http://pastebin.com/qRPeqZmR(聽起來像我所需要的,但相當hackish的,因爲我期待NLTK自己解決大部分問題......)。儘管如此,仍然在思考。 – caio1982 2012-04-16 19:31:34

+0

我還沒有使用NLTK,只是下載它試圖幫助你與此。但是:你說你不能只用'cicero.words()'來獲取所有文件中的單詞?它知道fileids,但不會讀取它們?顯示你如何定義你的語料庫類,也許? – kindall 2012-04-16 20:02:37

+0

剛剛發佈了一個自己的答案與一個工作示例。感謝您看看它,但:-) – caio1982 2012-04-17 02:24:49

回答

0

不正是我之後,但它解決了這個問題現在。我會多花一點時間,所以稍後可能會有所不同。無論如何,一個小型的工作測試:-)

# http://stackoverflow.com/questions/6849600/does-anyone-have-a-categorized-xml-corpus-reader-for-nltk 
from CatXMLReader import CategorizedXMLCorpusReader 

from nltk.corpus import cicero 
from nltk import Text 

fileids = cicero.abspaths() 
reader = CategorizedXMLCorpusReader('/', fileids, cat_file='cats.txt') 
words = Text(reader.words(fileids)) 
print words.concordance('et') 
相關問題