You are on page 1of 15

Chương 3: PHÂN TÍCH CÚ PHÁP THEO LUẬT

 Cho một văn phạm phi ngữ cảnh G = (N, ,


P, S) và xâu nhập vào w = a1a2...an  *.
Một biểu thức dạng [A 
X1X2...XkXk+1...Xm,i] là một trạm (item) đối
với w nếu A X1X2...Xm là một sản sinh
(production) trong P và 0 in. Dấu chấm ()
giữa Xk và Xk+1 là một siêu ký hiệu
(metasymbol) không thuộc về N hay , k = 0
 m.
GIẢI THUẬT PHÂN TÍCH CÚ PHÁP EARLEY

 Đối với mỗi số nguyên j ( 0  j  n ), ta sẽ xây


dựng một danh sách các trạm, tạm gọi là
bảng (table) : Ij, sao cho [ A     , i] là
trong bảng Ij với 0  i  j nếu và chỉ nếu với 
và  nào đó, ta sẽ có S * A,  * a1...ai
và  * ai+1...aj. Như vậy thành phần thứ hai
của trạm và số của bảng mà nằm trong ngoặc
là một phần của chuỗi nhập vào, đã được
sinh ra từ chuỗi .
 (1) Nếu S   là một sản sinh trong P, ta
thêm [S   , 0] vào I0.
Lặp lại các bước 2 và 3 cho tới khi không còn
trạm mới để thêm vào I0.
 (2) Nếu [B   , 0] thuộc I0, ta thêm
[A  B  , 0] cho tất cả các trạm
[A    B , 0] thuộc I0.
 (3) Giả sử là [A    B , 0] là một trạm
trong I0, ta thêm vào I0, cho tất cả các sản
sinh trong P có dạng B  , trạm [B   , 0]
(miễn là trạm này chưa có trong I0).
 Sau khi ta đã xây dựng xong các bảng I0,
I1,...,Ij-1, ta tiến hành xây dựng bảng Ij như
sau :
 (4) Với mỗi trạm [B    a , i] trong bảng Ij-
1 mà trong đó a = aj, ta thêm [B   a , i]
tới bảng Ij
 Lặp lại các bước 5 và 6 cho tới khi không
còn trạm mới để thêm vào.
 (5) Giả sử [A   , i] là một trạm trong bảng
Ij. Kiểm tra trong bảng Ii xem có những trạm
có dạng [B    A, k] hay không, với mỗi
trạm tìm thấy, ta thêm [B  A  , k] vào
bảng Ij.
 (6) Giả sử [A    B, i] là một trạm trong
bảng Ij. Đối với tất mọi sản sinh B   trong
P, ta thêm [B   , j] vào bảng Ij.
 c. Thuật toán xây dựng cây cú pháp từ danh
sách phân tích:
 Từ danh sách phân tích (các bảng phân tích),
ta tiến hành xây dựng dãy phân tích phải
(right - parser) để từ đó hình thành cây cú
pháp:
 - Nếu không có trạm có dạng [S   , 0]
trong bảng I0, thì xem w là không thuộc L(G),
chương trình sẽ báo "câu nhập vào không
đúng văn phạm của hệ thống" và dừng.
 - Còn nếu có, thì khởi tạo biến toàn cục 
với giá trị rỗng và thực hiện hàm R được định
nghĩa như sau : R ( [ A    , i], j )
 (1) Gán giá trị kế tiếp h vào , trong đó h là
số thứ tự sản sinh A  .
 (2) Nếu  = X1X2...Xm, đặt k = m và l = j.
 (3a) Nếu Xk  , ta trừ k và l đi 1
 (3b) Nếu Xk  N, ta tìm trạm [Xk   , r]
trong bảng Ii các số r sao cho [A 
X1X2...Xk-1...Xm, i ] là thuộc bảng Ir , kế đó
thực hiện hàm R với các tham số mới : R ( [
Xk   , r ], l ). Trừ k đi 1 và đặt l=r.
 (4) Lặp lại bước 3 cho tới khi k=0 rồi kết
