Анализ и разбор текста

Добрый день. Помогите задать правильное направление в исследовании.
Есть задача анализа предложений, то есть перевод их в комманды понятные программе. Например «В первую среду января пойти в магазин» — разобрать что нужно сделать и когда. Буду рад абсолютно любым ссылкам на любые материалы.
В частности, интересуют алгоритмы, которыми можно такое достичь. Понимаю что это очень сложная задача, но текст и предложения будут простыми и с некоторой однотипной структурой, поэтому интересует направление куда следует копать.
Спасибо.
  • Вопрос задан
  • 4378 просмотров
Пригласить эксперта
Ответы на вопрос 1
@MikhailEdoshin
У Apple в Newton'е был такой assistant, небольшой системный сервис, которому пишешь, например, «fax Bob», и он соображал, что нужно взять текущий документ, найти в адресной книге Боба и отправить ему этот документ по факсу. Принцип там был несложный, детали можно найти в Newton Programmer's Reference v2.0, ch. 18, Intelligent Assistant. (PDF можно найти в Google.)

Если будете сами писать, советую присмотреться к такому методу разбора CYK — это универсальный bottom-up метод разбора, начинающий с выделения токенов в строке, и затем сворачивающий их по правилам грамматики. Целиком CYK вам не потребуется, скорее всего, потому что у вас основная проблема как раз в отсутствии грамматики, но основной принцип можно использовать примерно так:

— Разбираете строку на слова

— Классифицируете каждое слово. Например, пусть «ПН» будет порядковый номер, «ДН» — день недели, «М» месяц, "?" — неопредленное слово. Ваша фраза будет "?-ПН-ДН-М-?-?-?".

— Ищете в строке паттерны (собственно, это как раз фаза свертки и получается). В данном случае паттерн «ПН-ДН-М», он у вас будет зарегистрирован для парсера дат. В другой строке у вас будет, например, «В среду по первому кино» — "?-ДН-?-ПН-?". Паттерна «ДН-?-ПН» в датах у вас не будет (вряд ли такая комбинация может обозначать дату), поэтому парсеру дат пойдет только «ДН», а «ПН» либо проигнорует, либо отдаст, например, парсеру телеканалов.

Такой подход удобен тем, что грамматика не нужна, а подходящие паттерны вы можете определить по мере обработки данных. Я как-то писал такой парсер для адресов — неплохо разбирал, грамотно различая, например, разные «St» в «St Patrick St». Хотя и не со стопроцентной точностью, попадались там двусмысленные паттерны.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы