2010-08-26 28 views
20

Có thư viện Java/thuật toán mã nguồn mở nào để tìm xem một đoạn văn bản cụ thể có phải là một câu hỏi hay không?
Tôi đang làm việc trên hệ thống trả lời câu hỏi cần phân tích xem liệu nhập văn bản của người dùng có phải là một câu hỏi hay không.
Tôi nghĩ rằng vấn đề có thể có thể được giải quyết bằng cách sử dụng thư viện NLP mã nguồn mở nhưng nó rõ ràng phức tạp hơn phần đơn giản của gắn thẻ giọng nói. Vì vậy, nếu ai đó thay vào đó có thể nói thuật toán cho nó bằng cách sử dụng một thư viện NLP mã nguồn mở hiện có, điều đó cũng sẽ tốt.
Cũng cho tôi biết nếu bạn biết thư viện/bộ công cụ sử dụng khai phá dữ liệu để giải quyết vấn đề này. Mặc dù sẽ khó khăn để có đủ dữ liệu cho mục đích đào tạo, tôi sẽ có thể sử dụng dữ liệu trao đổi ngăn xếp để đào tạo.Làm thế nào để tìm hiểu xem một câu là một câu hỏi (hỏi)?

+0

@Noel Thế còn Hy Lạp thì sao? Họ sử dụng ';'. – whiskeysierra

+2

def is_question (văn bản): text.endswith ('?') :-) – Cerin

+4

Vì vậy, là "Để được hay không được." một câu hỏi hay không? Bởi vì _THAT_ là Câu hỏi. – polygenelubricants

Trả lời

9

Trong một phân tích cú pháp của một câu hỏi, cấu trúc chính xác sẽ theo hình thức:

(SBARQ (WH+ (W+) ...) 
     (SQ ...* 
      (V+) ...*) 
     (?)) 

Vì vậy, khi sử dụng bất kỳ trình phân tích cú pháp cú pháp nào, cây có nút SBARQ có SQ được nhúng (tùy chọn) sẽ là chỉ báo đầu vào là một câu hỏi. Nút WH + (WHNP/WHADVP/WHADJP) chứa thân câu hỏi (who/what/when/where/why/how) và SQ giữ cụm từ ngược.

tức là .:

(SBARQ 
    (WHNP 
    (WP What)) 
    (SQ 
    (VBZ is) 
    (NP 
     (DT the) 
     (NN question))) 
    (. ?)) 

Tất nhiên, có rất nhiều điều khoản preceeding sẽ gây ra sai sót trong phân tích cú pháp (có thể được làm việc xung quanh), như sẽ thực sự kém viết câu hỏi. Ví dụ: tiêu đề của bài đăng này "Cách tìm hiểu xem câu có phải là câu hỏi không?" sẽ có một SBARQ, nhưng không phải là SQ.

+1

s/bất kỳ một trong những phân tích cú pháp cú pháp có sẵn/bất kỳ phân tích cú pháp sử dụng định dạng Penn Treebank/ –

+0

Đối với báo cáo kết quả Doctor Who là một chương trình truyền hình khoa học viễn tưởng của Anh sản xuất bởi BBC Định dạng Penn Treebank có dạng (TOP (NP (NP (NNP Doctor)) (SBAR (WHNP (WP Who)) (S (VP (VBZ) (NP (NP (DT a) (JJ Anh) (Khoa học NN) (NN fiction) (NN) truyền hình) (chương trình NN)) (VP (VBN được sản xuất) (PP (IN) (NP (DT) (NNP BBC)))))))))) Nó không thành công ... –

+0

FYI, một trình phân tích cú pháp cho F #/C# có sẵn dưới dạng gói gói: http://sergeytihon.wordpress.com/2013/07/11/stanford-parser-is-available-on-nuget/ –

1

Nhiều câu hỏi/yêu cầu-thông tin được đặt theo dạng ngữ pháp của câu lệnh; ví dụ. "Tôi muốn biết ai đã lấy trộm chiếc xe đạp của tôi".

tôi sẽ từ bỏ tất cả hy vọng của xác định từ cấu trúc của nó cho dù đầu vào của người dùng là một câu hỏi, và chỉ đơn giản là giả nó là một câu hỏi trừ khi nó là rõ ràng không phải là một câu hỏi. Bạn có thể có một cách tiếp cận tương tác lặp đi lặp lại vì vậy hệ thống này có thể tinh chỉnh "hiểu biết" của đầu vào của người dùng:

 User: I would like to know how many angels fit on the head of a pin. 
    System: Do you have a question about angels? 
    User: Yes.   
    System: Do you want to know if angels are fit? 
    User: No. 
    System: Do you want to know if angels have heads? 
    User: Possibly.   
    System: Do you want to know if angels have pins? 
    User: No.   
    System: Do you want to know if angels are numerous? 
    User: No. 
    System: Do you want to know the dimensions of an angel? 
    User: Yes. 
    System: Do you mean angels in paintings? 
    User: No. 
    System: Do you mean angels in myth and religious writing? 
    User: Yes. 
    System: Angels are metaphysical beings. 


    User: I hear that Pennsylvania was founded by William Penn. Is that true? 
    System: Do you have a question about hearing? 
    User: No. 
    System: Do you have a question about Pennsylvania? 
    User: Yes.   
    System: Pennsylvania was founded by William Penn. 
    User: When?   
    System: 1682. 
    User: What does the name mean? 
    System: What name? 
    User: Pennsylvania! 
    System: Do you want to know the meaning of Pennsylvania? 
    User: Yes. 
    System: Pennsylvania means Penn's Woods. 
+0

Cách tiếp cận thú vị. :) – nabeelmukhtar

+1

Đó là một phương pháp tốt đẹp để làm điều đó. Tôi có thể cho rằng đây hoàn toàn là lý thuyết. – Lee

+6

@Lee: Bạn có câu hỏi về "làm việc đó" không? – Tim

0

Hãy xem Link Grammar Parser Đây là trình phân tích cú pháp đa ngôn ngữ dựa trên khái niệm về các cặp liên kết của các từ có liên quan trong câu. Nó được viết bằng C, nhưng cũng có giao diện Java JNI.