Самый простой способ классифицировать корпус состоит в том, чтобы иметь один файл для каждой категории. Ниже приведены две выдержки из корпуса movie_reviews:
movie_pos.txt
the thin red line is flawed but it provokes .
movie_neg.txt
a big-budget and glossy production can not make up for a lack of
spontaneity that permeates their tv show .
С этими двумя файлами у нас будет две категории: pos и neg.
Мы будем использовать CategorizedPlaintextCorpusReader
, который наследуется от PlaintextCorpusReader
и CategorizedCorpusReader
. Этим двум суперклассам требуется три аргумента: корневой каталог, fileids
и спецификация категории.
>>> from nltk.corpus.reader import
CategorizedPlaintextCorpusReader
>>> reader = CategorizedPlaintextCorpusReader('.', r'movie_.*\.
txt', cat_pattern=r'movie_(\w+)\.txt')
>>> reader.categories()
['neg', 'pos']
>>> reader.fileids(categories=['neg'])
['movie_neg.txt']
>>> reader.fileids(categories=['pos'])
['movie_pos.txt']
Первые два аргумента CategorizedPlaintextCorpusReader
- это корневой каталог и fileid, которые передаются в PlaintextCorpusReader для чтения файлов. Ключевое слово cat_pattern
является регулярным выражением для извлечения имен категорий из файловых идентификаторов. В нашем случае категория является частью fileid после movie_ и перед .txt. Категория должна быть заключена в круглые скобки. cat_pattern передается в CategorizedCorpusReader
, который переопределяет обычные функции чтения корпуса, такие как fileids()
, words()
, sents()
и paras()
, чтобы принять аргумент ключевого слова category. Таким образом, вы можете получить все pos-предложения, позвонив reader.sents(categories=['pos'])
. CategorizedCorpusReader
также предоставляет функцию category (), которая возвращает список всех известных категорий в корпусе.