LỜI GIỚI THIỆU
Xử lý ngôn ngữ tự nhiên nói chung và phân tích cú pháp ngôn ngữ tự nhiên nói riêng là những vấn đề quan trọng của trí tuệ nhân tạo, được nhiều nhà khoa học trên thế giới quan tâm nghiên cứu trong suốt 50 năm qua. Các ứng dụng trong lĩnh vực này rất phong phú. Ta có thể điểm qua một số ứng dụng chính như dịch máy, kiểm tra và chữa lỗi văn bản, chuyển giao diện người – máy sang ngôn ngữ tự nhiên, nhận dạng chữ viết, thiết kế người máy có khả năng hiểu và nói được tiếng của con người
Bài toán phân tích cú pháp ngôn ngữ tự nhiên bằng máy tính là bài toán lớn và phức tạp. Với tiếng Việt - một ngôn ngữ rất phức tạp thì dường như bài toán này lại càng khó khăn hơn. Chúng ta đã có một số công trình nghiên cứu về xử lý tiếng Việt và đã đạt được một số thành công nhất định. Tuy nhiên, cho đến nay bài toán phân tích cú pháp tiếng Việt vẫn chưa được giải quyết triệt để. Một trong những lý do chính là vì chúng ta chưa nghiên cứu một cách có hệ thống ngữ pháp tiếng Việt và cơ sở lý thuyết về xây dựng những trình phân tích cú pháp cho tiếng Việt còn tương đối ít và chưa hoàn chỉnh.
Các mô hình văn phạm phi ngữ cảnh và mạng chuyển được sử dụng rộng rãi trong mô tả cú pháp không chỉ của các ngôn ngữ lập trình mà cả các ngôn ngữ tự nhiên. Trong khoá luận này, em sẽ tập trung nghiên cứu việc vận dụng các mô hình này cho bài toán cụ thể là phân tích cú pháp tiếng Việt. Ngôn ngữ Việt có nhiều điểm khác so với các ngôn ngữ phổ biến, đã được nghiên cứu nhiều như tiếng Anh hay tiếng Pháp. Do đó, chúng ta không thể áp dụng hoàn toàn những kết quả đã đạt được đối với các ngôn ngữ này vào tiếng Việt. Khoá luận trình bày các vấn đề sau:
ã Khái quát vấn đề phân tích văn bản
ã Vận dụng các mô hình văn phạm phi ngữ cảnh và mạng chuyển đệ quy để mô tả ngôn ngữ tự nhiên
ã Nghiên cứu các thuật toán phân tích đối với các văn phạm phi ngữ cảnh và các mạng chuyển
ã Nghiên cứu một cách hệ thống các đặc điểm của ngữ pháp tiếng Việt
ã Xây dựng một trình phân tích câu tiếng Anh đơn giản
ã Xây dựng một trình phân tích câu tiếng Việt đơn giản
ã Đánh giá kết quả đã đạt được và hướng phát triển
MỤC LỤC
LỜI NÓI ĐẦU 1
Danh mục hình .5
Danh mục bảng .5
Chương 1. Mở đầu .7
1.1. Tổng quan về vấn đề phân tích văn bản . 7
1.2. Bài toán phân tích cú pháp . 7
1.3. Nội dung khoá luận 8
Chương 2. Văn phạm phi ngữ cảnh .9
2.1. Văn phạm và ngôn ngữ sinh bởi văn phạm 9
2.2. Văn phạm phi ngữ cảnh . 10
2.3. Biểu diễn cấu trúc câu 11
2.4. Phân tích từ trên xuống 14
2.5. Phân tích từ dưới lên 15
2.6. Đánh giá hai phương pháp phân tích trên 20
2.7. Phương pháp phân tích tổng hợp . 21
Chương 3. Các mạng chuyển .27
3.1. Văn phạm và ôtômát 27
3.2. Các yếu tố cơ sở của mạng chuyển đệ quy 29
3.3. Tính thủ tục của các RTN 33
3.4. Phân tích từ trên xuống cho mạng chuyển đệ quy . 34
Chương 4. Xây dựng văn phạm tiếng Việt .37
4.1. Xây dựng tập từ loại tiếng Việt 37
4.2. Xây dựng văn phạm tiếng Việt 38
4.2.1. Danh ngữ 39
4.2.2. Động ngữ 41
4.2.3. Tính ngữ 44
4.2.4. Câu đơn hai thành phần .45
4.2.5. Văn phạm tiếng Việt .47
Chương 5. Cài đặt chương trình 49
5.1. Cấu trúc dữ liệu 49
5.2. Cài đặt thuật toán . 51
5.3. Thể hiện kết quả phân tích . 52
5.4. Đánh giá kết quả . 57
Phụ lục .58
Bài toán tách từ vựng tiếng Việt . 58
1. Đặt bài toán 58
2. Các bước giải quyết 58
3. Đánh giá kết quả 60
Tài liệu tham khảo 63
Tài liệu này gồm 63 trang
63 trang |
Chia sẻ: lvcdongnoi | Lượt xem: 3332 | Lượt tải: 4
Bạn đang xem trước 20 trang tài liệu Phân tích cú pháp tiếng Việt trong tin học, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
rằng nếu ta dùng thêm một
ngăn xếp để chuyển các FSA này thành một PDA thì thiết bị này hoàn toàn có khả
năng quản lý mọi thao tác phụ gồm ghi nhớ và lấy lại các trạng thái.
Khi điều khiển được chuyển sang một quá trình trung gian thì trạng thái hiện tại
của máy được đẩy vào ngăn xếp, để khi kết thúc quá trình này máy sẽ quay lại đúng
trạng thái đó. Trong thuật ngữ của RTN, việc chuyển điều khiển sang một trạng thái,
giả sử NP, được gọi là PUSH NP. Khi ra khỏi trạng thái kết ta dùng một cung có nhãn
POP để chỉ rằng khi quá trình kết thúc, máy quay lại trạng thái được lưu trong ngăn
xếp.
Ta cũng có thể sử dụng RTN để biểu diễn từ điển, thay vì dùng tập các quy tắc
viết lại dạng
Det → 'a'
Det → 'the'
Det → 'some'
ta có thể sử dụng dạng chuyển như sau và gắn kết quả vào mạng văn phạm tương tự
như A1-A3.
Để tiện cho việc trình bày, ta có thể định nghĩa tập các hàm mà cung chuyển có
thể gọi. Các hàm tìm kiếm trong từ điển hay sử dụng nhất là CAT, hàm này kiểm tra
kiểu từ loại đã định nghĩa trước trong từ điển của từ hiện tại đang đọc vào. Các hàm
khác được tóm lược trong bảng sau:
Các hàm Ví dụ Cách dùng
CAT noun đi qua được chỉ nếu từ loại của từ hiện tại có cùng tên
WRD of đi qua được chỉ nếu từ hiện tại chính là từ này
PUSH NP đẩy tới một mạng khác
Chương 3. Các mạng chuyển
Khoá luận tốt nghiệp 32
JUMP jump luôn có thể đi qua được
POP pop chỉ việc đi qua được toàn bộ mạng chuyển
Để kết thúc mục này, ta tóm tắt sự giống và khác nhau giữa mạng chuyển RTN và
các ôtômát hữu hạn trạng thái FSA và ôtômát đẩy xuống PDA như sau:
Giống nhau:
¾ RTN cũng như FSA và PDA đều có thể đoán nhận các câu sinh bởi các văn
phạm cấu trúc câu.
¾ RTN tương đương với PDA về khả năng đoán nhận ngôn ngữ sinh bởi văn
phạm phi ngữ cảnh (CFG) của Chomsky.
¾ Hoạt động của RTN cũng như FSA và PDA đều có thể được biểu diễn
bằng các mạng chuyển.
Khác nhau:
¾ Các cung và các đỉnh (trạng thái): Trong khi các trạng thái trong mạng
chuyển của FSA có nhãn là các từ không kết thúc của văn phạm tương
đương với ôtômat, các cung có nhãn là các từ cuối (cũng như vậy với
PDA, trừ các cung rỗng và cung kết thúc pop), thì các cung của RTN có
nhãn là các từ không kết thúc (trừ một số cung đặc biệt cũng có nhãn là từ
cuối) của văn phạm tương đương, với các trạng thái được đánh dấu tuỳ ý.
¾ Các mạng con: Các mạng chuyển của FSA và PDA là các mạng đầy đủ,
còn mạng chuyển của RTN thì được xử lý như là một tập các mạng con.
Với mỗi ký hiệu có xuất hiện ở vế trái trong các qui tắc sinh của văn phạm
tương đương được biểu diễn bằng một mạng con.
¾ RTN không đơn định, quá trình đoán nhận do vậy phải dùng phương pháp
quay lui.
¾ Do đặc điểm của mô hình RTN là một tập các mạng chuyển con, việc đoán
nhận câu trong RTN phải theo phương pháp xử lý từ trên xuống (xuất phát
từ mạng con S – tức là mạng biểu diễn các quy tắc sinh có vế trái là tiên
đề) và xử lý theo chiều sâu trước (phải đi qua từng mạng con trước khi
chuyển sang cung tiếp theo).
Chương 3. Các mạng chuyển
Khoá luận tốt nghiệp 33
3.3. Tính thủ tục của các RTN
Phương pháp biểu diễn nêu trên có mức độ trừu tượng tương đương với một hệ
các quy tắc viết lại của văn phạm phi ngữ cảnh, theo nghĩa mọi quy tắc của văn phạm
phi ngữ cảnh đều có thể chuyển thành một RTN tương đương. Tuy nhiên, cách biểu
diễn bằng RTN có một đặc điểm quan trọng mà trong các hệ quy tắc viết lại không có,
đó là các tiến trình (process). Khi ta sử dụng một văn phạm để xây dựng thủ tục đoán
nhận một ngôn ngữ, thì các quy tắc viết lại chỉ ra cần làm cái gì; còn ôtômát nằm
trong RTN lại mô tả làm như thế nào.
Để so sánh, giả sử ta dùng một hệ sản xuất để đoán nhận một ngôn ngữ phi ngữ
cảnh và dùng một RTN để đoán nhận cũng ngôn ngữ đó. Khi thiết kế hệ sản xuất, ta tự
do quyết định các câu hỏi như áp dụng quy tắc nào tiếp theo, phần dữ liệu nào sẽ xem
xét tiếp theo, và thực hiện các thao tác "viết lại" trên dữ liệu đó như thế nào. Với
RTN, quyền lựa chọn các quyết định tương tự như trên không thuộc về người thiết kế
nữa, bởi vì chúng đã bị ẩn trong biểu diễn ngữ nghĩa của văn phạm. Hình thức biểu
diễn bằng RTN thể hiện nhiều đặc tính của các ngôn ngữ lập trình thủ tục thường gặp,
đặc biệt khi nó được dịch thành biểu diễn tuyến tính cho đầu vào của máy tính - lệnh
nhảy goto có và không có điều kiện (các bước chuyển trạng thái), các nhãn lệnh (các
tên trạng thái), và các lời gọi thủ tục (PUSH và POP).
Các điều khiển thủ tục có một đặc điểm quan trọng không bị ẩn trong ký hiệu, đó
là cách trình thông dịch thực hiện khi nó gặp một trạng thái có nhiều cung chuyển tiếp
theo. Chế độ bình thường là lần lượt đi theo các cung chuyển, bắt đầu từ cung chuyển
đầu tiên, thực hiện từ trên xuống và ưu tiên chiều sâu, đi theo các đường dẫn xa nhất
có thể và chấp nhận đường đi đầu tiên đến được một trạng thái kết với một xâu vào
rỗng và ngăn xếp rỗng.
Ở đây có sự khác nhau cơ bản so với cách tiếp cận hệ sản xuất, với hệ sản xuất,
dạng viết lại của các quy tắc tự nó không giả định trước bất kỳ một tiến trình nào.
Người xây dựng mạng chuyển RTN cần suy nghĩ theo tiến trình nhận dạng từ trên
xuống, từ trái sang phải.
Như vậy, hình thức RTN cho phép ta dễ dàng theo dõi tiến trình phân tích. Các
RTN mô tả tiến trình, còn CFG thì không. Do mỗi chương trình máy tính là một sự
mô tả tiến trình nên các RTN rất có giá trị khi được dùng để viết chương trình phân
tích. Trên thực tế cũng có nhiều trình phân tích được điều khiển bởi các quy tắc của
văn phạm. Sự khác nhau lớn nhất của hai hình thức này là vào thời điểm chạy chương
trình, trình phân tích RTN "biết được" tại mỗi bước đã có sẵn những lựa chọn nào,
Chương 3. Các mạng chuyển
Khoá luận tốt nghiệp 34
còn các trình phân tích dựa trên văn phạm phi ngữ cảnh phải tìm trong dãy các quy tắc
những quy tắc nào là có thể áp dụng được.
3.4. Phân tích từ trên xuống cho mạng chuyển đệ quy
Trạng thái phân tích tại một thời điểm nào đó được biểu diễn như sau:
¾ Vị trí hiện tại. Lưu lại phần nào của câu đã được phân tích rồi
¾ Nút hiện tại. Nút ta đang dừng lại để phân tích
¾ Ðiểm quay lại (trở về). Ta đang nằm trong một mạng (B) bởi lời gọi từ
một nút nào đó của mạng (A). Khi đó điểm trở về là nút của mạng A, để
khi quay ra ta lại tiếp tục quá trình phân tích.
Trước hết, ta xét thuật toán đơn giản tìm kiếm trên một mạng chuyển đệ quy. Giả
sử rằng nếu ta có thể đi qua một cung nào đó thì cung đó sẽ là đúng đắn trong phân
tích cuối cùng; và giả sử ta chỉ xét các cung cat, push, và pop. Sau đó ta sẽ sửa đổi
thuật toán này để tìm tất cả các đường đi bằng kỹ thuật quay lui.
Giả sử ta đang đứng ở một nút trung gian nào đó và biết 3 thông tin đã qua. Ta thử
đi theo một cung để ra khỏi nút hiện tại. Có các trường hợp sau xảy ra
¾ Nếu cung này là cung cat và từ kế tiếp trong câu thuộc vào lớp từ loại đó,
thì
- cập nhật lại vị trí hiện tại là từ kế tiếp;
- cập nhật lại nút hiện tại là đích của cung này;
¾ Nếu cung này là cung push đẩy tới một mạng N thì
- đưa đích của cung này vào danh sách các điểm trở về;
- cập nhật lại nút hiện tại là nút bắt đầu của mạng N;
¾ Nếu cung này là cung pop và danh sách các điểm trở về chưa rỗng thì cập
nhật nút hiện tại là điểm đầu tiên trong danh sách này;
¾ Nếu cung này là cung pop, danh sách các điểm trở về là rỗng và không
còn từ nào cả thì việc phân tích là thành công;
Ðể minh hoạ, ta xét văn phạm sau (Hình 13),
Chương 3. Các mạng chuyển
Khoá luận tốt nghiệp 35
Hình 13. Mạng chuyển đệ quy làm ví dụ trong phân tích từ trên xuống
cùng với bộ từ vựng
ART the, a
NUMBER one
PRONOUN one
ADJ wild, green
NOUN dogs, man, saw, green
VERB cried, saw, broke, faded, man
Khi đó, câu
1 The 2 wild 3 dogs 4 cried 5
sẽ được phân tích như trên Bảng 3.
Bước Nốt hiện tại Vị trí hiện tại Ðiểm trả về Cung được đi
1. S 1 nil S/1
2. NP 1 {S1} NP/1
3. NP1 2 {S1} NP1/1
4. NP1 3 {S1} NP1/2
5. NP2 4 {S1} NP2/1
6. S1 4 nil S1/1
7. S2 5 nil N2/1
Bảng 3. Quá trình phân tích từ trên xuống
Chương 3. Các mạng chuyển
Khoá luận tốt nghiệp 36
Câu The green faded sẽ không thể phân tích tích được bằng văn phạm này,
bởi đầu tiên trình phân tích coi green là một tính từ, cho nên sau đó nó không tìm
được một danh từ.
Xét câu
1 One 2 saw 3 the 4 man 5,
Ban đầu, trình phân tích thử phân tích câu với cụm danh từ one saw, nhưng sau
đó thất bại khi tìm một động từ tiếp theo, nó quay lại và tìm ra cách phân tích thành
công với cụm danh từ là one. Quá trình phân tích như trên Bảng 4.
Bước Trạng thái hiện tại Ði theo cung Các trạng thái được
lưu lại
1. (S,1,nil) S/1 nil
2. (NP,1,{S1}) NP/2 (và NP/3 để lưu) nil
3. (NP1,2,{S1}) NP1/2 {NP2,2, {S1}}
4. (NP2,3,{S1}) NP2/1 {NP2,2, {S1}}
5. (S1,3,{nil}) không thể đi theo
cung nào cả
{NP2, 2, {S1}}
6. (NP2,2,{S1}) NP2/1 nil
7. (S1,2,nil) S1/1 nil
8. (S2,3,nil) S2/2 nil
9. (NP,3,{S2}) NP/1 nil
10. (NP1,4,{S2}) NP1/2 nil
11. (NP2,5,{S2}) NP2/1 nil
12. (S2,5,nil) S2/1 nil
13. phân tích thành công nil
Bảng 4. Phân tích từ trên xuống kết hợp quay lui cho mạng chuyển đệ quy
Trong bước 2, có hai cung ra khỏi nút NP có thể chấp nhận one. Cung NP/2 coi
one là một số (number) và sinh ra nút kế tiếp; đồng thời one cũng là một đại từ
(pronoun), nên trình phân tích lưu lại khả năng đi qua cung NP/3 để đến nút NP2, như
thế trình phân tích lưu trạng thái (NP2,2,{S1}). Tại bước 6, nó dùng lại trạng thái
này, bởi nhận thấy rằng không có cung nào đi ra khỏi S1 chấp nhận từ the.
Với những ví dụ phức tạp hơn, sẽ có cả một danh sách các điểm được lưu. Tuỳ
theo danh sách này được tổ chức theo thứ tự ra sao, trình phân tích sẽ sinh ra những
thứ tự phân tích khác nhau.
Chương 4. Xây dựng văn phạm tiếng Việt
Khoá luận tốt nghiệp
Chương 4. Xây dựng văn phạm tiếng Việt
4.1. Xây dựng tập từ loại tiếng Việt
Ngữ pháp tiếng Việt hết sức phức tạp. Việc xây dựng một bộ văn phạm hoàn
chỉnh cho tiếng Việt là rất khó khăn. Ngay cả về vấn đề từ loại của tiếng Việt hiện nay
vẫn còn chưa hoàn toàn thống nhất. Sau khi tham khảo nhiều tài liệu chuyên ngành cơ
sở ngôn ngữ học và tiếng Việt, nhóm nghiên cứu đã quyết định sử dụng trước mắt
cách phân loại từ tiếng Việt theo cuốn Ngữ Pháp tiếng Việt (nhà xuất bản KHXH,
1983) và đề nghị bộ nhãn chi tiết như danh sách dưới đây:
1. Danh từ (N)
a. Danh từ riêng Np
b. Danh từ đơn thể Nc
c. Danh từ tổng thể Ng
d. Danh từ loại thể Nt
e. Danh từ đơn vị Nu
f. Danh từ trừu tượng Na
g. Danh từ số lượng Nn
h. Danh từ vị trí Nl
2. Động từ (V)
a. Động từ ngoại động Vt
b. Động từ nội động Vit
c. Động từ cảm nghĩ Vim
d. Động từ phương hướng Vo
e. Động từ tồn tại Vs
f. Động từ biến hoá Vb
g. Động từ ý chí Vv
h. Động từ tiếp thụ Va
i. Động từ so sánh Vc
j. Động từ “là” Vla
3. Tính từ (A)
a. Tính từ hàm chất Aa
b. Tính từ hàm lượng Am
4. Đại từ (P)
a. Đại từ xưng hô Pp
b. Đại từ không gian, thời gian Pd
c. Đại từ số lượng Pn
d. Đại từ hoạt động, tính chất Pa
e. Đại từ nghi vấn Pi
Chương 4. Xây dựng văn phạm tiếng Việt
Khoá luận tốt nghiệp 38
5. Phụ từ (J)
a. Phụ từ thời gian Jt
b. Phụ từ mức độ Jd
c. Phụ từ so sánh Jr
d. Phụ từ khẳng định, phủ địnhJa
e. Phụ từ mệnh lệnh Ji
6. Kết từ (C)
a. Kết từ chính phụ Cm
b. Kết từ liên hợp Cc
7. Trợ từ M
8. Cảm từ I
4.2. Xây dựng văn phạm tiếng Việt
Mục tiêu của ta là xây dựng được một văn phạm vừa đủ để giải quyết bài toán
phân tích. Nếu văn phạm quá rộng thì vừa không cần thiết vừa làm phức tạp thêm vấn
đề. Nhưng nếu văn phạm quá hẹp thì không thể bao quát được hết cấu trúc của các câu
cần phân tích, do đó không đủ mạnh để giải quyết bài toán.
Khi xây dựng câu tiếng Việt, ta triển khai xây dựng theo từng bước từ → ngữ →
câu. Ngữ pháp truyền thống chia ra các loại ngữ sau đây:
Tên ngữ Nhãn Đặc trưng
Danh ngữ (noun phrase) NP Danh từ làm trung tâm
Động ngữ (verb phrase) VP Động từ làm trung tâm
Tính ngữ (adjectival phrase) AP Tính từ làm trung tâm
Giới ngữ (prepositional phrase) PP Giới từ làm trung tâm
Nói chung, mỗi ngữ đều có ba bộ phận: phần phụ trước đứng trước thành tố chính,
phần trung tâm chứa thành tố chính và phần phụ sau đứng sau thành tố chính.
Thành tố chính của ngữ giữ vai trò quan trọng về mặt ngữ pháp đối với ngữ, cần
thiết về mặt tổ chức của ngữ, sự có mặt của nó là bắt buộc, không thể lược bỏ. Thành
tố chính đại diện cho toàn bộ ngữ trong mối liên hệ với các yếu tố khác nằm ngoài
ngữ, chi phối các thành tố khác và quyết định chức vụ ngữ pháp của tất cả các thành tố
phụ có liên quan.
Xét về vị trí, thành tố phụ của ngữ đứng trước hay sau phần trung tâm. Trong
cùng một loại ngữ, những từ có khả năng khi thì làm thành tố phụ sau, khi thì làm
thành tố phụ trước không nhiều. Xét về từ loại, thành tố phụ có thể thuộc lớp từ hư
Chương 4. Xây dựng văn phạm tiếng Việt
Khoá luận tốt nghiệp 39
hoặc thuộc lớp từ thực. Trong tiếng Việt, tồn tại những lớp từ hư chuyên làm thành tố
phụ trong từng loại ngữ nhất định. Chúng được dùng để nhận biết từ loại của từ làm
thành tố chính. Ví dụ:
• hãy | đừng | chớ + động từ
• rất | hơi | khí + tính từ
• tính từ + lắm | quá
• hãy | đừng | chớ | rất | hơi | khí + động từ ý chí - tâm trạng
Thành tố phụ trước thường là những từ riêng lẻ, ta ít gặp những cụm từ chính phụ
hay chủ vị tại vị trí trước trung tâm. Về mặt từ loại thì đó thường là những phụ từ
chuyên dụng, có thể thống kê thành từng nhóm nhỏ có cùng kiểu ý nghĩa khái quát và
chuyên đi kèm với những từ loại nhất định.
Thành tố phụ sau rất đa dạng và phức tạp về cấu tạo, về từ loại và về nghĩa. Tại vị
trí này có thể là từ rời hoặc các loại cụm từ. Khái quát về từ loại, có thể chia các thành
tố phụ sau ra thành 2 lớp lớn là lớp các từ có tính chất từ hư và lớp gồm các thực từ.
Trong phạm vi khoá luận này, để hạn chế tính phức tạp của các cấu trúc ngữ nói riêng
và cấu trúc câu nói chung, em chỉ xem xét thành tố phụ sau về mặt từ loại và dưới
dạng từ rời.
Thành tố chính rất quan trọng về mặt tổ chức ngữ pháp của ngữ. Nhưng về ý
nghĩa thì trong phần lớn các trường hợp, thành tố phụ là yếu tố mang trọng lượng
nghĩa lớn nhất. Trong lời nói, nhiều khi chỉ cần dùng một mình thành tố phụ đã đủ đưa
ra thông tin. Ví dụ:
- Anh đã đọc quyển sách này chưa?
- Đã.
Bây giờ em xin trình bày sơ lược về các danh ngữ, động ngữ và tính ngữ, tập
trung vào mặt cấu tạo của chúng nhằm mục đích xây dựng các quy tắc sinh cho văn
phạm tiếng Việt.
4.2.1. Danh ngữ
Danh ngữ gồm ba phần: phần trung tâm, phần phụ trước và phần phụ sau.
Phần trung tâm là một danh từ hoặc một danh từ chỉ loại cùng với một danh từ chỉ
sự vật hay một động từ, tính từ chỉ hoạt động, trạng thái, tính chất, cả hai cùng gộp lại
để chỉ một sự vật. Ví dụ: cái nhà, cây tre, con mèo, người thợ, niềm vui, cuộc họp, vẻ
đẹp...
Chương 4. Xây dựng văn phạm tiếng Việt
Khoá luận tốt nghiệp 40
Trong danh ngữ không có phần phụ trước, bất kỳ một loại danh từ nào cũng đều
có thể làm thành tố chính mà không kèm thêm điều kiện nào (trừ về ý nghĩa). Trong
danh ngữ có phần phụ trước, danh từ làm thành tố chính đòi hỏi những điều kiện khá
chặt chẽ. Ví dụ, có những lớp con danh từ chỉ có thể đứng ở phần trung tâm sau một
danh từ loại thể.
Phần phụ trước có 3 vị trí khác nhau, sắp xếp theo một trật tự nhất định, chuyên
dùng để chỉ mặt số lượng của sự vật nêu ở trung tâm. Có hai vị trí có trật tự ổn định,
thường dùng để chỉ mặt chất lượng của sự vật nêu ở trung tâm. Ví dụ:
tất cả những cái con mèo đen ấy
-3 -2 -1 0 1 2
Vị trí chỉ xuất (-1) nằm sát trung tâm, thường gặp là từ cái, từ chỉ xuất bao giờ
cũng là một danh từ loại thể.
Vị trí từ chỉ số lượng (-2) được chia làm các hạng sau:
• số từ xác định (số đếm) một, hai,...
• số từ phỏng định: vài, ba...
• từ hàm ý phân phối mỗi, từng, mọi...
• quán từ những, các, một...
• từ mấy
Vị trí chỉ tổng lượng (-3), thường gặp những từ tất cả, hết thảy, tất thảy, tất cả,
cả...
Phần phụ sau của cụm danh từ có hai vị trí.
Phần trung tâm Vị trí 1 Vị trí 2
con mèo đen
của nhà bạn Nam
tôi mới xin hôm qua
ấy
Vị trí 1 nêu đặc trưng miêu tả, về mặt từ loại ta nhận thấy có nhiều kiểu từ loại
khác nhau
danh từ phòng tạp chí
động từ phòng đọc
tính từ phòng hẹp
Chương 4. Xây dựng văn phạm tiếng Việt
Khoá luận tốt nghiệp 41
số từ phòng mười bốn
đại từ phòng chúng tôi
Vị trí từ chỉ định 2 là yếu tố đánh dấu đường biên giới sau cùng của danh ngữ.
Các từ chỉ định thường gặp là: này, kia, nọ, ấy, đấy, đó.
Tóm lại, ta có cấu tạo đầy đủ của danh ngữ như sau:
Phụ tố tổng
thể
Phụ tố số
lượng
Phụ tố loại
thể, đơn vị
Chính tố ở
trung tâm
Phụ tố hạn
định
Phụ tố chỉ định
Det1
(Determiner)
Det2 Det3 N AP/VP/NP/PP DP (demonstrative
pronoun)
Tất cả ba cái bàn gỗ ấy
Những cô bán hàng này
Tư tưởng tiến bộ đó
Toàn thể đồng bào cả nước
Trong khuôn khổ khoá luận ta chỉ xét trường hợp đơn giản với các qui tắc sinh
danh ngữ như sau
1) NP → N
2) NP → Det1 Det2 Det3 N DP
3) Det1 → Ng (Danh từ tổng thể)
4) Det2 → Nn (Danh từ số lượng)
5) Det3 → Nt | Nu (Danh từ loại thể/danh từ đơn vị)
6) DP → Pd (Đại từ không gian/thời gian)
4.2.2. Động ngữ
Về mặt cấu tạo, động ngữ cũng có ba thành phần: phần trung tâm, phần phụ trước
và phần phụ sau.
Phần trung tâm có thể là một động từ (ví dụ, đang viết thư, đã mắc bệnh), một ngữ
khứ hồi (ví dụ, vừa đi Nam Định về hôm qua) hoặc một thành ngữ (ví dụ, cứ chỉ tay
năm ngón hoài). Trong phạm vi khoá luận này, em chỉ xét phần trung tâm là một động
từ, bởi vì kiểu thành tố chính là một động từ là kiểu có tính chất tiêu biểu, có tác dụng
nhiều nhất đối với việc xác định tính chất động từ cho một từ cũng như đối với việc
phân định các tiểu loại trong từ loại động từ.
Chương 4. Xây dựng văn phạm tiếng Việt
Khoá luận tốt nghiệp 42
Khi xem xét kiểu thành tố chính là một động từ, ta cần phân biệt hai loại động từ
độc lập và không độc lập. Trong điều kiện sử dụng bình thường, động từ độc lập có
thể tự thân làm thành tố chính, còn động từ không độc lập đòi hỏi phải có một từ khác
đi sau để bổ sung ý nghĩa. Động từ không độc lập được chia làm các nhóm:
• động từ tình thái, ví dụ, cần, nên, phải, có thể, không thể, định, toan, dám,
chịu, mong, muốn, chúc, bị, được, mắc, phải...
• động từ tiếp diễn, chấm dứt, ví dụ, bắt đầu, tiếp tục, hết, thôi...
Các động từ độc lập điển hình là các động từ chỉ hoạt động vật lý, hoặc trạng thái
tâm lý như: đọc, thực hiện, lấy, đi, lo, kính nể, vui...
Thực tiễn sử dụng ngôn ngữ cho thấy tại phần phụ trước của động ngữ có thể gặp
hai lớp từ khác nhau rõ rệt:
• Những từ mang nhiều ý nghĩa ngữ pháp, chuyên đi kèm động từ (hoặc tính
từ), có thể gọi chung là những phụ từ.
• Một số từ rõ nghĩa từ vựng, những thực từ.
Số lượng phụ từ làm thành tố phụ trước trong động ngữ chỉ khoảng vài chục từ,
chia làm các nhóm con
• chỉ sự tiếp diễn, tương tự của hoạt động, trạng thái, như đều, cũng vẫn, cứ,
còn...
• chỉ quan hệ thời gian của hoạt động, trạng thái như từng, đã, vừa, mới,
đang, sẽ...
• chỉ tần số (số lần) khái quát của sự xuất hiện hoạt động trạng thái, như
thường, hay, năng, ít, hiếm...
• chỉ mức độ của trạng thái như rất, hơi, khí, quá...
• nêu lên ý khẳng định hay phủ định như có, không, chưa, chẳng...
• nêu ý sai khiến, khuyên nhủ như hãy, đừng, chớ...
Tại phần phụ trước cụm động từ, ta gặp hai kiểu thực từ thành tố phụ sau đây:
1. Những từ tượng thanh tượng hình và một số tính từ có tác dụng miêu tả hành
động, trạng thái nêu ở động từ - thành tố chính. Ví dụ, ào ào chảy, lác đác rơi, khẽ
kêu, căn bản hoàn thành, tích cực làm việc...
Chương 4. Xây dựng văn phạm tiếng Việt
Khoá luận tốt nghiệp 43
2. Kiến trúc gồm một kết từ với một danh từ chỉ điểm xuất phát. Kiến trúc này
thường đứng trước các động từ chỉ hướng (ra, vào, lên, xuống), các kết từ thường gặp
là từ, ở, dưới, trên, trong, ngoài... Ví dụ, từ quê ra, ở Bắc vô, dưới Hải Phòng lên...
Cũng giống như trong tổ chức của danh ngữ, phần phụ sau của động ngữ phức tạp
hơn về nhiều phương diện so với phần phụ trước. Chỉ xét riêng về phương diện từ
loại, thành tố phụ sau của động ngữ có thể là những yếu tố thuộc mọi từ loại có thể có,
chẳng hạn
danh từ đọc sách
động từ ăn đứng
tính từ đi nhanh
số từ chia ba
đại từ hỏi ai
chỉ định từ lại đây
phụ từ hiểu rồi
Ở động ngữ, phụ từ làm thành tố phụ sau có thể được chia thành những nhóm nhỏ
với những ý nghĩa ngữ pháp riêng, như sau:
• Nhóm từ chỉ ý kết thúc, gồm rồi, đã...
• Nhóm từ chỉ ý cầu khiến (mời mọc, mệnh lệnh, rủ rê) gồm đi, nào, thôi...
• Nhóm từ chỉ kết quả gồm 3 từ được, mất, phải...
• Chỉ sự tự lực thì dùng từ lấy. Ví dụ, làm lấy
• Nhóm từ chỉ sự cùng chung, gồm có với, cùng. Ví dụ, cho nó chơi với.
• Từ nhau chỉ sự qua lại, tương hỗ. Ví dụ. Yêu nhau xin nhớ lời nhau.
• Nhóm từ chỉ hướng như ra, vào, tới, lui, qua, lại...
• Nhóm từ chỉ mức độ, như lắm, quá.
• Nhóm từ chỉ cách thức diễn ra trong thời gian của hoạt động, trạng thái,
gồm ngay, liền, tức khắc, tức thì, dần, dần dần, từ từ, nữa, hoài, luôn,
mãi...
Cũng như với các phụ từ, khả năng xuất hiện thực từ tại phần phụ sau động ngữ lệ
thuộc nội dung ý nghĩa của từ làm thành tố chính.
Tóm lại, ta có cấu tạo đầy đủ của động ngữ như sau:
Chương 4. Xây dựng văn phạm tiếng Việt
Khoá luận tốt nghiệp 44
Phụ tố trước Chính tố ở trung tâm Phụ tố sau
phụ từ/thực từ V phụ từ/thực từ
đã ăn xong
cơm
còn yêu nhiều
hãy hỏi tôi
Trong khuôn khổ khoá luận ta chỉ xét trường hợp đơn giản với các qui tắc sinh động
ngữ như sau
1) VP → Det1 V Det2
2) Det1 → J | A | C
3) Det2 → J | A | C
4.2.3. Tính ngữ
Cấu tạo chung của tính ngữ cũng gồm 3 phần: phần trung tâm, phần phụ trước,
phần phụ sau.
Các thành tố phụ của tính ngữ gồm có hai loại: thành tố phụ là phụ từ và thành tố
phụ là thực từ.
Phần lớn những thành tố phụ là phụ từ xuất hiện ở động ngữ đồng thời cũng có
thể làm thành tố phụ trong tính ngữ. Cụ thể như: đã, sẽ, đang, vừa, đều, mới, vẫn, cứ,
cũng... với tư cách thành tố phụ trước; rồi với tư cách là thành tố phụ sau. Một vài
thành tố phụ có tác dụng đánh dấu từ loại động từ không thể xuất hiện hoặc chỉ xuất
hiện với những điều kiện nhất định ở tính ngữ, như hãy, đừng (thành tố phụ trước), đã
(thành tố phụ sau).
Xét tính từ ở vị trí trung tâm ngữ trong mối quan hệ với hai loại thành tố phụ là hư
từ và thực từ, có thể phân biệt hai trường hợp sau đây, trong mỗi trường hợp đó, có sự
phân biệt giữa hai lớp con tính từ đối với nhau:
1. Xét ở khả năng kết hợp với những phụ từ chỉ mức độ như rất, lắm, quá,
cực kỳ... Ở đây phân biệt được hai lớp con tính từ là tính từ có thang độ (ví
dụ, tốt, đẹp, xấu, đúng, sai, to, nhỏ, vừa, xanh, sạch...) và tính từ không có
thang độ hay tính từ tuyệt đối (ví dụ, riêng tư, công, chính, đỏ au, thơm
ngát, chín nẫu).
2. Xét khả năng kết hợp với thực từ về phía sau. Có thể phân biệt hai lớp con
tính từ:
Chương 4. Xây dựng văn phạm tiếng Việt
Khoá luận tốt nghiệp 45
a. Những tính từ có thực từ làm rõ nghĩa, tức là có bổ ngữ. Ví dụ đông,
đầy, vắng, thưa, mau, nhiều... (Ngoài đường đông người).
b. Những tính từ không cần có thực từ làm rõ nghĩa.
Phần phụ trước của tính ngữ thường là các phụ từ chuyên dụng, như rất, hơi, khí,
cực kỳ, tuyệt.... Ngoài những từ chuyên dụng này, tại phần phụ trước của tính ngữ, có
thể xuất hiện hầu hết các phụ từ đi với động từ (trừ hãy, đừng, chớ).
Cũng như phần phụ sau của động ngữ, trong phần phụ sau của tính ngữ có thể
phân biệt những từ có tính chất từ hư -- phụ từ và các thực từ.
Phụ từ chuyên dụng làm thành tố phụ sau của tính ngữ là từ lắm. Những từ cực,
cực kỳ, tuyệt, quá như đã nói ở trên, thường đứng sau tính từ, nhưng cũng dễ dàng
chuyển lên trước tính từ với sắc thái nhấn mạnh. Ví dụ, đẹp lắm, đẹp cực kỳ...
Đặt trong mối quan hệ với tính từ làm thành tố chính, các thực từ làm thành tố phụ
sau cũng được chia làm các nhóm nhỏ để tiện miêu tả về ý nghĩa, những thường là
danh từ. Ở trong phạm vi khoá luận, em chưa sử dụng những sự phân biệt này.
Tóm lại, cấu tạo đầy đủ của tính ngữ là:
Phụ tố trước Chính tố ở trung tâm Phụ tố sau
phụ từ A phụ từ/thực từ
rất tốt nết
khoẻ cực kỳ
Trong khuôn khổ khoá luận ta chỉ xét trường hợp đơn giản với các qui tắc sinh tính
ngữ như sau
1) AP → Det1 A Det2
2) Det1 → J
3) Det2 → J | N
4.2.4. Câu đơn hai thành phần
Câu đơn hai thành phần là câu đơn có một cụm chủ - vị duy nhất làm thành nòng
cốt câu.
Câu đơn hai thành phần chiếm vị trí trung tâm và chủ yếu của việc miêu tả ngữ
pháp về câu. Vì câu đơn hai thành phần có sự tương ứng với tổ chức của một phán
đoán logic tối giản và, mặt khác, ở nó hội tụ các đặc trưng cơ bản của phần cú pháp
học về câu (xét ở mặt ngữ pháp), nó được sử dụng rộng rãi nhất và được dùng làm cơ
Chương 4. Xây dựng văn phạm tiếng Việt
Khoá luận tốt nghiệp 46
sở cho những kiểu câu có cấu tạo lớn hơn (câu đơn mở rộng nòng cốt câu, câu phức
thành phần và nhất là câu ghép).
Câu đơn được phân loại dựa trên các khuôn hình, đi từ khái quát đến cụ thể.
Khuôn hình cơ sở của câu đơn hai thành phần là khuôn hình chủ - vị.
I. [Câu] = [Chủ ngữ] + [Vị ngữ]
Chủ ngữ có thể là danh ngữ, là tên riêng hoặc đại từ. Khuôn hình hiện thực cấp 1
thực hiện hoá khuôn hình cơ sở đến bậc từ loại. Giả sử chủ ngữ là danh ngữ, chúng ta
xây dựng lược đồ như sau:
1. [Câu] = [Danh ngữ] + [Tính ngữ] | [Động ngữ]
2. [Câu] = [Danh ngữ] + [Từ không độc lập chỉ quan hệ + Danh ngữ | Động
ngữ]
Các ví dụ tương ứng là:
Anh này + giỏi | đọc sách
Anh này + là + sinh viên
Cái này + để + treo
Khuôn hình hiện thực cấp 2 cụ thể hoá các khuôn hình cấp 1 ở một số yếu tố của
chúng. Trong khuôn hình này, cấu trúc 2. được thác triển tiếp như sau:
là Anh này là sinh viên
bằng Cái ấm này bằng nhôm
Danh ngữ tại | do | bởi ... Danh ngữ Việc này tại anh ấy
của Cái áo này của tôi
ngoài | trên ... Anh ấy ngoài vườn
như Cô ấy như người ốm
Danh ngữ để Động ngữ Cái bàn này để ăn cơm
Khuôn hình hiện thực cấp 3 là những biến thể song song và có thể chi tiết hơn của
các khuôn hình cấp 2. Nhưng trong phạm vi khoá luận này, em xin dừng lại ở khuôn
hình hiện thực cấp 2.
Chương 4. Xây dựng văn phạm tiếng Việt
Khoá luận tốt nghiệp 47
4.2.5. Văn phạm tiếng Việt
Tổng kết lại, ta xét văn phạm sinh một lớp các câu đơn giản hai thành phần của
tiếng Việt như sau:
1. [Câu] → [Chủ ngữ] + [Vị ngữ]
2. [Chủ ngữ] → [Tên riêng]
3. [Chủ ngữ] → [Đại từ]
4. [Chủ ngữ] → [Đại từ] + [Phụ tố chỉ định]
5. [Chủ ngữ] → [Danh ngữ]
6. [Vị ngữ] → [Tính ngữ]
7. [Vị ngữ] → [Động ngữ]
8. [Vị ngữ] → [Từ quan hệ] + [Danh ngữ]
9. [Vị ngữ] → [Từ quan hệ] + [Động ngữ]
10. [Danh ngữ] → [Danh từ]
11. [Danh ngữ] → [Phụ tố số lượng] + [Danh từ]
12. [Danh ngữ] → [Phụ tố số lượng] + [Phụ tổ loại
thể, đơn vị] + [Danh từ]
13. [Danh ngữ] → [Danh từ] + [Phụ tố chỉ định]
14. [Danh ngữ] → [Phụ tổ loại thể, đơn vị] + [Danh
từ]
15. [Danh ngữ] → [Phụ tổ loại thể, đơn vị] + [Danh
từ] + [Phụ tố chỉ định]
16. [Danh ngữ] → [Phụ tố số lượng] + [Phụ tổ loại
thể, đơn vị] + [Danh từ] + [Phụ tố
chỉ định]
17. [Động ngữ] → [Động từ]
18. [Động ngữ] → [Động từ] + [Danh từ]
19. [Động ngữ] → [Động từ] + [Phụ từ]
20. [Động ngữ] → [Động từ] + [Tính từ]
21. [Động ngữ] → [Phụ từ] + [Động từ]
22. [Động ngữ] → [Phụ từ] + [Động từ] + [Phụ từ]
23. [Động ngữ] → [Phụ từ] + [Động từ] + [Danh từ]
24. [Động ngữ] → [Phụ từ] + [Động từ] + [Tính từ]
25. [Tính ngữ] → [Tính từ]
26. [Tính ngữ] → [Tính từ] + [Phụ từ]
Chương 4. Xây dựng văn phạm tiếng Việt
Khoá luận tốt nghiệp 48
27. [Tính ngữ] → [Tính từ] + [Danh từ]
28. [Tính ngữ] → [Phụ từ] + [Tính từ]
29. [Tính ngữ] → [Phụ từ] + [Tính từ] + [Danh từ]
Bảng 5. Tập luật của văn phạm tiếng Việt
Bây giờ em xin trình bày cấu trúc dữ liệu được sử dụng trong chương trình phân
tích cú pháp từ trên xuống cho văn phạm phi ngữ cảnh, chỉ nêu lên phần cài đặt cấu
trúc dữ liệu và thuật toán phân tích mà không liệt kê chi tiết toàn bộ mã nguồn của
chương trình. Cấu trúc dữ liệu và thuật toán được trình bày trong ngôn ngữ lập trình
Java. Với tiếng Việt, trước khi phân tích cú pháp, ta cần tách các đơn vị từ vựng trong
câu, sau đó áp dụng tương tự mô hình tiếng Anh. Vì vậy, trong phần này em chỉ trình
bày cấu trúc dữ liệu và cài đặt thuật toán cho bài toán phân tích cú pháp tiếng Anh.
Trong phần phụ lục của khoá luận em sẽ trình bày chi tiết bài toán tách từ vựng tiếng
Việt.
Chương 5. Cài đặt chương trình
Khoá luận tốt nghiệp
Chương 5. Cài đặt chương trình
5.1. Cấu trúc dữ liệu
Từ điển là một danh sách tuyến tính các mục từ trong từ điển. Mỗi mục từ là một
đối tượng của lớp Lexicon. Lớp Lexicon gồm hai thành phần dữ liệu: biến kiểu xâu
ký tự word chứa nội dung của mục từ và một vector partOfSpeech biểu diễn các từ
loại tương ứng với từ đó. Các phương thức thao tác trên hai thành phần dữ liệu này là:
¾ boolean isPos(String c) kiểm tra xem từ này có kiểu từ loại là c hay
không
¾ String getWord() lấy ra nội dung của từ
¾ Vector getPos() lấy ra vector các từ loại của từ
Lớp Lexicon có dạng như sau:
class Lexicon {
String word;
Vector partOfSpeech;
Lexicon(String w, Vector pos) {}
boolean isPOS(String c) {}
public String getWord() {}
public Vector getPOS() {}
public String toString() {}
}
Để tăng tốc độ tính toán trong quá trình phân tích, ta biểu diễn mỗi kiểu từ loại
bởi một ký tự. Để thực hiện điều này, ta dùng một bảng băm (hashtable) chứa các cặp
khoá-trị thể hiện các cặp kiểu từ loại -- mã ký tự tương ứng. Trong chương trình phân
tích cú pháp tiếng Anh, ta dùng bảng băm sau:
Hashtable ht = new Hashtable();
String keys[] = {"S", "N", "V", "a","n", "v",
"i", "j", "P", "p", "x", "o", "u"
};
String values[] = {"S", "NP", "VP", "ART", "NOUN", "VERB",
"NAME", "ADJ", "PP", "PREP", "AUX", "PRONOUN", "NUMBER"
};
for (int i = 0; i < keys.length; i++)
ht.put(keys[i], values[i]);
Bảng băm này cũng tiện dụng khi biểu diễn các nút của cây chứa kết quả phân tích.
Để biểu diễn các nút của cây phân tích, ta sử dụng lớp ParsingTreeNode. Lớp này
gồm hai thành phần dữ liệu value chứa tên từ loại và key chứa mã của từ loại này.
Lớp ParsingTreeNode có dạng như sau:
class ParsingTreeNode {
private String value;
Chương 5. Cài đặt chương trình
Khoá luận tốt nghiệp 50
private String key;
public ParsingTreeNode() {}
public ParsingTreeNode(String k, String v) {}
public String getKey() {}
public String toString() {}
}
Với bảng băm nêu trên, ta có văn phạm đơn giản của tiếng Anh gồm 11 quy tắc
như sau:
STT Dạng đầy đủ Dạng biểu diễn
1. S → NP VP S → NV
2. NP → ART NOUN N → an
3. NP → ART ADJ NOUN N → ajn
4. NP → NAME N → i
5. NP → PRONOUN N → o
6. PP → PREP NP P → pN
7. VP → VERB V → v
8. VP → AUX V NP V → xvN
9. VP → VERB NP V → vN
10. VP → VERB NP PP V → vNP
11. VP → VERB PP V → vP
Bảng 6. Tập luật của văn phạm tiếng Anh
Để lưu các vế trái và vế phải của các quy tắc sinh trong văn phạm, ta sử dụng hai
mảng một chiều left, right:
int MAX_RULES = 50; // số quy tắc cực đại
String left[] = new String[MAX_RULES];
String right[] = new String[MAX_RULES];
Các từ của câu cần phân tích được chứa trong mảng tokens. Với tiếng Anh, ta chỉ
cần dựa vào các ký tự trắng trong câu để cắt ra các từ.
String tokens[];
Để chứa các trạng thái phân tích được sao lưu và vị trí hiện tại đang xét trong câu
cần phân tích, ta dùng các ngăn xếp
Stack backupStates = new Stack();
Stack positions = new Stack();
Chương 5. Cài đặt chương trình
Khoá luận tốt nghiệp 51
5.2. Cài đặt thuật toán
Để dựng được cây phân tích, bao giờ ta cũng cần tìm dẫn xuất trái của quá trình
phân tích. Dẫn xuất trái là một dẫn xuất tại mỗi bước luôn luôn chọn chữ phụ đầu tiên
của xâu trung gian để thực hiện phép thế. Như vậy, một xâu ω bất kỳ thuộc vào ngôn
ngữ sinh bởi văn phạm G khi và chỉ khi có tồn tại dẫn xuất trái để từ ký hiệu khởi đầu
S suy dẫn được ra ω. Ta gọi dãy các số hiệu của các quy tắc suy dẫn i1i2...in là dãy
trái. Ta quy bài toán phân tích câu về bài toán tìm dãy trái của ω.
Với những cấu trúc dữ liệu và thuật toán đã trình bày, ta có phương thức tìm dãy
trái của một xâu như sau:
¾ Input: Một câu tiếng Anh ω, các từ cách nhau ít nhất một ký tự trắng,
không có các dấu chấm câu
¾ Output: Dãy trái của ω nếu phân tích được, hoặc trả lời không đoán nhận
được
public Vector parse(String w) {
int i,j;
boolean recognizable = false; // đã đoán nhận được?
Vector parsingOrder = new Vector();// dãy trái của phân tích
// Lấy ra các từ trong câu
StringTokenizer stk = new StringTokenizer(w);
int n = stk.countTokens();
tokens = new String[n];
i = 0;
while (stk.hasMoreTokens()) {
tokens[i] = stk.nextToken();
i++;
}
String curState = ""; // trạng thái hiện tại
int curPos = 0; // vị trí hiện tại
Stack backupStates = new Stack(); // các trạng thái sao lưu
Stack positions = new Stack(); // các vị trí sao lưu
Stack ruleIdxs = new Stack(); // chỉ số các quy tắc được chọn
backupStates.push(startSymbol); // startSymbol = S - câu
ruleIdxs.push(new Vector());
positions.push(new Integer(0));
// vòng lặp phân tích
while ((!backupStates.isEmpty()) && (!recognizable)) {
curState = (String)backupStates.pop();
parsingOrder = (Vector)ruleIdxs.pop();
curPos = ((Integer)positions.pop()).intValue();
j = 0;
while ((curState.length() > 0) &&
(Character.isLowerCase(curState.charAt(j)))) {
// lo•i b• nh•ng ph••ng án không th• ••a t•i k•t qu•…
while ((curState.length() > n-curPos) &&
(!backupStates.isEmpty())) {
curState = (String)backupStates.pop();
curPos = ((Integer)positions.pop()).intValue();
parsingOrder = (Vector)ruleIdxs.pop();
}
// nếu từ hiện tại thuộc kiểu từ loại này…
if (lexiconDic.match(""+curState.charAt(j),tokens[curPos])){
curPos++;
Chương 5. Cài đặt chương trình
Khoá luận tốt nghiệp 52
curState = (curState.length() == 1)? "" :
curState.substring(1);
j = 0;
if ((curPos >= tokens.length) &&
curState.compareTo("") == 0)){
recognizable = true;
break;
}
} else { // n•u không thì xét v• trí và tr•ng thái sao l•u…
if (!positions.isEmpty()) curPos =
((Integer)positions.pop()).intValue();
if (!backupStates.isEmpty()) {
curState = (String)backupStates.pop();
parsingOrder = (Vector)ruleIdxs.pop();
} else break;
}
}
// Áp d•ng các suy d•n: ••a các ph••ng án ti•p theo vào các ng•n x•p,
// ch• ••a vào các ph••ng án có kh• n•ng cho k•t qu•
if ((!recognizable) && (curState.compareTo("") != 0))
for (i = 0; i < numberOfRules; i++)
if ((left[i].compareTo("" + curState.charAt(0)) == 0) &&
(curState.length() <= tokens.length-curPos+1)) {
backupStates.push(right[i]+
((curState.length() >= 1) ? curState.substring(1) :
""));
positions.push(new Integer(curPos));
Vector tempVec = new Vector();
for (Enumeration e = parsingOrder.elements();
e.hasMoreElements();)
tempVec.addElement((Integer)e.nextElement());
tempVec.addElement(new Integer(i+1));
ruleIdxs.push(tempVec);
}
} // kết thúc vòng lặp phân tích
if (!recognizable) return new Vector(); else
return parsingOrder;
}
Phương thức parse nêu trên tìm dãy trái của ω và đưa nó vào một vector các số
nguyên, mỗi phần tử của vector này là số hiệu của các quy tắc suy dẫn tương ứng.
5.3. Thể hiện kết quả phân tích
Để thể hiện kết quả phân tích ở dạng cây, ta dùng cấu trúc JTree của Java. Cây
phân tích được xây dựng từ dãy trái, trong quá trình chèn các nút mới, ta sử dụng thuật
toán tìm kiếm theo chiều sâu để tìm nút cha của nút mới cần chèn vào. Phương thức
xây dựng cây phân tích như sau:
public JTree createParsingTree(Vector parsingOrder) {
JTree tree;
rootNode = new DefaultMutableTreeNode(new ParsingTreeNode("S",
"S"));
int q;
Enumeration e;
String s;
for (int i = 0; i < parsingOrder.size(); i++) {
q = ((Integer)parsingOrder.elementAt(i)).intValue()-1;
e = rootNode.depthFirstEnumeration();
DefaultMutableTreeNode treeNode;
while (e.hasMoreElements()) {
treeNode = (DefaultMutableTreeNode)e.nextElement();
s = ((ParsingTreeNode)treeNode.getUserObject()).getKey();
if ((s.compareTo(left[q]) == 0) && (treeNode.isLeaf())) {
DefaultMutableTreeNode tempNode = null;
Chương 5. Cài đặt chương trình
Khoá luận tốt nghiệp 53
for (int j = 0; j < right[q].length(); j++) {
String key = "" + right[q].charAt(j);
tempNode = new DefaultMutableTreeNode(new
ParsingTreeNode(key,
(String)partOfSpeechMap.get(key)));
treeNode.add(tempNode);
}
break;
}
}
}
e = rootNode.depthFirstEnumeration();
DefaultMutableTreeNode treeNode;
int j = 0;
while (e.hasMoreElements()) {
treeNode = (DefaultMutableTreeNode)e.nextElement();
if (treeNode.isLeaf()) {
DefaultMutableTreeNode tempNode = null;
tempNode = new DefaultMutableTreeNode(tokens[j]);
treeNode.add(tempNode);
j++;
}
}
tree = new JTree(rootNode);
tree.setEditable(true);
tree.getSelectionModel().setSelectionMode(
TreeSelectionModel.SINGLE_TREE_SELECTION);
tree.setShowsRootHandles(true);
return tree;
}
Hình 14 là giao diện của chương trình và thể hiện cây phân tích của câu "The
green water evaporated" nhập từ một hộp soạn thảo.
Hình 14. Giao diện chương trình phân tích cú pháp tiếng Anh
Nếu trình phân tích không phân tích được câu nhập vào (câu sai cú pháp hoặc câu
chứa từ không có trong từ điển) thì chương trình đưa ra thông báo là không phân tích
Chương 5. Cài đặt chương trình
Khoá luận tốt nghiệp 54
được. Dưới đây là kết quả phân tích của chương trình với một số câu nhập vào khác
nhau:
Chương 5. Cài đặt chương trình
Khoá luận tốt nghiệp 55
Chương 5. Cài đặt chương trình
Khoá luận tốt nghiệp 56
Để thử nghiệm chương trình phân tích cú pháp tiếng Việt, ta có thể nhập vào một số
câu có cấu trúc khác nhau. Nếu dùng ký hiệu [w*] để chỉ từ w có thể xuất hiện hoặc
không xuất hiện trong câu thì những câu có dạng:
1. Cô [ấy*] [rất*] tốt [nết*]
2. Cô [ấy*] tốt [cực kỳ*]
đều được phân tích đúng. Để thử nghiệm danh ngữ làm chủ ngữ, ta có thể thay đại từ
“cô” bằng các tổ hợp: mèo, mèo ấy, con mèo, con mèo ấy, những con mèo ấy và chọn
tính ngữ làm vị ngữ cho phù hợp.
Có thể nhập vào một số câu như sau để thử nghiệm động ngữ làm vị ngữ:
Anh [này*] [đang*] ăn [cơm* | ngon*]
Tương tự, có thể thay đại từ “anh” bằng một danh ngữ.
Để thử nghiệm từ quan hệ, ta có thể dùng một số câu như:
1. Tôi là sinh viên
2. Nó bằng nhôm
3. Anh ấy là sinh viên
4. Họ là các sinh viên
5. Chúng là hai con mèo
Chương 5. Cài đặt chương trình
Khoá luận tốt nghiệp 57
5.4. Đánh giá kết quả
Khoá luận trình bày việc vận dụng các mô hình văn phạm phi ngữ cảnh và các
mạng chuyển vào bài toán phân tích cú pháp tiếng Anh và tiếng Việt. Trong phân tích
cú pháp có những đặc điểm chính sau:
• Tách riêng việc giải quyết phân tách từ vựng và phân tích cú pháp cho tiếng Việt.
Sử dụng kết quả phân tích cú pháp để hỗ trợ quyết định chọn phương án phân tách
từ vựng của câu (Phần Phụ lục).
• Giải quyết được vấn đề độ dài từ ghép hoặc cụm từ cố định.
• Chương trình hiện tại chỉ xử lý những câu đơn hai thành phần đơn giản của tiếng
Việt
• Với câu nhập nhằng thì đưa ra mọi phương án phân tích có thể.
• Chương trình cung cấp các giao diện nhập liệu và xử lý trong môi trường hệ điều
hành Windows, thuận tiện cho việc sử dụng.
Mọi câu đưa vào đều được thực hiện theo hai bước, gồm tách từ vựng và phân
tích cú pháp. Mặc dù em chưa đưa ra được những số liệu thống kê chính xác nhưng
quá trình thử nghiệm bước đầu cho thấy chương trình chạy khá nhanh và cho kết quả
tương đối chính xác.
Khoá luận tốt nghiệp
Phụ lục
Bài toán tách từ vựng tiếng Việt
Trước khi thực hiện phân tích cú pháp của một câu tiếng Việt, ta cần một bước
tiền xử lý quan trọng, đó là tách câu thành các đơn vị từ vựng và gán cho chúng những
nhãn từ loại tương ứng (chẳng hạn danh từ, động từ...).
1. Đặt bài toán
Nhập vào một câu tiếng Việt bất kỳ, hãy tách câu đó thành những đơn vị từ vựng
(từ), hoặc chỉ ra những âm tiết nào không có trong từ điển (phát hiện đơn vị từ vựng
mới).
Để giải quyết bài toán đặt ra, ta cần tập dữ liệu gồm từ điển âm tiết (khoảng 6700
âm tiết) và từ điển từ vựng tiếng Việt (khoảng 30.000 từ). Việc sử dụng hai bộ từ điển
nêu trên trong phạm vi đề tài nghiên cứu đã được sự đồng ý của Trung tâm từ điển
học. Các từ điển được lưu dưới dạng các tệp văn bản có định dạng mã TCVN hoặc
Unicode (UTF-8).
2. Các bước giải quyết
1. Xây dựng ôtôtmát âm tiết đoán nhận tất cả các âm tiết tiếng Việt
2. Xây dựng ôtôtmát từ vựng đoán nhận tất cả các từ vựng tiếng Việt.
3. Dựa trên các ôtômát nêu trên, xây dựng đồ thị tương ứng với câu cần phân tích
và sử dụng thuật toán tìm kiếm trên đồ thị để liệt kê các cách phân tích có thể.
Tư tưởng của phương pháp xây dựng các ôtômát là: xây dựng dần dần dựa trên
ôtômát đã có ở bước trước và âm tiết (hoặc từ vựng) mới đọc được từ tệp dữ liệu ở
bước hiện tại.
Bảng chữ cái của ôtômát âm tiết là bảng chữ cái tiếng Việt, mỗi cung chuyển
được ghi trên đó một ký tự, ban đầu ôtômát âm tiết chỉ gồm một trạng thái khởi đầu
được đánh số hiệu 0. Giả sử tại bước nào đó ta đọc được âm tiết a có độ dài n (tính
bằng số ký tự) từ tệp dữ liệu. Xuất phát từ trạng thái khởi đầu p = q0 ta lấy ra từng ký
tự ci của a và tìm xem từ p có cung chuyển đến trạng thái q nào đó mà trên đó ghi ký
tự ci hay không. Nếu có trạng thái q như thế, ta chuyển p thành q và lặp lại bước trên
với ký tự ci+1 tiếp theo. Nếu không có q nào như thế, ta ra khỏi vòng lặp và xây dựng
mới các trạng thái và cung chuyển tương ứng trên đó ghi các ký tự ci, ci+1,..., cn-1 theo
sơ đồ sau (ô vuông chỉ rằng đó là trạng thái kết).
Bài toán tách từ vựng tiếng Việt
Khoá luận tốt nghiệp 59
Ví dụ, với ba âm tiết phương, pháp, trình ta sẽ có ôtômát âm tiết như Hình 15.
Hình 15. Phương pháp xây dựng ôtômát âm tiết
Ôtômát từ vựng được xây dựng tương tự, với điểm khác như sau: thay vì ghi trên
mỗi cung chuyển một ký tự, ta ghi một số. Số này là số hiệu của trạng thái (kết) của
ôtômát âm tiết tại đó đoán nhận mỗi âm tiết của từ. Với cách tổ chức này, ta làm giảm
được kích thước của ôtômát từ vựng mà không làm mất thông tin của nó, bởi vì mỗi
âm tiết được xác định bằng một trạng thái kết duy nhất trong ôtômát âm tiết. Ví dụ,
với hai từ phương pháp và phương trình, giả sử khi đưa lần lượt các âm tiết phương,
pháp, trình qua ôtômát âm tiết, ta đến được các trạng thái kết ghi các số n1, n2, n3 thì
trên các cung chuyển tương ứng ta ghi các số n1, n2, n3 (Hình 16).
Hình 16. Phương pháp xây dựng ôtômát từ vựng
Sau khi đã xây dựng xong hai ôtômát, ta ghi chúng vào hai tệp định kiểu để dùng
trong bước phân tách từ vựng. Đến lúc này, hai từ điển ban đầu không còn cần thiết
nữa, mọi dữ liệu của ta nằm trong hai tệp ghi hai ôtômát này. Nếu mỗi ký tự (char)
được ghi vào tệp với kích thước 2 byte (mã Unicode), mỗi số nguyên (int) có kích
thước 4 byte thì tệp lưu ôtômát âm tiết có kích thước 146KB, tệp ôtômát từ vựng có
kích thước 1MB.
Tư tưởng của thuật toán phân tách từ vựng là quy việc phân tách câu về việc tìm
đường đi trên một đồ thị có hướng, không có trọng số.
Bài toán tách từ vựng tiếng Việt
Khoá luận tốt nghiệp 60
Giả sử câu ban đầu là một dãy gồm n+1 âm tiết s0, s1, ..., sn. Ta xây dựng một đồ
thị có n+2 đỉnh v0, v1, ..., vn, vn+1, sắp thứ tự trên một đường thẳng từ trái sang phải;
trong đó, từ đỉnh vi đến đỉnh vj có cung (i < j) nếu các âm tiết si, si+1, ..., sj-1 theo thứ tự
lập thành một từ. Khi đó mỗi cách phân tách câu khác nhau tương ứng với một đường
đi trên đồ thị từ đỉnh đầu v0 đến đỉnh cuối vn+1. Trong các cách phân tách câu đó, cách
phân tích câu đúng đắn nhất ứng với đường đi qua ít cung nhất trên đồ thị.
Trong trường hợp câu có sự nhập nhằng thì đồ thị sẽ có nhiều hơn một đường đi
ngắn nhất từ đỉnh đầu đến đỉnh cuối, ta liệt kê toàn bộ các đường đi ngắn nhất trên đồ
thị, từ đó đưa ra tất cả các phương án tách câu có thể và để người dùng quyết định sẽ
chọn phương án nào, tuỳ thuộc vào ngữ nghĩa hoặc văn cảnh. Ví dụ, xét một câu có
cụm "thuộc địa bàn", ta có đồ thị như sau (Hình 17)
Hình 17. Một tình huống nhập nhằng
Cụm này có sự nhập nhằng giữa thuộc địa và địa bàn và ta sẽ có hai kết quả phân
tách là "thuộc địa / bàn" và "thuộc / địa bàn". Ta có thể chỉ ra rất nhiều những cụm
nhập nhằng trong tiếng Việt, chẳng hạn "tổ hợp âm tiết", "bằng chứng cớ",...
Trường hợp trong câu có âm tiết không nằm trong từ điển thì rõ ràng ôtômát âm
tiết không đoán nhận được âm tiết này. Kết quả là đồ thị ta xây dựng từ câu đó là
không liên thông. Dựa vào tính chất này, ta thấy rằng nếu đồ thị không liên thông thì
dễ dàng phát hiện ra rằng đơn vị âm tiết không đoán nhận được không nằm trong từ
điển âm tiết, tức nó bị viết sai chính tả hoặc là một đơn vị âm tiết (từ vựng) mới.
3. Đánh giá kết quả
Với cách tiếp cận như trên, bài toán phân tách từ vựng trong câu tiếng Việt về cơ
bản đã được giải quyết, đặc biệt là vấn đề tách các tổ hợp từ tương đương với một đơn
vị từ vựng, thường là các cụm từ cố định, ngữ cố định hoặc các thành ngữ trong tiếng
Việt. Nếu chúng ta chỉ sử dụng một danh sách từ vựng thông thường và thực hiện các
thao tác tìm kiếm trên danh sách này thì không thể đảm bảo thời gian tách từ vựng đối
với câu có chiều dài lớn.
Với những câu nhập vào có sự nhập nhằng từ vựng, tức có nhiều hơn một cách
phân tách thì chương trình liệt kê toàn bộ các phương án tách từ có thể và giành quyền
Bài toán tách từ vựng tiếng Việt
Khoá luận tốt nghiệp 61
lựa chọn kết quả cho người sử dụng. Trong tất cả các phương án phân tách đó bao giờ
cũng tồn tại phương án đúng.
Dưới đây là một số câu nhập vào và kết quả tách từ tương ứng.
1. Nó | là | một | bản | tuyên ngôn | đặc sắc | của | chủ nghĩa nhân đạo | , một | tiếng | chuông
| cảnh tỉnh | trước | hiểm họa | lớn lao | của | hành tinh | trước | sự | điên rồ | của | những |
kẻ | cuồng tín
2. Sự | giản dị | trong sáng | toả | khắp | tác phẩm | đã | khiến | nó | trở nên | một | bài | thơ |
bất hủ | mà | mãi mãi | người ta | muốn | đem | làm quà | tặng | của | tình yêu
3. Trong khi | các | thành phần | tư bản chủ nghĩa | có | những | bước | phát triển | mạnh | hơn
| thời kì | trước | thì | thế lực | của | giai cấp | địa chủ | vẫn | không hề | suy giảm.
Tuy nhiên, chương trình phân tách từ vựng hiện tại vẫn còn một số vấn đề khó
khăn cần phải tiếp tục nghiên cứu giải quyết:
Thứ nhất là vấn đề giải quyết nhập nhằng phân tách. Cần phải chọn một phương
án đúng đắn trong số nhiều phương án. Các hướng tiếp cận khả thi cho vấn đề này có
thể là:
- Dùng phương pháp phân tích cú pháp. Tiến hành phân tích cú pháp của câu
với những phương án tách từ vựng có thể, từ đó loại ra những phương án sai
cú pháp. Muốn thực hiện được điều này thì ta cần một trình phân tích cú pháp
tương đối tin cậy và đầy đủ.
- Dùng phương pháp xác suất - thống kê. Ta sẽ thống kê trên những tập văn
(corpus) tương đối lớn của tiếng Việt để tìm ra xác suất của các bộ đôi hay bộ
ba từ loại hoặc từ vựng đi cạnh nhau. Từ đó lựa chọn phương án phân tách có
xác suất sai ít nhất.
Chương trình phân tích cú pháp tiếng Việt hiện tại cũng đã có khả năng nhận biết
được một số câu nhập nhằng từ vựng. Ví dụ, với câu “bản sao chụp mờ” thì có thể có
hai cách phân tích như trong Hình 18. Ở đây có hai cách phân tách từ có thể là “bản |
sao chụp” và “bản sao | chụp”, trình phân tích nhận thấy cả hai cách tách từ này đều
đúng cú pháp và đưa ra hai cây phân tích tương ứng.
Nhưng xét một ví dụ tương tự, câu “anh ấy rất thuộc địa bàn” thì mặc dù cụm
“thuộc địa bàn” có hai cách phân tách từ vựng là “thuộc | địa bàn” và “thuộc địa | bàn”
nhưng trình phân tích chỉ đoán nhận được một và đưa ra cách phân tích tương ứng với
cách tách từ đó. Do đó, cách tách từ còn lại là sai. (Hình 19)
Bài toán tách từ vựng tiếng Việt
Khoá luận tốt nghiệp 62
Hình 18. Các phương án phân tích cho một câu tiếng Việt nhập nhằng
Hình 19. Cây phân tích ứng với cách tách từ đúng
Thứ hai là vấn đề giải quyết tên riêng, tên viết tắt và tên có nguồn gốc nước ngoài
có mặt trong câu. Hiện tại chương trình phân tách chưa nhận ra được các cụm từ dạng
“Nguyễn Văn A”, “Đại học Khoa học Tự nhiên”, hoặc “ĐT. 8.20.20.20”, “1.000$”,
“0,05%”...
Tài liệu tham khảo
[1] Margaret King, Parsing Natural Language, Academic Press Inc, London, 1983.
[2] Christopher D. Manning and Hinrich Schütze, Foundations of Statistical Natural
Language Processing, Massachusetts Institute of Technology, USA, 1999.
[3] Emmanuel Roche and Yves Schabes, Finite-State Language Processing, The
MIT Press, Massachusetts, USA, 1997.
[4] Đỗ Đức Giáo, Đặng Huy Ruận, Văn phạm và ngôn ngữ hình thức, NXB Khoa
học và kỹ thuật, Hà Nội, 1991.
[5] Lê Thanh Hương, Phân tích cú pháp tiếng Việt, Luận văn tốt nghiệp cao học, Hà
Nội, 1999.
[6] Diệp Quang Ban, Hoàng Văn Thung, Ngữ pháp tiếng Việt (2 tập), NXB Giáo dục,
Hà Nội, 1999.
[7] Mai Ngọc Chừ, Vũ Đức Nghiệu, Hoàng Trọng Phiến, Cơ sở ngôn ngữ học và
tiếng Việt, NXB Giáo dục, Hà Nội, 2000.
[8] Nguyễn Thiện Giáp, Đoàn Thiện Thuật, Nguyễn Minh Thuyết, Dẫn luận ngôn
ngữ học, NXB Giáo dục, Hà Nội, 2001.
[9] Ngữ Pháp Tiếng Việt, NXB Khoa học xã hội, 1983.
[10] Hoàng Phê, Từ điển tiếng Việt, NXB Khoa học xã hội - Trung tâm từ điển học,
Hà Nội, 2000.
[11] Bruce Eckel, Thinking in Java, 2nd edition, Revision 11, 2000.
[12] Sun Microsystem, The Java Tutorial, CDROM, 2000.
Các file đính kèm theo tài liệu này:
- Phân tích cú pháp tiếng Việt trong tin học.pdf