thúc.
. CÂU HỎI: Cho văn phạm con của tiếng Anh có
tập luật sau :
S  NP VP
S  NP VP PREPS
NP  Det NP3
NP3  Adj NP3
NP3  N
NP3  N PREPS
PREPS  Prep NP2
NP2  Det NP3
VP  V
• Trong đó :
• Det, Adj, Prep, N, V : là các ký hiệu kết thúc
(terminal)
• S, NP, NP3, NP2, VP, PREPS : là các ký hiệu
chưa kết thúc (non-terminal)
• Hãy áp dụng giải thuật phân tích Earley trên
văn phạm con nói trên để phân tích câu
tiếng Anh sau đây :
• “ The young student sat in the class. “
o Bảng I0:
o S  NP VP, 0
o S  NP VP PREPS, 0
o NP  Det NP3, 0
o Bảng I1: (The)
o NP  Det NP3, 0
o NP3  Adj NP3, 1
o NP3  N, 1
o NP3  N PREPS, 1
o Bảng I2 : (young)
o NP3  Adj NP3, 1
o NP3  Adj NP3, 1
o NP3  N, 2
o NP3  N PREPS, 2
 Bảng I3 : (student)
 NP3  N , 2
 NP3  N PREPS, 2
 PREPS  Prep NP2, 3
 NP3  Adj NP3 , 1
 NP  Det NP3 , 0
 S  NP  VP, 0
 S  NP  VP PREPS, 0
 VP   V, 3
 Bảng I4 : (sat)
 VP  V , 3
 S  NP VP , 0 *
 S  NP VP PREPS, 0
 PREPS  Prep NP2, 4
 Bảng I5 : (in)
 PREPS  Prep  NP2, 4
 NP2  Det NP3, 5
 Bảng I6 : (the)
 NP2  Det  NP3, 5
 NP3  Adj NP3, 6
 NP3  N, 6
 NP3  N PREPS, 6

 Bảng I7 : (class)
 NP3  N , 6
 NP3  N PREPS, 6
 PREPS  Prep NP2, 7
 NP2  Det NP3 , 5
 PREPS  Prep NP2 , 4
 S  NP VP PREPS , 0 **
 BÀI TẬP VỀ NHÀ:
 Tương tự như ví dụ trên, hãy phân tích câu:
 “ An old man sat on the new chair in
the house”
 Hãy dùng giải thuật Earley để phân tích câu
nói trên và cho biết câu này có đúng cú pháp
theo văn phạm con được cho không ? Nếu
đúng, hãy và vẽ cây cú pháp.
 Nếu sai (có nghĩa là bộ phân tích cú pháp
phân tích không được với văn phạm con nói
trên), thì chúng ta cần thêm/sửa (những)
luật sinh nào cho văn phạm con đó.
MỞ RỘNG BÀI HỌC:
 Đến này, đã có nhiều ý tưởng để cải tiến thuật toán
Earley về những phương diện khác nhau:
 Về phương diện tốc độ: có thuật toán Tomita (1986)
là hiệu quả hơn cả. Yêu cầu của 01 đề bài miễn thi là
TÌM HIỂU VÀ CÀI ĐẶT THUẬT TOÁN TOMITA
[Masaru Tomita (1987), “An efficient Augumented-
Context Free Parsing Algorithm”, Computational
Linguistics, Vol 13, No.1-2, pg. 31-46].
 Về phương diện khử nhập nhằng (khi có nhiều hơn
01 cây được sinh ra), thì người ta dùng văn phạm
PCFG (Probabilistic Context-Free Grammar) với mỗi
luật sinh đều được gán 01 giá trị xác suất xuất hiện
trong thực tế, để từ đó hệ có thể tính được điểm của
từng cây cú pháp và chọn được cây tối ưu. Yêu cầu
của 01 đề bài là TÌM HIỂU VÀ CÀI ĐẶT THUẬT
TOÁN EARLEY VỚI VĂN PHẠM PCFG.

You might also like