Мне нужно иметь возможность программно расширять выражения поиска пользователей, такие как: X w/5 (Y || Z) до «X Y» ~ 5 || «X Z» ~ 5
Есть ли существующая библиотека, которую я могу использовать для такого рода вещей? Если нет, то какой подход рекомендуется? Это решение будет жить в среде .NET.программно расширяют X w/5 (Y || Z) до "X Y" ~ 5 || «X Z» ~ 5
0
A
ответ
1
Вы хотите взглянуть на сонную нормальную форму http://en.wikipedia.org/wiki/Conjunctive_normal_form и дизъюнктивную нормальную формуhttp: //en.wikipedia.org/wiki/Disjunctive_normal_form.
Существует алгоритм, который вы можете реализовать, а также ссылку на реализацию Java.
1
Что вам нужно, это синтаксический анализатор, который создаст абстрактное синтаксическое дерево, с которым вы сможете работать. Посмотрите here.
+0
Сам анализатор не будет переписывать выражения. Ему нужен парсер плюс обычная процедура перезаписи выражения. –
Смежные вопросы
- 1. В чем разница между char * x, y, z; char * x, y, z; char (*) x, y, z ;?
- 2. Комбинации трех положительных чисел x, y, z, так что x + y, x - y, y + z, y - z, x + z и x - z - идеальные квадраты
- 3. Почему pow (x, y, z) эффективнее, чем (x^y)% z?
- 4. Разница между [[x], [y], [z]] и [x, y, z]
- 5. Сокращение If/Else from if (x == y || x == z) до if (x == y || z) в swift
- 6. range (n) [x: y: z]
- 7. [] .concat (["x", "y"], "z") -> Как получить [["x", "y"], "z"] вместо ["x", "y" , "г"]?
- 8. mayavi - настройка изображения [x, y, z] программно
- 9. Было бы лучше использовать «if x in (y, z)« over », если x == y или x == z"?
- 10. $ x * $ y = $ z равно нулю
- 11. 3d graph (x, y, z)
- 12. Сколько дней до даты X-Y-Z?
- 13. Как упростить x && (! Y || (y && z))
- 14. Практический пример MVD3: (транзитивность) Если X ↠ Y и Y ↠ Z, то X ↠ (Z - Y)
- 15. Функция JavaScript «X - Y = Z» возвращает Y как значение Z
- 16. Линейное решение для 2^x * 3^y * 5^z
- 17. Преобразование datafiles 'X' 'Y' 'Z' 'data' format
- 18. Преобразование формы матрицы тензорного потока из (x, y, z) в (1, x, y, z)
- 19. как рисовать x, y, z в matlab?
- 20. При использовании удвоений, почему (x/(y * z)) не совпадает (x/y/z)?
- 21. Невозможно преобразовать X :: Y :: Z в X :: Y :: Z в IronRuby
- 22. Учитывая набор точек, определенных в координатах (X, Y, Z), интерполируйте Z-значение при произвольном (X, Y)
- 23. Распечатайте номер x кратным y * z
- 24. Как найти пространство решений (x, y, z) для функции f (x, y, z) = 0 в MATLAB
- 25. Найдите три индекса x, y, z таких, что M [x] + M [y] = N [z]
- 26. Как скопировать таблицу умножения без повторения x * y = z, y * x = z
- 27. Графики (x, y, z) триплеты над координатами (x, y) с цветом z
- 28. В Ruby существует разница между% w (x y z) и% w [x y z]?
- 29. Действительно ли [x, y, z] .join ('') быстрее, чем x + y + z для строк?
- 30. Лучше ли вычислять log (x/(y * z)) или log (x) -log (y) -log (z)?
Можете ли вы объяснить, почему вы хотите это сделать? Возможно, есть альтернативные пути достижения конечной цели. – GregRos
Я исправил свой пост, чтобы лучше отразить основную цель: передать запрос близости к Lucene. – balazs