Обнаружение синтаксиса или построитель дерева предложений - PullRequest
0 голосов
/ 29 января 2010

Я обычно довольно хорошо разбираюсь в алгоритмах, но здесь у меня есть довольно абстрактный вопрос, который, возможно, является чьим-то PhD-проектом и граничит с полнотой NP. Но, возможно, это более распространенная проблема, чем я думаю.

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

{Мой кот / Моя собака} имел {котята, щенки} .

Итак, это похоже на древовидную структуру, 4 пути которой представляют 4 возможных предложения.

Как можно было бы реконструировать древовидную структуру из (возможно, неполного) списка предложений?

т.е.

Так что с
у моего кота были котята
У моего кота были щенки
У моей собаки были котята
, Вы все еще можете воссоздать исходное синтаксическое дерево.

Очевидно, что с 25000 строк это займет некоторое время. Но есть ли какое-нибудь программное обеспечение, которое делает это? Или это достаточно распространенная проблема, что для этого существуют известные алгоритмы?

В природе это похоже на анализатор регулярных выражений, но я не знаю, с чего начать. Я имею дело с этой проблемой на работе, и делаю свой собственный анализ предложений, чтобы разобрать еще 500 или около того, каждый раз, когда я нахожу новый шаблон. Но я считаю, что если бы у меня была древовидная структура, я мог бы сделать это порубить отбивную.

Есть идеи? Спасибо

Ответы [ 4 ]

2 голосов
/ 29 января 2010

Это может относиться к изучению конечных автоматов, и в этом случае это действительно сложная проблема, по крайней мере, со стандартными допущениями в этой области. Тем не менее, я подозреваю, что ваш случай проще, чем большинство, потому что вы знаете, что машина находится в одном начальном состоянии в начале, если каждая строка.

Если поиск в Finite Automata слишком утомителен, вы можете просто получить некоторый код для подгонки скрытых марковских моделей, оставить его свободным и надеяться на лучшее.

2 голосов
/ 29 января 2010

Может ли templatemaker быть шагом в правильном направлении для вас? Его цель - вывести шаблоны за одинаково отформатированными строками, что позже позволит вам использовать этот шаблон для извлечения данных из других строк.

1 голос
/ 29 января 2010

Но, возможно, это более распространенная проблема, чем я думаю.

Я считаю, что это известно как логический вывод или грамматический ввод .

0 голосов
/ 14 декабря 2015

Ваша интуиция о регулярном выражении может быть правильной. Это типичная настройка для Grammar Induction : индуцирует ("находит") набор правил, которые позволяют генерировать / распознавать набор строк .

Как правило, дерево - это хорошая структура для визуализации и манипулирования такими правилами.

Один первый вопрос: Ваши строки такие регулярные? (Ответить на этот вопрос не так-то просто, можно было бы оперативно попытаться проверить человеческим осмотром, соответствует ли предполагаемая грамматика вашей цели). Если простота структуры ваших примеров предполагает такой подход, тогда вы можете принять регулярную грамматическую индукцию.

Для некоторых готовых к использованию библиотек см .:

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...