ユーザークエリとテキストを受け取り、一致するかどうかを返す Java/Scala ライブラリを探しています。
Twitter ストリームなどの情報ストリームを処理していますが、バッチ処理を使用する余裕はありません。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 を使用することはできません。
同様の質問を見つけましたが、答えを得ることができませんでした: Boolean Query / Expression to a Concrete syntax tree
ありがとう!