Вы находитесь на странице: 1из 19

ĐẠI HỌC QUỐC GIA TP.

HỒ CHÍ MINH
TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN
KHOA KHOA HỌC MÁY TÍNH

BÁO CÁO ĐỒ ÁN
XỬ LÝ NGÔN NGỮ TỰ NHIÊN

VIẾT CHƯƠNG TRÌNH VẼ CÂY AND/OR


PHÂN TÍCH CÚ PHÁP CÂU VÀ PHÂN TÍCH THƠ

Giảng viên hướng dẫn: TS. NGUYỄN TUẤN ĐĂNG

Sinh viên thực hiện:

NGUYỄN HOÀNG NGHĨA 11520603

Lớp: KHTN2011
Lớp môn học: CS221.E21.KHTN
Khoá: 2011

TP. Hồ Chí Minh, Ngày 28 tháng 06 năm 2014


ĐẠI HỌC QUỐC GIA TP. HỒ CHÍ MINH
TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN
KHOA KHOA HỌC MÁY TÍNH

BÁO CÁO ĐỒ ÁN
XỬ LÝ NGÔN NGỮ TỰ NHIÊN

VIẾT CHƯƠNG TRÌNH VẼ CÂY AND/OR


PHÂN TÍCH CÚ PHÁP CÂU VÀ PHÂN TÍCH THƠ

Giảng viên hướng dẫn: TS. NGUYỄN TUẤN ĐĂNG

Sinh viên thực hiện:

NGUYỄN HOÀNG NGHĨA 11520603

Lớp: KHTN2011
Lớp môn học: CS221.E21.KHTN
Khoá: 2011

TP. Hồ Chí Minh, Ngày 28 tháng 06 năm 2014


LỜI CẢM ƠN

Lời đầu tiên chúng em xin được bày tỏ lòng biết ơn sâu sắc nhất
tới TS. Nguyễn Tuấn Đăng, Khoa Khoa học máy tính, Đại học Công nghệ
thông tin ĐHQG-HCM, người đã tận tình hướng dẫn kiến thức căn bản
và thiết yếu để hoàn thành đồ án.

Tiếp đến, xin cám ơn các bạn lớp CS221.E21.KHTN đã cùng trao
đổi và bổ sung kiến thức hỗ trợ cho việc hoàn thiện đồ án.

TP. Hồ Chí Minh, Ngày 28 tháng 06 năm 2014

Nguyễn Hoàng Nghĩa


NHẬN XÉT CỦA GIẢNG VIÊN

···································································································

···································································································

···································································································

···································································································

···································································································

···································································································

···································································································

···································································································

···································································································

···································································································

···································································································

···································································································

···································································································

···································································································

···································································································

···································································································

···································································································

···································································································

···································································································

···································································································

···································································································

···································································································

···································································································
MỤC LỤC
I. Tổng quan .................................................................................................................................................. 2
1. Thông tin chung .................................................................................................................................... 2
2. Nội dung thực hiện............................................................................................................................... 2
3. Công cụ hỗ trợ ...................................................................................................................................... 2
II. Xây dựng chương trình vẽ cây AND/OR phân tích câu ........................................................................... 3
1. Ý tưởng ................................................................................................................................................. 3
2. Xây dựng class Node ........................................................................................................................ 3
2.1. Các thuộc tính được khai báo: ...................................................................................................... 3
2.2. Các hàm được xây dựng: .............................................................................................................. 5
3. Xây dựng chương trình chính .............................................................................................................. 6
3.1. Các biến được khai báo: ............................................................................................................... 6
3.2. Các hàm được xây dựng: .............................................................................................................. 6
4. Xây dựng giao diện và hoàn thiện chương trình ................................................................................ 7
4.1. Xây dựng giao diện ........................................................................................................................ 7
4.2. Chương trình hoàn chỉnh .............................................................................................................. 8
5. Kiểm tra: ............................................................................................................................................. 10
5.1. Một số văn phạm đơn giản: ........................................................................................................ 10
5.2. Câu mặc định: .............................................................................................................................. 12
III. Xây dựng văn phạm phân tích câu ....................................................................................................... 14
Văn phạm xây dựng:............................................................................................................................... 14
BÁO CÁO ĐỒ ÁN XỬ LÝ NGÔN NGỮ TỰ NHIÊN GVHD: TS. NGUYỄN TUẤN ĐĂNG

