Парсинг слабоструктурированного текста

Рейтинг: 2Ответов: 1Опубликовано: 31.01.2015

Здравствуйте.

Есть вот такой текст1, состоящий из вопроса и ответов:

Какие три черты из пе­ре­чис­лен­ных ниже ха­рак­те­ри­зо­ва­ли прав­ле­ние царя Алек­сея Ми­хай­ло­ви­ча? Со­от­вет­ству­ю­щие цифры и за­пи­ши­те их в ответ.

1. цер­ков­ный рас­кол
2. на­ча­ло де­я­тель­но­сти Зем­ских со­бо­ров
3. об­мир­ще­ние куль­ту­ры
4. уга­са­ние де­я­тель­но­сти Зем­ских со­бо­ров
5. раз­дел Речи Поспо­ли­той
6. со­зда­ние кол­ле­гий

Также есть текст2, состоящий из вот такого (например) пояснения:

В прав­ле­ние царя Алек­сея Ми­хай­ло­ви­ча (1645—1676 гг.) про­изо­шел цер­ков­ный рас­кол в ре­зуль­та­те ре­форм пат­ри­ар­ха Ни­ко­на, на­чал­ся про­цесс об­мир­ще­ния куль­ту­ры и уга­са­ла де­я­тель­ность Зем­ских со­бо­ров. Пер­вый Зем­ский собор начал ра­бо­ту в 1549 году. Раз­де­лы Речи Поспо­ли­той про­шли в 1772, 1793, 1795 гг. Кол­ле­гии были со­зда­ны в 1718 году.

Как на основе анализа этих двух текстов, получить на выходе массив индексов с правильными ответами, т.е.:

1, 3, 4, 5, 6
?

Т.е. требуется какой-нибудь готовый интеллектуальный анализатор для текста, который будет выполнять поиск подстрок в неструктурированном тексте, основываясь на отбрасывании окончаний.

Ответы

▲ 2Принят

Условия:

  1. Оба текста на русском.
  2. Первый текст легко парсим (т.е. состоит из пунктов 1) 2) 3) и т.д.)
  3. Второй текст всегда истинный и по теме.
  4. Мы согласны на правильную работу алгоритма ~60% случаях.

Алгоритм:

  1. Парсим первый тест на условия (т.е. разделяем на "церковный раскол", "начало деятельности земских соборов" и т.д.)
  2. Делаем следующие пункты алгоритма для каждого из условий:
  3. Проходимся по второму тексту, оцениваем синонимичность каждого слова предложения со словами из нашего условия. Придётся использовать различные библиотеки и базы слов.
  4. Делаем проверки на содержание "не" в нашем условии и предложении.
  5. Если (коэффициент синонимичности > N), то { если (проверки на не совпадают (т.е. и там, и там либо не есть, либо не нету)), то условие верно, иначе условие неверно } (N находится методом подбора так, чтобы программа лучше работала).
  6. Если коэффициент меньше N в каждом предложении для условия, то лучше пользователю так и написать "в тексте не сказано/программа не нашла".

Правда, этот алгоритм, например, не учитывает антонимы.

Короче, дальше начинается эвристика, а основа алгоритма примерно такая.