Блог пользователя RodionGork

Автор RodionGork, 13 лет назад, По-русски
В ходе работы над проектом почувствовал что мне необходим незамысловатый механизм для сравнения строк одновременно с возможностями, близкими к регэкспам и в то же время умеющие нечётко сравнивать строки. Ну вообще идеально если бы ещё настройки на мелкие особенности языка были.

Т.е. например задаем выражение вроде:

(остров | о-в | о) + (зел | зеленого) + мыса

И с его помощью определяем что строчки типа
преплыли на острав зилёного мысу
адрес о-ва зел. мыс. ул. Ф.Кастро
содержат нужную фразу (и находим вероятную позицию а также степень соответствия).

Я поискал подходящую библиотечку для java, но пока что-то не повезло. Временно написал собственную реализацию и потихоньку пользуюсь, но если бы нашлось что-то готовое и качественное, предпочёл бы...

P.S. TRE в dll-ку собрать и вызывать через JNI не предлагать... Проект кроссплатформенный и все такое...
  • Проголосовать: нравится
  • -1
  • Проголосовать: не нравится

13 лет назад, # |
Rev. 3   Проголосовать: нравится -10 Проголосовать: не нравится

Я думаю, что здесь тебе не ответят, т.к. это все-таки(буду кепом) сайт олимпиадного программирования. Тебе нужно искать какой-то специализированный форум программистов(именно специализирующихся на конкретном языке). И скорее всего тебе предстоит искать промышленников, а не олимпиадников.
  • 13 лет назад, # ^ |
      Проголосовать: нравится 0 Проголосовать: не нравится
    Всё верно, поэтому здесь я задал вопрос в последнюю очередь, типа отчаялся уже... ;-)

    На форумах программистов, специализирующихся на конкретных языках проблема с точностью до наоборот - у-у-у, да тут какие-то алгоритмы нужны... %)
13 лет назад, # |
  Проголосовать: нравится +14 Проголосовать: не нравится

Есть такой боян:

"Решая проблему, программист применил регулярные выражения. Теперь у него две проблемы."

  • 13 лет назад, # ^ |
      Проголосовать: нравится 0 Проголосовать: не нравится
    По-видимому придумано "программистом" который "ниасилил" регэкспы... ;-)
    • 13 лет назад, # ^ |
        Проголосовать: нравится 0 Проголосовать: не нравится
      Не думаю, и зря вы взяли в кавычки слово программист. Иногда использование регулярных выражений может привести к усложнению программы, её поддержки другими программистами. А также к усложнению в изменении логики. Если задача решается регулярными выражениями, а вам надо что-то похожее но чуть-чуть не то, то вам сложно будет обеспечить нужную функциональность. 
      • 13 лет назад, # ^ |
          Проголосовать: нравится +2 Проголосовать: не нравится
        Да ну. Так говорят и о языках ("не используйте такие-то языки, программу будет сложно поддерживать") и об алгоритмах или механизмах (не используйте регэкспы, не используйте автоматы состояний) и даже о конструкциях ("не используйте goto, не используйте циклы do-while")... Если всё это суммировать то получается не программируйте, а то мало ли чего!

        В ряде задач связанных с обработкой строк и вообще текстовой информации отказ от применения регэкспов приводит к превращению программы в настоящее болото...
  • 13 лет назад, # ^ |
      Проголосовать: нравится 0 Проголосовать: не нравится
    Some people, when confronted with a problem, think "I know, I’ll use regular expressions." Now they have two problems.
13 лет назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится
Lucene-Не подойдет? По крайней мере,какой то fuzzy query там есть:)
  • 13 лет назад, # ^ |
    Rev. 2   Проголосовать: нравится 0 Проголосовать: не нравится

    К сожалению не подойдёт... Мне его уже предлагали пару дней назад, так что я успел посмотреть что там к чему... ;-)

    Вообще это классная штука с замечательными возможностями, но для несколько других вещей...

    Запросы для полнотекстового поиска в принципе похожи на те регэкспы которые мне нужны, но поскольку мне приходится искать не в каких-то огромных наборах документов, а наоборот проверять соответствие коротких строк довольно большому количеству разных запросов...

    Т.е. типичный поисковый запрос может, скажем, указать что нужен документ в котором есть слово1 обязательно, а слово2 желательно и если повезёт, то что-то похожее на слово3... Мне же нужно уметь указывать что я хочу строку, в которой например слово1 предшествует паре из слова2 и слова3, причём перед словом2 может присутствовать слово4...

    Fuzzy там есть.... И особенно круто - даже нужную точность сравнения можно указывать для каждого слова... Но в том и проблема - есть много библиотечек для fuzzy text matching - и много для регэкспов... Но чтоб два в одном... %)