2009-11-06 5 views
9

Я использую по умолчанию теги POS и токенирование по умолчанию .. и кажется достаточным. Я бы хотел, чтобы их стандартный chunker тоже.Что представляет собой наборщик по умолчанию для набора инструментов NLTK в Python?

Я читаю книгу инструментов NLTK, но похоже, что у них нет стандартного chunker?

ответ

9

Вы можете выйти из поля с именем entity chunking с помощью метода nltk.ne_chunk(). Он принимает список POS помеченный кортежи:

nltk.ne_chunk([('Barack', 'NNP'), ('Obama', 'NNP'), ('lives', 'NNS'), ('in', 'IN'), ('Washington', 'NNP')])

результаты:

Tree('S', [Tree('PERSON', [('Barack', 'NNP')]), Tree('ORGANIZATION', [('Obama', 'NNP')]), ('lives', 'NNS'), ('in', 'IN'), Tree('GPE', [('Washington', 'NNP')])])

Он идентифицирует Barack как человек, но Обама, как организации. Так что, не идеально.

+1

Что делать, если я не очень беспокоюсь о named_entities, но в целом. Например, «желтая собака» - это кусок, а «работает» - это кусок. – TIMEX

+0

Да, для этого нет никаких оснований для моих знаний (хотя, конечно, я не знаю все о nltk). Вы можете использовать RegexpChunkParser, хотя вам придется разрабатывать правила самостоятельно. Вот пример: http://gnosis.cx/publish/programming/charming_python_b18.txt – ealdent

8

Я также не смог найти по умолчанию chunker/мелкий синтаксический анализатор. Хотя в книге описывается, как создавать и обучать один с примерами. Привлечение дополнительных функций для получения хорошей производительности не должно быть слишком сложным.

См. Главу 7 раздела Training Classifier-based Chunkers.