Как анализировать пользовательские теги с помощью nltk.Regexp.parser ()

Мой вопрос похож на этот неотвеченный вопрос: с помощью пользовательских тегов POS для фрагментации NLTK? , но ошибка, которую я получаю, отличается. Я пытаюсь разобрать предложение, к которому я добавил свои собственные теги, специфичные для домена.

Например:

(u'greatest', 'P'), (u'internet', 'NN'), (u'ever', 'A'), (u',', ','), (u'and', 'CC'), (u'its', 'PRP$'), (u'being', 'VBG'), (u'slow', 'N'), (u'as', 'IN'), (u'hell', 'NN')` 

где (u'slow', 'N') является пользовательским тегом 'N' .

Я пытаюсь разобрать это, используя следующее:

 grammar=r""" Chunk:`{<A>?*<P>+}` """ parser=nltk.RegexpParser(grammar) 

Но я получаю следующую ошибку:

 ValueError: Illegal chunk pattern: `{<A>?*<P>+}` 

Выполняет ли nltk.RegexpParser собственные теги? Есть ли другой синтаксический анализатор nltk или python, который может это сделать?

nltk.RegexpParser может обрабатывать пользовательские теги.

Вот как вы можете изменить свой код для работы:

 # Import the RegexpParser from nltk.chunk import RegexpParser # Define your custom tagged data. tags = [(u'greatest', 'P'), (u'internet', 'NN'), (u'ever', 'A'), (u',', ','), (u'and', 'CC'), (u'its', 'PRP$'), (u'being', 'VBG'), (u'slow', 'N'), (u'as', 'IN'), (u'hell', 'NN')] # Define your custom grammar (modified to be a valid regex). grammar = """ CHUNK: {<A>*<P>+} """ # Create an instance of your custom parser. custom_tag_parser = RegexpParser(grammar) # Parse! custom_tag_parser.parse(tags) 

Это результат, который вы получите для своих тестовых данных:

 Tree('S', [Tree('CHUNK', [(u'greatest', 'P')]), (u'internet', 'NN'), (u'ever', 'A'), (u',', ','), (u'and', 'CC'), (u'its', 'PRP$'), (u'being', 'VBG'), (u'slow', 'N'), (u'as', 'IN'), (u'hell', 'NN')]) 

Я не знаком с NTLK, но в регулярных выражениях Python ?* Является синтаксической ошибкой. Возможно, вы имели в виду *? который является ленивым квантором.