1

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

Мой зовутJohn Doe, мой возраст лет, мой адресBarkley Street нет. 7 Гавана. Мне нравитсяшоколадный торт с клубникой и ванилью.

на основе набора предопределенных маркеров (например, «имя», «возраст», «адрес», «Мне нравится»), я хотел бы, чтобы обнаружить их соответствующие значение (например, «Джон Doe "," 28 "," Barkley Street ... Havana "," шоколадный торт ... ваниль ").

Моя текущая попытка состояла в том, чтобы решить это с помощью некоторых шаблонов регулярных выражений: для каждого маркера я построил регулярное выражение, говорящее что-то вроде строк «если вы найдете маркер X, возьмите весь текст между ним и любым из X, Y, Z, которые вы можете найти ". Это извлечение текста между маркерами, но построение всего, что основано на регулярных выражениях, будет очень громоздким, особенно если я начну принимать сгибание и небольшие вариации.

У меня нет большого опыта работы с НЛП, поэтому я не уверен, где я должен начать для правильного решения. Каковы некоторые подходящие подходы/решения/библиотеки для решения этой проблемы?

+0

Хотя я, возможно, не очень хорошо знаю НЛП, могу сказать вам это со 100% уверенностью: регулярные выражения *** НЕ *** достаточно мощные, чтобы сделать надежную интерпретацию текста. Естественные языки чрезвычайно сложны и часто противоречивы, а еще более мощные конструкции, чем регулярные выражения (например, [контекстно-свободные грамматики] (https://en.wikipedia.org/wiki/Context-free_grammar)) недостаточны для обработки текстов на естественном языке , –

+0

Вы можете попытаться разбить строку на основе маркеров. http://www.regexformat.com/version_files/Rx5_ScrnSht01.jpg – sln

+0

Затем вы можете разделить результаты на основе разных маркеров, пока не сможете сформулировать. Recap: Разделить на первичные маркеры, затем разделить на вторичные маркеры (которые могут быть подмножеством основного). – sln

ответ

0

То, что вы на самом деле пытаетесь сделать, это «извлечение информации», особенно названное распознавание сущностей (NER), чтобы обнаружить упоминания о заинтересованности. Для получения дополнительной информации см:

https://en.wikipedia.org/wiki/Information_extraction

Чтобы действительно начать, чтобы решить вашу проблему с чем-то приближается к уровню техники, я хотел бы предложить, глядя в инструментарий Stanford NLP (http://nlp.stanford.edu/software/) для ваших основных задач NLP (токенизаций, POS пометки), но их инструментарий NER не займет у вас слишком далеко от ваших конкретных требований. Вы могли бы попробовать их SPIED, чтобы помочь вам, но я не использовал его и не могу ручаться за него. В конечном счете, если вы серьезно относитесь к этой задаче (которая на первый взгляд звучит довольно сложно), вам придется написать свою собственную систему NER для всех объектов, которые вы хотите извлечь. Возможно, вам захочется включить некоторые из ваших регулярных выражений в функции машинного обучения, которые помогут вам в решении вашей задачи (начните с простой библиотеки ML, такой как LibSVM или Mallet), но независимо от того, будет ли это много работать.

Удачи вам!