В ходе работы над проектом почувствовал что мне необходим незамысловатый механизм для сравнения строк одновременно с возможностями, близкими к регэкспам и в то же время умеющие нечётко сравнивать строки. Ну вообще идеально если бы ещё настройки на мелкие особенности языка были.
Т.е. например задаем выражение вроде:
(остров | о-в | о) + (зел | зеленого) + мыса
И с его помощью определяем что строчки типа
преплыли на острав зилёного мысу
адрес о-ва зел. мыс. ул. Ф.Кастро
содержат нужную фразу (и находим вероятную позицию а также степень соответствия).
Я поискал подходящую библиотечку для java, но пока что-то не повезло. Временно написал собственную реализацию и потихоньку пользуюсь, но если бы нашлось что-то готовое и качественное, предпочёл бы...
P.S. TRE в dll-ку собрать и вызывать через JNI не предлагать... Проект кроссплатформенный и все такое...
Т.е. например задаем выражение вроде:
(остров | о-в | о) + (зел | зеленого) + мыса
И с его помощью определяем что строчки типа
преплыли на острав зилёного мысу
адрес о-ва зел. мыс. ул. Ф.Кастро
содержат нужную фразу (и находим вероятную позицию а также степень соответствия).
Я поискал подходящую библиотечку для java, но пока что-то не повезло. Временно написал собственную реализацию и потихоньку пользуюсь, но если бы нашлось что-то готовое и качественное, предпочёл бы...
P.S. TRE в dll-ку собрать и вызывать через JNI не предлагать... Проект кроссплатформенный и все такое...
На форумах программистов, специализирующихся на конкретных языках проблема с точностью до наоборот - у-у-у, да тут какие-то алгоритмы нужны... %)
Есть такой боян:
"Решая проблему, программист применил регулярные выражения. Теперь у него две проблемы."
В ряде задач связанных с обработкой строк и вообще текстовой информации отказ от применения регэкспов приводит к превращению программы в настоящее болото...
Вообще это классная штука с замечательными возможностями, но для несколько других вещей...
Запросы для полнотекстового поиска в принципе похожи на те регэкспы которые мне нужны, но поскольку мне приходится искать не в каких-то огромных наборах документов, а наоборот проверять соответствие коротких строк довольно большому количеству разных запросов...
Т.е. типичный поисковый запрос может, скажем, указать что нужен документ в котором есть слово1 обязательно, а слово2 желательно и если повезёт, то что-то похожее на слово3... Мне же нужно уметь указывать что я хочу строку, в которой например слово1 предшествует паре из слова2 и слова3, причём перед словом2 может присутствовать слово4...
Fuzzy там есть.... И особенно круто - даже нужную точность сравнения можно указывать для каждого слова... Но в том и проблема - есть много библиотечек для fuzzy text matching - и много для регэкспов... Но чтоб два в одном... %)