Разбор грамматики в рубине
Передо мной стоит задача, которая основывается на интерпретации структуры текста - точнее, одноязычного словаря. Словарь содержит довольно сложные записи: до 29 уникальных элементов, а некоторые вложены в другие. Я проектирую свою собственную XML-схему для словаря, но я хотел бы написать программу, которая автоматически анализирует обычный текст.
У меня есть некоторые базовые навыки в Ruby, и я довольно опытный пользователь RegEx, но я думаю, что создание множества if- деревьев и очень длинных формул RegEx, вероятно, не лучшая идея. Я нашел некоторую информацию о грамматике синтаксического разбора выражения, нормальной форме Бэкуса и W-грамматике, но она кажется несколько расплывчатой в отношении того, что лучше всего применять.
У меня вопрос: какой лучший способ интерпретировать структуру текста, написанного на естественном языке? Я не хочу интерпретировать сам язык, а скорее разделить каждую запись на сегменты на основе используемых символов и ключевых слов, а также их окрестности. Какие драгоценности и ресурсы вы бы предложили?
Изменить: вот пример умеренно простой записи из словаря (на польском языке). Что я хочу сделать, так это пометить каждый элемент (смыслы, объяснения, словосочетание, метки и т. Д.) Как видите, я ищу эффективный способ охватить большое количество дел в древовидной форме. Другая проблема заключается в том, что я хочу иметь множество захватов, поскольку хочу пометить сегменты в XML от большего к меньшему.
1 ответ
Это похоже на проблему, которая хорошо подходит для Treetop. Я не думаю, что у меня достаточно информации, чтобы быть уверенным, что это сработает, но я могу комбинировать регулярные выражения в более крупную структуру, где можно управлять каждым из 29 элементов и извлекать / представлять их информацию, используя любые функции Ruby, в зависимости от ситуации. Похоже, тот набор функций, который вам нужен.