2013-12-18 76 views
1

在NLTK書的第6章2.1節中,代碼調用電影評論語料庫進行文檔分類。書中的代碼如下:NLTK文檔分類

from nltk.corpus import movie_reviews 
documents = [(list(movie_reviews.words(fileid)), category) 
     for category in movie_reviews.categories() 
     for fileid in movie_reviews.fileids(category)] 
random.shuffle(documents) 

我有我自己的數據集逗號電子郵件的文本和積極或消極的類別之間的分隔(文字,類別)。我可以在我自己的文件上調用.words()嗎?當代碼調用movie_reviews.categories()時代碼是什麼意思。我無法理解如何構造數據以將其轉化爲代碼所需的形式。我查看了各個語料庫文件,但我無法弄清楚在這裏做什麼。任何幫助,將不勝感激。謝謝!

+0

嗨!你有沒有試過在文件上調用'words()'?如果是這樣,會發生什麼情況,或者你會得到什麼樣的錯誤?那麼'categories()'呢? – arturomp

+0

另外,你看過這個問題嗎? http://stackoverflow.com/q/4951751/583834 – arturomp

回答

1

words()只是根據the documentation返回「給定的文件作爲單詞和標點符號列表」。在這方面,您可以在任何文本文件上撥打nltk.corpus.words()

至於categories(),further down在文檔中,它表示它「返回爲此語料庫定義的類別列表,或者如果給出該文件(s),則返回」。但是,它的來源有點晦澀難懂。注意不同的語料庫有不同的方式來表明他們的類別。 movie_reviews通過目錄名稱來完成,但abcreuters在文件中有明確的類別。 qc與文本具有相同文件中的類別。

您可能需要嘗試一下自己的數據以查看是否可以複製此行爲,但合理的第一步是將包含數據子集的目錄添加到nltk_data/corpora,並使用格式你在其他語料庫中看到。