I. Tổng quan
1. Thông tin chung
* Tên đồ án:
Viết chương trình vẽ cây AND/OR phân tích cú pháp câu và phân tích thơ.
* Giảng viên hướng dẫn: TS. Nguyễn Tuấn Đăng.
* Sinh viên thực hiện: Nguyễn Hoàng Nghĩa.
* Khoá học: Khoá 2011 (Ngày nhập học: Tháng 09/2011).
* Thông tin liên lạc của sinh viên:
STT Tên MSSV Email
1 Nguyễn Hoàng Nghĩa 11520603 11520603@gm.uit.edu.vn

2. Nội dung thực hiện


Đồ án thực hiện 2 nội dung:

 Viết chương trình xây dựng cây AND/OR mô phỏng quá trình phân tích câu từ văn
phạm dạng cú pháp của Prolog.
 Viết cú pháp DCG phân tích 4 câu thơ:
Em không nghe rừng thu,
Lá thu kêu xào xạc,
Con nai vàng ngơ ngác
Đạp trên lá vàng khô?
(Tiếng thu - Lưu Trọng Lư)
3. Công cụ hỗ trợ
Chương trình vẽ cây AND/OR:

 IDE lập trình: Microsoft Visual Studio 2010.


 Môi trường lập trình: Visual C#: Windows Forms Application.
 Ứng dụng hỗ trợ: Devcomponents DotNetBar version 10.0.0.0.
Chương trình hỗ trợ kiểm tra văn phạm:

 SWI-Prolog (Multi-threaded, 32 bits, Version 6.3.4).

2
BÁO CÁO ĐỒ ÁN XỬ LÝ NGÔN NGỮ TỰ NHIÊN GVHD: TS. NGUYỄN TUẤN ĐĂNG

II. Xây dựng chương trình vẽ cây AND/OR phân tích câu
1. Ý tưởng
Mục tiêu:
Hoàn thiện chương trình xây dựng cây AND/OR mô phỏng quá trình phân tích câu từ văn
phạm dạng cú pháp của Prolog. Chương trình sử dụng 2 câu mặc định:
"Em không nghe rừng thu
Lá thu kêu xào xạc"
(Tiếng thu - Lưu Trọng Lư)
Ý tưởng:
Ta nhận thấy chương trình gồm 2 bước chính cần giải quyết:

 Bước 1: Từ văn phạm đầu vào ta cần phân tích câu trên mô phỏng theo cách Prolog
thực hiện.
 Bước 2: Từ kết quả bước trên ta sẽ vẽ cây AND/OR mô phỏng lại quá trình phân
tích.
Vậy kết quả đầu ra của bước 1 và đầu vào bước 2 phải thống nhất hoặc có thể hiểu được
nhau. Từ đó, đồ án sẽ xây dựng cấu trúc dữ liệu chính của chương trình: class Node lưu
dạng cây lưu trữ các thông tin và kết quả truy vấn văn phạm và các thuộc tính dùng để vẽ.
class Node được khai báo đệ quy để có thể lưu được các node (các thao tác) trong quá
trình truy vấn đồng thời có thể lưu được cấu trúc cây.
2. Xây dựng class Node
class Node được định nghĩa đệ quy gồm mô tả 1 Node trong quá trình truy vấn và các con
của nó. Đồng thời, lưu trữ các thuộc tính dùng để vẽ.
2.1. Các thuộc tính được khai báo:

Khai báo Chức năng


Các thuộc tính truy vấn
string Tên luật được áp dụng; tên các biến trái,
name,nameL,nameR,unionNameL,unionName phải; tên các biến trước quá trình hợp nhất
R
(unified)

