2012-06-26 3 views
0

Мне нужно иметь возможность программно расширять выражения поиска пользователей, такие как: X w/5 (Y || Z) до «X Y» ~ 5 || «X Z» ~ 5
Есть ли существующая библиотека, которую я могу использовать для такого рода вещей? Если нет, то какой подход рекомендуется? Это решение будет жить в среде .NET.программно расширяют X w/5 (Y || Z) до "X Y" ~ 5 || «X Z» ~ 5

+2

Можете ли вы объяснить, почему вы хотите это сделать? Возможно, есть альтернативные пути достижения конечной цели. – GregRos

+0

Я исправил свой пост, чтобы лучше отразить основную цель: передать запрос близости к Lucene. – balazs

ответ

1

Вы хотите взглянуть на сонную нормальную форму http://en.wikipedia.org/wiki/Conjunctive_normal_form и дизъюнктивную нормальную формуhttp: //en.wikipedia.org/wiki/Disjunctive_normal_form.

Существует алгоритм, который вы можете реализовать, а также ссылку на реализацию Java.

1

Что вам нужно, это синтаксический анализатор, который создаст абстрактное синтаксическое дерево, с которым вы сможете работать. Посмотрите here.

+0

Сам анализатор не будет переписывать выражения. Ему нужен парсер плюс обычная процедура перезаписи выражения. –

Смежные вопросы