0

皆さん、基本的に単純な XML ファイルである NLTK の一連のコーパスをまとめました。次のように問題なくロードできます。

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

XMLCorpusReader は一度に 1 つの XML だけを処理することを想定しているため、これらすべての XML ファイルの内容を一度に取得できないことは理解できました。for ループを記述してバイパスし、すべてをリストに入れて XMLCorpusReader に渡そうとしましたが、うまくいきませんでした...

簡単に言えば、NLTK を使用して複数の XML コーパスをロードし、それらすべてで一度に .words() を実行するにはどうすればよいでしょうか? 実際のコード例は良いでしょう。

すべての XML を一度に読み込んで、それらをクラス Text() で使用して、一度に 1 つずつではなく、すべての XML ファイルから単語のコンコーダンスを出力することはできないようです。

これに対する回避策または実際の NLTK ソリューションはありますか? それを行う XMLCorpusReader の魔法の継承クラスを作成する必要がありますか? XML をやめて、フラット ファイルを使用する必要がありますか?

これは私の問題に似ていますが、これまでのところ、そこにある答えは NLTK に関してはあまり役に立たないと思います:複数ファイルのコーパスで NLTK の XMLCorpusReader を使用できますか?

4

1 に答える 1

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')
于 2012-04-17T02:23:56.007 に答える