3
BÁO CÁO ĐỒ ÁN XỬ LÝ NGÔN NGỮ TỰ NHIÊN GVHD: TS. NGUYỄN TUẤN ĐĂNG

string[] tagNodeLeft; Lưu trữ danh sách các từ trong câu thuộc
string[] tagNodeRight; thành phần truy vấn (Node) trái, phải hiện
tại.
int numsRule; Thứ tự luật được áp dụng tại Node.
bool flag; Cờ đánh dấu giá trị của truy vấn tại Node
hiện tại: true – Truy vấn dúng; false – truy
vấn sai.
Node[] chilList; Danh sách các Node con (các kết quả truy
vấn tại Node hiện tại).
Node parent; Node hiện tại là thành phần truy vấn của
panrent.
Các thuộc tính dùng để vẽ
bool isSpecialNode = false; Node đặc biệt, tên hiển thị bị thay đổi
trong quá trình truy vấn.
string draw; Nội dung sẽ dược viết (vẽ) ra của Node.
float primeDistance = 100; Khoảng các cơ bản (Pixel) giữa 2 Node
cạnh nhau (theo nghĩa hiển thị trên màn
hình). Giá trị mặc định: 100.
SizeF sizeNode; Độ rộng của Node khi vẽ. Được tính như
sau:
- Độ rộng cơ bản môt Node bằng độ rộng
của string draw; khi vẽ ra.
- Độ rộng của Node khác Node lá bằng
Max( Độ rộng cơ bản Node đó; tổng độ
rộng Node con + khoảng cách giữa các
Node).
float primeHeight; Chiều cao cơ bản giữa 2 Node bậc kề
nhau.
int numsChild; Số Node con cần vẽ ra
PointF location; Vị trí (toạ độ) của Node.
Brush brushValue=Brushes.DarkOrange; Các giá trị Brush của các thành phần cơ
Brush bản được vẽ.
brushUniValue=Brushes.OliveDrab;
Brush brushTree =
Brushes.DarkSlateGray;
static float sizeFont = 20; Size chữ và độ dày của đường kẻ.
static float lineWidth = 2.0f;

4
BÁO CÁO ĐỒ ÁN XỬ LÝ NGÔN NGỮ TỰ NHIÊN GVHD: TS. NGUYỄN TUẤN ĐĂNG

Font font = new Font("Calibri", Giá trị font chữ của các thành phần dạng
sizeFont, FontStyle.Bold, text.
GraphicsUnit.Pixel);
Font uniFont = new Font("Tahoma",
sizeFont * (float)0.618,
FontStyle.Bold, GraphicsUnit.Pixel);

2.2. Các hàm được xây dựng:


