Trước hết, chúng ta hãy nhìn vào các thẻ POS rằng NLTK cho:
>>> from nltk import pos_tag
>>> sent = 'The pizza was awesome and brilliant'.split()
>>> pos_tag(sent)
[('The', 'DT'), ('pizza', 'NN'), ('was', 'VBD'), ('awesome', 'JJ'), ('and', 'CC'), ('brilliant', 'JJ')]
>>> sent = 'The pizza was good but pasta was bad'.split()
>>> pos_tag(sent)
[('The', 'DT'), ('pizza', 'NN'), ('was', 'VBD'), ('good', 'JJ'), ('but', 'CC'), ('pasta', 'NN'), ('was', 'VBD'), ('bad', 'JJ')]
(Lưu ý: Trên đây là những kết quả từ NLTK v3.1 pos_tag
, phiên bản cũ có thể khác nhau)
Những gì bạn muốn chụp về cơ bản là:
- NN VBD JJ CC JJ
- NN VBD JJ
Vì vậy, hãy bắt chúng với những mẫu:
>>> from nltk import RegexpParser
>>> sent1 = ['The', 'pizza', 'was', 'awesome', 'and', 'brilliant']
>>> sent2 = ['The', 'pizza', 'was', 'good', 'but', 'pasta', 'was', 'bad']
>>> patterns = """
... P: {<NN><VBD><JJ><CC><JJ>}
... {<NN><VBD><JJ>}
... """
>>> PChunker = RegexpParser(patterns)
>>> PChunker.parse(pos_tag(sent1))
Tree('S', [('The', 'DT'), Tree('P', [('pizza', 'NN'), ('was', 'VBD'), ('awesome', 'JJ'), ('and', 'CC'), ('brilliant', 'JJ')])])
>>> PChunker.parse(pos_tag(sent2))
Tree('S', [('The', 'DT'), Tree('P', [('pizza', 'NN'), ('was', 'VBD'), ('good', 'JJ')]), ('but', 'CC'), Tree('P', [('pasta', 'NN'), ('was', 'VBD'), ('bad', 'JJ')])])
Vì vậy, đó là "lừa dối" bởi hardcoding !!!
Hãy quay trở lại với mô hình POS:
- NN VBD JJ CC JJ
- NN VBD JJ
có thể được đơn giản hóa để:
Vì vậy, bạn có thể sử dụng toán tử tùy chọn trong regex, ví dụ::
>>> patterns = """
... P: {<NN><VBD><JJ>(<CC><JJ>)?}
... """
>>> PChunker = RegexpParser(patterns)
>>> PChunker.parse(pos_tag(sent1))
Tree('S', [('The', 'DT'), Tree('P', [('pizza', 'NN'), ('was', 'VBD'), ('awesome', 'JJ'), ('and', 'CC'), ('brilliant', 'JJ')])])
>>> PChunker.parse(pos_tag(sent2))
Tree('S', [('The', 'DT'), Tree('P', [('pizza', 'NN'), ('was', 'VBD'), ('good', 'JJ')]), ('but', 'CC'), Tree('P', [('pasta', 'NN'), ('was', 'VBD'), ('bad', 'JJ')])])
lẽ Hầu hết các bạn đang sử dụng các tagger cũ, đó là lý do tại sao mô hình của bạn là khác nhau nhưng tôi đoán bạn xem làm thế nào bạn có thể nắm bắt những cụm từ bạn cần sử dụng ví dụ trên.
Các bước thực hiện:
- Thứ nhất, kiểm tra các mô hình POS sử dụng
pos_tag
- Sau đó khái quát mô hình và đơn giản hóa chúng
- Sau đó đặt chúng vào
RegexpParser
Ngôn Ngữ là gì, Tôi không nghĩ rằng bạn có thể tất cả 'pizza là tốt' một cụm từ danh từ, cũng không phải là một cụm từ động từ kể từ khi bạn bỏ định nghĩa. Nó giống như một số cấu trúc cụm từ mà bạn muốn trích xuất. – alvas
Về cơ bản, tôi muốn có cụm từ mô tả món ăn trong các bài đánh giá. Không phải là một cụm từ danh từ. Đã chỉnh sửa câu hỏi của tôi! – pd176
Đừng lo, tôi có được những gì bạn đang làm. Đó là để phân tích tình cảm phải không? Tôi đang viết một câu trả lời =) Bạn có thực sự muốn giữ nguyên định lý không? – alvas