Tôi đang tìm thư viện Java/Scala có thể lấy truy vấn người dùng và văn bản và trả về nếu có kết hợp hay không.Cách thực hiện khớp chuỗi Java bằng cách sử dụng Cú pháp tìm kiếm Boolean?
Tôi đang xử lý luồng thông tin, ví dụ: Twitter Stream và không thể sử dụng quy trình theo đợt, tôi cần đánh giá từng tweet trong thời gian thực, thay vì chỉ mục qua Lucene RAMDisk và truy vấn nó sau.
Có thể tạo trình phân tích cú pháp/lexer bằng cách sử dụng ANTLR nhưng đây là cách sử dụng phổ biến như vậy mà tôi không thể tin rằng không ai tạo ra lib trước đây.
Một số mẫu từ TextQuery Ruby library thực hiện chính xác những gì tôi cần:
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
Một khi nó đã được thực hiện trong Ruby đó là không phù hợp với nền tảng của tôi, tôi cũng không thể sử dụng JRuby chỉ dành riêng cho thời điểm này trên giải pháp của chúng tôi:
tôi tìm thấy một câu hỏi tương tự nhưng không thể có được câu trả lời từ nó: Boolean Query/Expression to a Concrete syntax tree
Cảm ơn!
@edgarespina chỉ nói với tôi về [Parboiled] (https://github.com/sirthias/parboiled/) có vẻ rất giống với Treetop cho Ruby. Có lẽ đó là giải pháp dễ nhất. – arjones