Khai báo Chức năng
Phương thức khởi tạo
public Node() Khởi tạo 1 Node cơ bản.
public Node(Node a) Khởi tạo, sao chép 1 Node (không sao chép
thành phần Node[] chilList;
Các hàm hỗ trợ tính toán
public void CalcDistance(Graphics g) Tính các chỉ số SizeF sizeNode; và int
numsChild;
private PointF calcLineConnect(PointF Tính toạ độ của điểm cách p1 khoảng cách
p1, PointF p2,float k) ⃗⃗⃗⃗⃗⃗⃗⃗⃗⃗
k pixel theo chiều của 𝑝1𝑝2
public bool isList(string s) Kiểm tra chuỗi s có phải dạng danh sách
các từ.
public string[] expandList(string s) Triển khai danh sách các từ s mảng vào
chuỗi (mỗi phần từ chứ 1 từ).
public string reduceDraw(string s) Rút gọn chuỗi s có dạng danh sách các từ
để vẽ ra màn hình.
private bool canTurnBack(Node a) Kiểm tra xem Node a có quay lui khi truy
vấn không.
Các hàm vẽ
public SizeF DrawNode(Graphics g) Vẽ một Node ra màn hình dựa trên các
thông số của nó (Không vẽ các thành phần
con)
public void DrawTree(Graphics g) Vẽ một Node hoàn chỉnh (Dạng cây) dựa
trên các thông số và các thành phần đệ quy
của nó.

5
BÁO CÁO ĐỒ ÁN XỬ LÝ NGÔN NGỮ TỰ NHIÊN GVHD: TS. NGUYỄN TUẤN ĐĂNG

3. Xây dựng chương trình chính


3.1. Các biến được khai báo:

Khai báo Chức năng


string[] dcg,normalDcg,normalQuery; Lưu trữ văn phạm hiện tại, văn phạm mặc
định, câu truy vấn mặc định.
Node[] rule; Lưu các luật áp dụng
Node treeAO; Cây AND/OR truy vấn.
Graphics g; Các thành phần đồ hoạ; Thành phần đồ hoạ
Bitmap bitmap; được xử lý toàn bộ trên bitmap trước khi
Color backColor;
xuất ra màn hình; màu nền chung.

3.2. Các hàm được xây dựng:

Khai báo Chức năng


Hàm khởi tạo
public Form1() Khởi tạo các thông số cơ bản
của giao diện, các thành
phần đồ hoạ.
Các phương thức xử lý và truy vấn
private void analysis(string s,int count) Xử lý, tổng hợp dữ liệu đầu
vào: Các luật, câu truy vấn.
private void UnionRule(Node a, Node b) Hợp nhất (unified) Node a
và Node b.
private void startQuery() Hàm chính khởi tạo truy vấn
private bool query(Node a, ref string match) và truy vấn.
private bool lprocess() Hàm gọi lệnh truy vấn.
private void drawANDOR() Khởi tạo và gọi thao tác vẽ
trực tiếp lên màn hình.
Các sự kiện
private void Form1_Load(object sender, EventArgs Sự kiện khởi tạo lúc Form
e) Load
private void buttonRun_Click(object sender, Sự kiện click của các button
EventArgs e)
private void buttonReset_Click(object sender,
EventArgs e)

6
BÁO CÁO ĐỒ ÁN XỬ LÝ NGÔN NGỮ TỰ NHIÊN GVHD: TS. NGUYỄN TUẤN ĐĂNG

private void buttonExit_Click(object sender,


EventArgs e)
private void buttonClear_Click(object sender,
EventArgs e)
private void buttonEdit_Click(object sender,
EventArgs e)
private void buttonHow_Click(object sender,
EventArgs e)
private void pictureBoxHow_Click(object sender, Xử lý form trợ giúp và hộp
EventArgs e) điều khiển.
private void
expandablePanel1_ExpandedChanged(object sender,
DevComponents.DotNetBar.ExpandedChangeEventArgs
e)

4. Xây dựng giao diện và hoàn thiện chương trình


4.1. Xây dựng giao diện
Giao diện cơ bản của chương trình được chia làm 2 phần, các thông số được tính theo tỉ lệ
màn hình hiển thị:

Hình 4.1.1 Tỉ lệ các thành phần chính của giao diện chương trình.

7
BÁO CÁO ĐỒ ÁN XỬ LÝ NGÔN NGỮ TỰ NHIÊN GVHD: TS. NGUYỄN TUẤN ĐĂNG

 Phần (I): Bảng điểu khiển, chứa toàn bộ các phím chức năng, thông tin chương trình.
Bảng điều khiển sử dụng Expanable có thể thu gọn lại để màn hình vẽ (II) rộng hơn.
 Phần (II): Vùng hiển thị hình vẽ, có dạng Panel dùng thanh cuộn (do một số hình
cây lớn hơn vùng hiển thị).

Hình 4.1.2 Tỉ lệ thành phần (I): Bảng điều khiển.


4.2. Chương trình hoàn chỉnh
Giao diện và các phím, nội dung chính của chương trình:

8
BÁO CÁO ĐỒ ÁN XỬ LÝ NGÔN NGỮ TỰ NHIÊN GVHD: TS. NGUYỄN TUẤN ĐĂNG

Hình 4.2.1 Giao diện chính và các phím chức năng của chương trình
Ta có thể thu gọn bảng điều khiển bằng cách nhấn vào thanh tiêu đề của nó:

Hình 4.2.2 Thu gọn bảng điều khiển


Giao diện hướng dẫn:

9
BÁO CÁO ĐỒ ÁN XỬ LÝ NGÔN NGỮ TỰ NHIÊN GVHD: TS. NGUYỄN TUẤN ĐĂNG

Hình 4.2.3 Giao diện hướng dẫn


5. Kiểm tra:

5.1. Một số văn phạm đơn giản:


(1)

Văn phạm Truy vấn


1) s(A,B) :- np(A,C), vp(C,B). s([nó, học, bài],[]).
2) np(A,B) :- prp(A,B).
3) np(A,B):-nn(A,B).
4) vp(A,B):-vb(A,C), np(C,B).
5) prp([nó|A],A).
6) vb([học|A], A).
7) nn([bài|A], A).
Kết quả:

