Я пытаюсь подделать текст, использовать теггер POS, а затем вырезать его вывод с помощью настраиваемого «шаблона» (см. Ниже). Это мои репозитории импорта, а затем вывод помечены позицией.Python NLTK и Regexp
from nltk.chunk import *
from nltk.chunk.util import *
from nltk.chunk.regexp import *
pos = [(u'max', 'NN'), (u'workpiece', 'NN'), (u'diameter', 'NN'), (u'250', 'CD'), (u'mm', 'NN'), (u'threading', 'VBG'), (u'length', 'NN'), (u'800', 'CD'), (u'mm', 'NN'), (u'max', 'NN'), (u'module', 'NN'), (u'5', 'CD'), (u'total', 'NN'), (u'power', 'NN'), (u'requirement', 'NN'), (u'5', 'CD'), (u'kW', 'NNP')]
Я пытаюсь настроить POS Chunker я создал следующим образом:
pattern = r"""
FEAT: {<NN><NN>+}
{<VBG><NN>}
VAL: {<CD><NN|NNP>}
"""
Мой выходной ток:
(S
(ATTR max/NN workpiece/NN diameter/NN)
(VAL 250/CD mm/NN)
(ATTR threading/VBG length/NN)
800/CD
(ATTR mm/NN max/NN module/NN)
5/CD
(ATTR total/NN power/NN requirement/NN)
(VAL 5/CD kW/NNP)
Моя требуемая мощность:
(S
(ATTR max/NN workpiece/NN diameter/NN)
(VAL 250/CD mm/NN)
(ATTR threading/VBG length/NN)
(VAL 800/CD mm/NN)
(ATTR max/NN module/NN)
5/CD
(ATTR total/NN power/NN requirement/NN)
(VAL 5/CD kW/NNP)
Как я могу настроить этот chucki так что 800 (CD) мм (NN) также будут рассматриваться как VAL. Я думал, что мой код VAL выражает: найдите один маркер с маркированным тегом, за которым следует токен NN. И какой подход я должен предпринять для достижения этого?
Благодаря
спасибо за ответ, я отредактировал мой оригинальный пост – OAK
Try оборачиваясь порядка ваших правил грамматики/Chunker (так что VAL приходит первый). Парсер nltk для этого довольно триггерный и не позволяет использовать несколько деревьев синтаксического анализа, поэтому он будет иметь первое совпадение. – Igor