Tôi đã chơi xung quanh với ngôn ngữ tự nhiên phân tích các cây và thao tác chúng theo nhiều cách khác nhau. Tôi đã sử dụng các công cụ Tregex và Tsurgeon của Stanford nhưng mã là một mớ hỗn độn và không phù hợp với môi trường Python của tôi (những công cụ này là Java và không lý tưởng cho việc tinh chỉnh). Tôi muốn có một bộ công cụ cho phép hack dễ dàng khi tôi cần thêm chức năng. Có bất kỳ công cụ nào khác phù hợp để thực hiện đối sánh mẫu trên cây và sau đó thao tác với các nhánh phù hợp đó không?Làm cách nào để thao tác phân tích cú pháp cây?
Ví dụ, tôi muốn để có những cây sau đây như là đầu vào:
(ROOT
(S
(NP
(NP (NNP Bank))
(PP (IN of)
(NP (NNP America))))
(VP (VBD used)
(S
(VP (TO to)
(VP (VB be)
(VP (VBN called)
(NP
(NP (NNP Bank))
(PP (IN of)
(NP (NNP Italy)))))))))))
và (đây là một ví dụ đơn giản):
- Tìm bất kỳ nút với nhãn NP có một đứa trẻ đầu tiên có nhãn NP và một số con cháu có tên là "Ngân hàng", và một đứa con thứ hai có nhãn PP.
- Nếu điều đó phù hợp, sau đó đưa tất cả các trẻ em của nút PP và di chuyển chúng đến cuối của trẻ em NP của phù hợp.
Ví dụ, tham gia này của cây:
(NP
(NP (NNP Bank))
(PP (IN of)
(NP (NNP America))))
và biến nó thành này:
(NP
(NP (NNP Bank) (IN of) (NP (NNP America))))
Kể từ cây đầu vào của tôi là S-biểu thức tôi đã xem xét sử dụng Lisp (nhúng vào chương trình Python của tôi) nhưng nó đã được quá lâu mà tôi đã viết bất cứ điều gì đáng kể trong Lisp mà tôi không có ý tưởng nơi để thậm chí bắt đầu.
Điều gì sẽ là cách hay để mô tả các mẫu? Điều gì sẽ là một cách hay để mô tả các thao tác? Một cách hay để suy nghĩ về vấn đề này là gì?
Có tài liệu nào để sử dụng SP cây regex không? Hoặc là javadocs tài liệu duy nhất cho đến nay? – sholsapp
Ah, xin chào Giáo sư Manning, xin lỗi vì đã chỉ trích công việc của bạn mà không đưa ra những lý do cụ thể. Tôi muốn hack trên mã nhưng tôi thấy 100.000 dòng một chút khó khăn cho chỉ cần thêm một lớp trừu tượng nhỏ. Tôi rất biết ơn sự tồn tại của Tregex/Turgeon. Tôi chỉ tò mò nếu một DSL làm một cái gì đó tương tự có thể được viết gọn gàng hơn nhiều. Vẫn còn vấn đề của Java <-> tương tác Python mà tôi đã giải quyết một cách không thỏa mãn, nhưng nó hoạt động (phần nào). – guidoism
@gnucom: Tôi sẽ thừa nhận rằng tài liệu có thể tốt hơn/mở rộng hơn. Nhưng có một vài tài nguyên khác. Các trang trình bày ppt http://nlp.stanford.edu/software/tregex/The_Wonderful_World_of_Tregex.ppt là nơi tốt nhất để đi cho phần giới thiệu về các mẫu tregex. Có các màn hình trợ giúp hữu ích trong ứng dụng GUI. Để biết thêm, hãy xem: http://nlp.stanford.edu/software/tregex-faq.shtml#b. –