2010-02-11 45 views
8

tôi đang tìm kiếm một mô-đun hiện có (s) trong đó cho phép tôi để viết các truy vấn boolean cơ bản cho phù hợp và tìm kiếm văn bản, mà không cần viết phân tích cú pháp của riêng tôi, vvtìm kiếm văn bản boolean trong python

ví dụ,

president AND (ronald OR (george NOT bush)) 

sẽ phù hợp với TRUE chống "tổng thống ronald ragen" "tổng thống ronald ragen và bụi" "max bụi không phải là một chủ tịch"

nhưng sai về "george bush là tổng thống" "Tôi không biết cách đánh vần ronald renna"

(Cho đến nay tôi thấy Booleano, có vẻ hơi quá mức, nhưng có thể thực hiện tác vụ. Tuy nhiên nhóm của họ không hoạt động, và tôi không thể tìm ra từ các tài liệu phải làm gì)

nhờ

Edit:. phong cách chính xác hoặc ngữ pháp là không quan trọng. mục tiêu của tôi là cung cấp cho người dùng không có công nghệ với khả năng tìm kiếm các văn bản nhất định một chút ngoài tìm kiếm từ khóa.

+0

+1 cho “ragan”… và cho câu hỏi. ;) –

+0

Nhân tiện, đối với biểu thức mà bạn có, "max bush không phải là tổng thống" nên sai tôi nghĩ. –

+0

điều gì xảy ra với nhà điều hành NOT của bạn, bit suss –

Trả lời

2

Thật may mắn khi tìm một thư viện đã tồn tại sẵn sàng để phân tích cú pháp biểu thức ví dụ mà bạn đã cung cấp. Tôi khuyên bạn nên làm cho định dạng biểu thức của bạn nhiều hơn một chút máy có thể đọc được, trong khi vẫn giữ lại tất cả sự rõ ràng của nó. Một Lisp S-biểu thức (trong đó sử dụng ký hiệu tiền tố) là nhỏ gọn và rõ ràng:

(và "chủ tịch" (hoặc "ronald" "george" "sally"))

Viết một phân tích cú pháp cho định dạng này là dễ dàng hơn so với định dạng của bạn. Hoặc bạn chỉ có thể chuyển sang Lisp và nó sẽ phân tích nó một cách tự nhiên. :)

Lưu ý phụ: Tôi cho rằng bạn không có ý định tạo nhị phân toán tử "NOT" của bạn, đúng không?

1

Bạn có thể muốn xem mã simpleBool.py trên this page sử dụng mô-đun pyparsing. Nếu không, đây là một số mã đơn giản tôi đã viết.

Đây không phải là mô-đun, nhưng nó có thể giúp bạn đi đúng hướng.

def found(s,searchstr): 
    return s.find(searchstr)>-1 

def booltest1(s): 
    tmp = found(s,'george') and not found(s,'bush') 
    return found(s,'president') and (found(s,'ronald') or tmp) 

print booltest1('the president ronald reagan') 
print booltest1('george bush was a president') 

và bạn có thể thử nghiệm các ứng dụng khác. Tôi đã sử dụng tmp vì dòng đã quá dài

+0

cảm ơn, nhưng ví dụ của bạn không phải là một thói quen mục đích chung. simpleBool, có vẻ thú vị, nhưng đòi hỏi nhiều công việc để thích nghi với miền văn bản. –

Các vấn đề liên quan