import nltk
from nltk.parse import ViterbiParser
def pcfg_chartparser(grammarfile):
f=open(grammarfile)
grammar=f.read()
f.close()
return nltk.PCFG.fromstring(grammar)
grammarp = pcfg_chartparser("wsjp.cfg")
VP = ViterbiParser(grammarp)
print VP
for w in sent:
for tree in VP.parse(nltk.word_tokenize(w)):
print tree
Khi tôi chạy đoạn mã trên, nó tạo ra đầu ra sau đây cho câu, "tắt đèn" -NLTK ViterbiParser thất bại trong phân tích từng từ mà không phải là trong quy tắc PCFG
(S (VP (VB turn) (PRT (RP off)) (NP (DT the) (NNS lights)))) (p=2.53851e-14)
Tuy nhiên , nó làm tăng lỗi sau cho câu, "vui lòng tắt đèn" -
ValueError: Grammar does not cover some of the input words: u"'please'"
Tôi đang xây dựng ViterbiParser bằng cách cung cấp ngữ cảnh xác suất ngữ pháp miễn phí. Nó hoạt động tốt trong việc phân tích các câu có các từ đã có trong các quy tắc của ngữ pháp. Nó không phân tích cú pháp các câu trong đó Trình phân tích cú pháp đã không nhìn thấy từ trong các quy tắc ngữ pháp. Làm thế nào để vượt qua giới hạn này?
Tôi đang đề cập đến điều này assignment.
Không có cách nào để làm mịn xác suất của bạn? – L3viathan