Как создать подкатегорию для корпуса в NLTK Python - PullRequest
3 голосов
/ 16 марта 2012

Я пытался создать другую категорию в родительской категории. Это возможно создать. Как это можно сделать и как ссылаться на эти подкатегории?

Ответы [ 2 ]

1 голос
/ 10 февраля 2016

Самый простой способ классифицировать корпус состоит в том, чтобы иметь один файл для каждой категории. Ниже приведены две выдержки из корпуса 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 (), которая возвращает список всех известных категорий в корпусе.

1 голос
/ 26 марта 2012

CategorizedCorpusReader поддерживает только один уровень категорий.Но поскольку категории основаны на имени файла, вы можете установить собственную схему имени / категории и при необходимости отфильтровать полные файлы корпуса.

Как вы хотите использовать многоуровневые категории?Если у вас есть дополнительные вопросы, объясните, чего вы хотите достичь и что вы уже пробовали.

...