10
BÁO CÁO ĐỒ ÁN XỬ LÝ NGÔN NGỮ TỰ NHIÊN GVHD: TS. NGUYỄN TUẤN ĐĂNG

(2)
Văn phạm Truy vấn
1) s(A, B) :- np(A, C), vp(C, D), pp(D, B). s([nó,đã,đi,paris,vào,năm,ngoái],[]).
2) np(A, B) :- prp(A, B).
3) np(A, B) :- nrp(A, B).
4) np(A, B) :- nn(A, C), jj(C, B).
5) vp(A, B) :- vp1(A, C), np(C, B).
6) vp1(A, B) :- rb(A, C), vb(C, B).
7) pp(A, B) :- in(A, C), np(C, B).
8) prp([nó|A],A).
9) rb([đã|A],A).
10) vb([đi|A], A).
11) nrp([paris|A],A).
12) in([vào|A],A).
13) nn([năm|A],A).
14) jj([ngoái|A],A).

Kết quả: Do kích thước lớn nên ta cần dùng thanh cuộn để có thể xem hết hình.

11
BÁO CÁO ĐỒ ÁN XỬ LÝ NGÔN NGỮ TỰ NHIÊN GVHD: TS. NGUYỄN TUẤN ĐĂNG

5.2. Câu mặc định:


Văn phạm Truy vấn
1) s(A,B) :- np(A,C), vp(C,B). s([em,không,nghe,rừng,thu,lá,thu,kêu,xào,xạc],[]).
2) np(A,B) :- prp(A,B).
3) np(A,B) :- np1(A,B).
4) np(A,B) :- nn(A,C), nn(C,B).
5) np(A,B) :- np1(A,C), np2(C,B).
6) np(A,B) :- np1(A,C), vp(C,B).
7) np1(A,B) :- nn(A,C), nn(C,B).
8) np1(A,B) :- nn(A,B).
9) np1(A,B) :- nn(A,C), vb(C,B).
10) np2(A,B) :- np(A,C), vp(C,B).
11) vp(A,B) :- vp1(A,C), np(C,B).
12) vp(A,B) :- vp1(A,B).
13) vp1(A,B) :- vb(A,C), rb(C,B).
14) vp1(A,B) :- rb(A,C), vb(C,B).
15) vp1(A,B) :- vb(A,C), rb(C,B).
16) vp1(A,B) :- vb(A,C).
17) prp([em|A],A).
18) nn([rừng|A],A).
19) nn([thu|A],A).
20) nn([lá|A],A).

12
BÁO CÁO ĐỒ ÁN XỬ LÝ NGÔN NGỮ TỰ NHIÊN GVHD: TS. NGUYỄN TUẤN ĐĂNG

21) rb([không|A],A).
22) rb([xào,xạc|A],A).
23) vb([kêu|A],A).
24) vb([nghe|A],A).

