Как выполнить сопоставление строк Java с использованием логического синтаксиса поиска?

Я ищу библиотеку Java/Scala, которая может принимать пользовательский запрос и текст и возвращать, если есть совпадение или нет.

Я обрабатываю поток информации, т. е. Twitter Stream, и не могу позволить себе использовать пакетный процесс, мне нужно оценивать каждый твит в реальном времени, вместо того, чтобы индексировать его через Lucene RAMDisk и запрашивать его позже.

Можно создать синтаксический анализатор/лексер, используя ANTLR, но это настолько распространенное использование, что я не могу поверить, что никто не создал библиотеку раньше.

Несколько примеров из библиотеки TextQuery Ruby, которая делает именно то, что мне нужно:

    TextQuery.new("'to be' OR NOT 'to_be'").match?("to be")   # => true

    TextQuery.new("-test").match?("some string of text")      # => true
    TextQuery.new("NOT test").match?("some string of text")   # => true

    TextQuery.new("a AND b").match?("b a")                    # => true
    TextQuery.new("a AND b").match?("a c")                    # => false

    q = TextQuery.new("a AND (b AND NOT (c OR d))")
    q.match?("d a b")                                         # => false
    q.match?("b")                                             # => false
    q.match?("a b cdefg")                                     # => true

    TextQuery.new("a~").match?("adf")                         # => true
    TextQuery.new("~a").match?("dfa")                         # => true
    TextQuery.new("~a~").match?("daf")                        # => true
    TextQuery.new("2~a~1").match?("edaf")                     # => true
    TextQuery.new("2~a~2").match?("edaf")                     # => false

    TextQuery.new("a", :ignorecase => true).match?("A b cD")  # => true

После того, как она была реализована на Ruby, она не подходит для моей платформы, также я не могу использовать JRuby только для этого момента. наше решение:

Я нашел похожий вопрос, но не смог получить на него ответ: Логический запрос/выражение к конкретному синтаксическому дереву

Спасибо!

13
задан Community 23 May 2017 в 12:25
поделиться