Kết quả:

(*) Một số câu truy vấn khác:


s([em ,nghe, xào xạc],[]). s([em ,không, kêu],[]).
s([em ,nghe, không],[]). s([rừng ,xào xạc, kêu],[]).
s([em ,kêu, không],[]). s([rừng ,không, kêu],[]).
s([rừng ,nghe, xào xạc],[]). s([thu ,xào xạc, nghe],[]).
s([rừng ,kêu, xào xạc],[]). s([thu ,không, nghe],[]).
s([thu ,nghe, xào xạc],[]). s([thu ,không, kêu],[]).
s([lá ,nghe, xào xạc],[]). s([lá ,xào xạc, nghe],[]).
s([lá ,kêu, xào xạc],[]).. s([lá ,xào xạc, kêu],[]).
s([em ,không, nghe],[]). s([lá ,không, nghe],[]).
13
BÁO CÁO ĐỒ ÁN XỬ LÝ NGÔN NGỮ TỰ NHIÊN GVHD: TS. NGUYỄN TUẤN ĐĂNG

s([lá ,không, kêu],[]). s([em ,nghe, rừng, em, kêu, không],[]).


s([em ,nghe, rừng, kêu],[]). s([em ,nghe, rừng, thu, kêu, xào xạc],[]).
s([em ,nghe, thu, ],[]). s([em ,nghe, rừng, thu, kêu, không],[]).
s([em ,kêu, em, nghe],[]). s([em ,nghe, thu, rừng, kêu, xào xạc],[]).
s([em ,kêu, em, nghe],[]). s([em ,nghe, thu, rừng, kêu, không],[]).
s([em ,kêu, thu, ],[]). s([em ,nghe, lá, rừng, kêu, xào xạc],[]).
s([rừng ,nghe, em, nghe],[]). s([em ,nghe, lá, rừng, kêu, không],[]).
s([rừng ,nghe, em, nghe],[]). s([em ,nghe, lá, thu, kêu, xào xạc],[]).
s([rừng ,nghe, thu, ],[]). s([em ,nghe, lá, thu, kêu, không],[]).
s([rừng ,kêu, em, nghe],[]). s([em ,kêu, rừng, rừng, nghe, xào xạc],[]).
s([rừng ,kêu, thu, ],[]). s([em ,kêu, rừng, rừng, nghe, không],[]).
s([thu ,nghe, rừng, kêu],[]). s([em ,kêu, rừng, rừng, kêu, xào xạc],[]).
s([lá ,nghe, thu, ],[]). s([rừng ,kêu, thu, lá, nghe, xào xạc],[]).
s([em ,nghe, rừng, em, kêu, xào xạc],[]). s([rừng ,kêu, thu, lá, kêu, xào xạc],[]).

III. Xây dựng văn phạm phân tích câu


File: [NLP]NguyenHoangNghia_11520603_Do_an_2.pl
Văn phạm xây dựng:
s --> np, vp. jjp --> jjpp, vp.
np --> nn. jjp --> jjpp, np.
np --> dt, np. jjpp --> jj.
np --> in, np. jjpp --> jj, jj.
np --> vb, np. vp --> rb, np.
np --> nn, np. vp --> vb, rb.
np --> nn, jjp. vp --> vb, np.
np --> nn, vp. vp --> vb.
jjp --> jjpp. nn --> [em].

14
BÁO CÁO ĐỒ ÁN XỬ LÝ NGÔN NGỮ TỰ NHIÊN GVHD: TS. NGUYỄN TUẤN ĐĂNG

nn --> [rừng]. vb --> [ngơ,ngác].


nn --> [lá]. vb --> [khô].
nn --> [nai]. jj --> [thu].
rb --> [không]. jj --> [vàng].
rb --> [xào,xạc]. jj --> [ngơ,ngác].
vb --> [kêu]. jj --> [khô].
vb --> [nghe]. dt --> [con].
vb --> [đạp]. in --> [trên].

15

Вам также может понравиться