Quy trình thực hiện

Một phần của tài liệu Luận văn thạc sĩ công nghệ thông tin Nghiên cứu cơ sở dữ liệu suy diễn và ứng dụng (Trang 73 - 87)

4.5.1. Đặt vấn đề.

Cho 4 câu sau:

1. Tác giả X viết sách Ỵ

2. Sách Y đƣợc viết bởi tác giả X. 3. Tác giả X viết sách Y vào năm Z.

4. NXP P phát hành sách Y của tác giả X vào năm Z.

Với 4 câu trên thì ta có thể suy ra đƣợc các dạng câu hỏi tƣơng ứng nhƣ sau: 1.1 Tác giả nào viết sách X ?

1.2 Tác giả X viết sách nàỏ

2.1 Sách nào đƣợc viết bởi tác giả X ? 2.2 Sách X đƣợc viết bởi tác giả nào ? 3.1 Tác giả nào viết sách X vào năm Y ? 3.2 Tác giả X viết sách nào vào năm Y ? 3.3 Tác giả X viết sách Y vào năm nào ?

4.1 NXB nào phát hành sách X của tác giả Y vào năm Z ? 4.2 NXB X phát hành sách nào của tác giả Y vào năm Z ? 4.3 NXB X phát hành sách Y của tác giả nào vào năm Z ? 4.4 NXB X phát hành sách Y của tác giả Z vào năm nào ?

4.5.2. Quy trình thực hiện.

Bƣớc 1: Xây dựng văn phạm cho từng dạng câu hỏị

 Dạng câu hỏi 1.1: Tác giả nào viết sách X?

sentence(s(NP,VP)) --> np(NP), vp(VP). vp(vp(V,NP)) --> verb(V), np2(NP). verb(verb(viet)) -->[viet].

np(np(N,PN)) --> n(N),wh(PN). n(n('tac giá)) -->[tac,gia]. wh(wh(nao)) -->[nao].

np2(np2(N,PN)) --> n2(N),pron(PN). n2(n2(sach)) -->[sach].

pron(pron([H|T])) --> [H|T].  Dạng câu hỏi 1.2: Tác giả X viết sách nàỏ

sentence(s(NP,VP)) --> np(NP), vp(VP). vp(vp(V,NP)) --> verb(V), np2(NP). verb(verb(viet)) -->[viet].

np(np(N,PN)) --> n(N),pron(PN). n(n('tac giá)) -->[tac,gia].

pron(pron([H|T])) --> [H|T].

np2(np2(N,PN)) --> n2(N),wh(PN). n2(n2(sach)) -->[sach].

wh(wh(nao)) -->[nao].

 Dạng câu hỏi 2.1: Sách nào đƣợc viết bởi tác giả X?

sentence(s(NP,VP)) --> np(NP), vp(VP). vp(vp(V,NP)) --> pass_verb(V), np2(NP).

pass_verb(pass_verb('duoc viet boí)) -->[duoc,viet,boi]. np(np(N,PN)) --> n(N),wh(PN).

n(n(sach)) -->[sach]. wh(wh(nao)) -->[nao].

np2(np2(N,PN)) --> n2(N),pron(PN). n2(n2('tac giá)) -->[tac,gia].

pron(pron([H|T])) --> [H|T].

 Dạng câu hỏi 2.2: Sách X đƣợc viết bởi tác giả nàỏ

sentence(s(NP,VP)) --> np(NP), vp(VP). vp(vp(V,NP)) --> pass_verb(V), np2(NP).

pass_verb(pass_verb('duoc viet boí)) -->[duoc,viet,boi]. np(np(N,PN)) --> n(N),pron(PN).

n(n(sach)) -->[sach].

pron(pron([H|T])) --> [H|T].

np2(np2(N,PN)) --> n2(N),wh(PN). n2(n2('tac giá)) -->[tac,gia].

wh(wh(nao)) -->[nao].

 Dạng câu hỏi 3.1: Tác giả nào viết sách X vào năm Ỷ

sentence(s(NP,VP,ADV)) --> np(NP), vp(VP),adv(ADV). vp(vp(V,NP)) --> verb(V), np2(NP).

verb(verb(viet)) -->[viet].

np(np(N,PN)) --> n_tacgiăN),wh(PN). n_tacgiăn_tacgiắtac giá)) -->[tac,gia]. wh(wh(nao)) -->[nao]. np2(np2(N,PN)) --> n_sach(N),pron(PN). n_sach(n_sach(sach)) -->[sach]. pron(pron([H1|T1])) --> [H1|T1]. adv(adv(Prep,Time)) --> prep(Prep),time(Time). prep(prep(vao)) --> [vao]. time(time(N,Number)) --> n_year(N),number(Number).

n_year(n_year(nam)) --> [nam].

number(number([H2|T2])) --> [H2|T2].  Dạng câu hỏi 3.2: Tác giả X viết sách nào vào năm Ỷ

sentence(s(NP,VP,ADV)) --> np(NP), vp(VP),adv(ADV). vp(vp(V,NP)) --> verb(V), np2(NP).

verb(verb(viet)) -->[viet].

np(np(N,PN)) --> n_tacgiăN),pron(PN). n_tacgiăn_tacgiắtac giá)) -->[tac,gia]. pron(pron([H1|T1])) --> [H1|T1]. np2(np2(N,PN)) --> n_sach(N),wh(PN). n_sach(n_sach(sach)) -->[sach]. wh(wh(nao)) -->[nao]. adv(adv(Prep,Time)) --> prep(Prep),time(Time). prep(prep(vao)) --> [vao]. time(time(N,Number)) --> n_year(N),number(Number). n_year(n_year(nam)) --> [nam]. number(number([H2|T2])) --> [H2|T2].  Dạng câu hỏi 3.3: Tác giả X viết sách Y vào năm nàỏ

sentence(s(NP,VP,ADV)) --> np(NP), vp(VP),adv(ADV). vp(vp(V,NP)) --> verb(V), np2(NP).

verb(verb(viet)) -->[viet].

np(np(N,PN)) --> n_tacgiăN),pron(PN). n_tacgiăn_tacgiắtac giá)) -->[tac,gia]. pron(pron([H1|T1])) --> [H1|T1].

np2(np2(N,PN)) --> n_sach(N),pron(PN). n_sach(n_sach(sach)) -->[sach].

pron(pron([H2|T2])) --> [H2|T2].

prep(prep(vao)) --> [vao].

time(time(N,Num)) --> n_year(N),wh(Num). n_year(n_year(nam)) --> [nam].

wh(wh(nao)) -->[nao].

 Dạng câu hỏi 4.1: NXB nào phát hành sách X của tác giả Y vào năm Z?

sentence(s(NP,VP,ADV)) --> np1(NP),vp(VP),adv(ADV). vp(vp(V,NP,PP)) --> verb(V),np2(NP),pp(PP).

verb(verb('phat hanh')) --> [phat,hanh]. np1(np1(N,PN)) --> n_nxb(N),wh(PN). n_nxb(n_nxb(nxb))--> [nxb]. wh(wh(nao)) --> [nao]. np2(np2(N,PN)) --> n_sach(N),pron_sach(PN). n_sach(n_sach(sach)) -->[sach]. pron_sach(pron_sach([H|T])) --> [H|T]. pp(pp(Prep,NP)) --> prep_tg(Prep),np3(NP). prep_tg(prep_tg(cua)) --> [cua]. np3(np3(N,PN)) --> n_tacgiăN),pron_tacgiăPN). n_tacgiăn_tacgiắtac giá)) --> [tac,gia].

pron_tacgiăpron_tacgiă[H|T])) --> [H|T]. adv(adv(Prep,Time)) --> prep(Prep),time(Time). prep(prep(vao)) --> [vao]. time(time(N,Number)) --> n_year(N),number(Number). n_year(n_year(nam)) --> [nam]. number(number([H2|T2])) --> [H2|T2].

 Dạng câu hỏi 4.2:NXB X phát hành sách nào của tác giả Y vào năm Z?

sentence(s(NP,VP,ADV)) --> np1(NP),vp(VP),adv(ADV). vp(vp(V,NP,PP)) --> verb(V),np2(NP),pp(PP).

np1(np1(N,PN)) --> n_nxb(N),pron_nxb(PN). n_nxb(n_nxb(nxb))--> [nxb]. pron_nxb(pron_nxb([H|T])) --> [H|T]. np2(np2(N,PN)) --> n_sach(N),wh(PN). n_sach(n_sach(sach)) -->[sach]. wh(wh(nao)) --> [nao]. pp(pp(Prep,NP)) --> prep_tg(Prep),np3(NP). prep_tg(prep_tg(cua)) --> [cua]. np3(np3(N,PN)) --> n_tacgiăN),pron_tacgiăPN). n_tacgiăn_tacgiắtac giá)) --> [tac,gia].

pron_tacgiăpron_tacgiă[H|T])) --> [H|T]. adv(adv(Prep,Time)) --> prep(Prep),time(Time). prep(prep(vao)) --> [vao]. time(time(N,Number)) --> n_year(N),number(Number). n_year(n_year(nam)) --> [nam]. number(number([H2|T2])) --> [H2|T2].

 Dạng câu hỏi 4.3: NXB X phát hành sách Y của tác giả nào vào năm Z?

sentence(s(NP,VP,ADV)) --> np1(NP),vp(VP),adv(ADV). vp(vp(V,NP,PP)) --> verb(V),np2(NP),pp(PP).

verb(verb('phat hanh')) --> [phat,hanh]. np1(np1(N,PN)) --> n_nxb(N),pron_nxb(PN). n_nxb(n_nxb(nxb))--> [nxb]. pron_nxb(pron_nxb([H|T])) --> [H|T]. np2(np2(N,PN)) --> n_sach(N),pron_sach(PN). n_sach(n_sach(sach)) -->[sach]. pron_sach(pron_sach([H|T])) --> [H|T]. pp(pp(Prep,NP)) --> prep_tg(Prep),np3(NP). prep_tg(prep_tg(cua)) --> [cua].

np3(np3(N,PN)) --> n_tacgiăN),wh(PN). n_tacgiăn_tacgiắtac giá)) --> [tac,gia]. wh(wh(nao)) --> [nao]. adv(adv(Prep,Time)) --> prep(Prep),time(Time). prep(prep(vao)) --> [vao]. time(time(N,Number)) --> n_year(N),number(Number). n_year(n_year(nam)) --> [nam]. number(number([H2|T2])) --> [H2|T2].

 Dạng câu hỏi 4.4: NXB X phát hành sách Y của tác giả Z vào năm nàỏ

sentence(s(NP,VP,ADV)) --> np1(NP),vp(VP),adv(ADV). vp(vp(V,NP,PP)) --> verb(V),np2(NP),pp(PP).

verb(verb('phat hanh')) --> [phat,hanh]. np1(np1(N,PN)) --> n_nxb(N),pron_nxb(PN). n_nxb(n_nxb(nxb))--> [nxb]. pron_nxb(pron_nxb([H|T])) --> [H|T]. np2(np2(N,PN)) --> n_sach(N),pron_sach(PN). n_sach(n_sach(sach)) -->[sach]. pron_sach(pron_sach([H|T])) --> [H|T]. pp(pp(Prep,NP)) --> prep_tg(Prep),np3(NP). prep_tg(prep_tg(cua)) --> [cua]. np3(np3(N,PN)) --> n_tacgiăN),pron_tacgiăPN). n_tacgiăn_tacgiắtac giá)) --> [tac,gia].

pron_tacgiăpron_tacgiă[H|T])) --> [H|T]. adv(adv(Prep,Time)) --> prep(Prep),time(Time). prep(prep(vao)) --> [vao]. time(time(N,Num)) --> n_year(N),wh(Num). n_year(n_year(nam)) --> [nam]. wh(wh(nao)) --> [nao].

Bƣớc 2: Kết hợp với Prolog để tạo cấu trúc cho các câu hỏi dƣới dạng cây suy diễn để xử lý (dựa vào văn phạm đã đƣợc xây dựng ở trên).

Ví dụ: Tác giả nào viết sách Tin học đại cƣơng vào năm 2000?

Parse thành cây c pháp nhƣ sau:

s(np(n_tacgiătacgia),wh(nao)),vp(verb(viet),np2(n_sach(sach),pron([tin,hoc,dai, cuong]))),adv(prep(vao),time(n_year(nam),number([2000])))).

Bƣớc 3:Xác định đối tƣợng để hỏi của câu là gì và những giả thiết đã biết liên qua tới đối tƣợng đƣợc hỏi đó.

Tiếp tục ví dụ trên:

 Đầu tiên ta xác định từ truy vấn “nào” nằm ở vị trí nào trên câỵ Dựa vào câu:

s(np(n_tacgiătacgia),wh(nao)),vp(verb(viet),np2(n_sach(sach),pron([tin,h

oc,dai,cuong]))),adv(prep(vao),time(n_year(nam),number([2000])))).  Ta thấy từ “nào” nằm trong “wh(nao)” và đồng thời “wh(nao)” nằm trong

np(n_tacgiătacgia),wh(nao)), ta xác định đƣợc np chứa nó.

 Tiếp đến, muốn biết đối tƣợng để hỏi là gì thì ta dựa vào đối tƣợng n(noun) nằm trong np vừa xác định ở trên.

 Ở đây, n là n_tacgia (tacgia) nên đối tƣợng cần hỏi là tác giả.

 Sau đó, dựa vào các đối tƣợng còn lại (trừ VP) để xác định giả thiết.

 Ở đây giả thiết (đối tƣợng đã biết)là :

Sách: Tin học đại cương(np2(n_sach(sach), pron([tin,hoc,dai,cuong])))

Năm: 2000 (adv(prep(vao),time(n_year(nam),number([2000])))) Bƣớc 4: Xây dựng CSDL.

 CSDL gồm những thông tin về sách nhƣ: Tên sách, tác giả, nhà xuất bản, năm phát hành.

 Vì đây chỉ là một ứng dụng nhỏ cho nên CSDL chỉ đƣợc tổ chức lƣu trên 1 bảng dạng nhƣ sau:

Bảng 4.1: Bảng dữ liệu mẫụ

Sách Tác giả NXB Năm

KINH TE HOC VI MO DAVID BEGG THONG KE 2012

NGAN HANG DAU TU MAC QUANG HUY TRE 2012

KE TOAN TAI CHINH TRAN XUAN NAM TRE 2003

GIAO TRINH C# NGUYEN HAI LINH THOI DAI 2005

LAP TRINH VISUAL BASIC 6.0 NGUYEN CHI HIEU THOI DAI 2001

KINH TE HOC PHAT TRIEN NGUYEN THANH HAI TRE 2003

CACH LAM GIAU NHANH NHAT TRAN XUAN NAM THONG KE 2003

THI TRUONG CHUNG KHOAN NGUYEN CONG NGHI THONG KE 2002

1001 CHIEU THUC TIEP THI NGUYEN HANH THOI DAI 2008

KINH TE NGAY NAY TRAN BINH TRE 2010

GIAO TRINH C# NGUYEN HAI LINH TRE 2004

KY THUAT WORD 2010 NGUYEN HAI LINH THONG KE 2011

NHAP MON TIN HOC NGUYEN HANH THONG KE 2014

PHIM TAT TRONG WORD HAI NAM THOI DAI 2001

THU THUAT EXCEL TRAN NAM HAI TRE 2003

Bƣớc 5: Thực hiện truy vấn và cho ra kết quả cần tìm.

Sau khi đã có đƣợc giả thiết (đối tƣợng đã biết) và kết luận (đối tƣợng chƣa biết) thì ta tiến hành truy vấn dựa trên CSDL đã đƣợc xây dựng ở trên.

4.5.3. Thực hiện chƣơng trình.

Bƣớc 1:Khởi động chƣơng trình:Giao diện chƣơng trình nhƣ sau:

Hình 4.2: Giao diện chính khi chạy chương trình.

Bƣớc 2: Nạp dữ liệu: Hệ thống Nạp dữ liệụ

Hình 4.4:Lựa chọn dữ liệu cho chương trình.

Bƣớc 3: Lựa chọn tìm kiếm theo các chủ đề:

- Tìm kiếm thông tin về sách - Tìm kiếm thông tin về tác giả

- Tìm kiếm thông tin về Nhà Xuất Bản

Hình 4.6:Giao diện lựa chọn tìm kiếm theo chủ đề. Bƣớc 4:

- Chọn câu hỏi từ menu sổ xuống. - Nhập biến tìm kiếm.

- Nhấp chọn nút Tìm kiếm để xem kết quả.

CHƢƠNG 5: KẾT LUẬN VÀ HƢỚNG PHÁT TRIỂN.

Trong đề tài này chúng tôi đã giới thiệu một cách tƣơng đối đầy đủ về C S D L suy diễn, về khả năng biểu diễn CSDL thông qua ngôn ngữ logic; đồng thời giới thiệu một ngôn ngữ lập trình tƣơng thích để biểu diễn cơ sở tri thức bằng logic mô tả, đó là ngôn ngữ Prolog (tiền thân của ngôn ngữ Datalog). Đề tài đã trình bày khả năng ứng dụng logic trong biểu diễn mô hình CSDL suy diễn. Đề tài cũng thảo luận về khả năng thực hiện truy vấn thông qua cách thức biểu diễn của ngôn ngữ Datalog, biến đổi các luật của Datalog thành các mô tả khái niệm trong logic mô tả.

Với khả năng biểu diễn, truy vấn bằng logic mô tả ta có thể suy rộng ra rằng, CSDL có thể đƣợc biến đổi thành cơ sở tri thức, với ngữ nghĩa truy vấn phong phú hơn.

Tuy nhiên, ngoài những công việc đã làm đƣợc, trong đề tài này mới mang tính lý thuyết. Chúng tôi chỉ mới xây dựng đƣợc chƣơng trình DEMO đơn giản, nên chắc chắn chƣa hoàn toàn thuyết phục. Vì vậy, kế hoạch công việc trong tƣơng lai để hoàn thành hơn sẽ là đi sâu, ứng dụng một trong những ngôn ngữ suy diễn (chẳng hạn Prolog, Datalog, Racer...) để xây dựng đƣợc một chƣơng trình ứng dụng thực tế với quy mô lớn hơn, hoàn thiện hơn.

Ở nƣớc ta cũng nhƣ trên thế giới việc nghiên cứu về CSDL suy diễn rất ít, do vậy nguồn tài liệu nghiên cứu về đề tài cũng rất hạn chế. Do đó đề tài chắc chắn còn nhiều những hạn chế, chúng tôi rất mong các thầy, các cô và các bạn đồng nghiệp đóng góp ý kiến để đề tài đƣợc hoàn thiện hơn.

TÀI LIỆU THAM KHẢO

Tiếng Việt.

[1]Ths. Đinh Nguyễn Anh Dũng, “Biểu diễn tri thức”(2001). NXB Thống Kê.

[2]TS. Phan Huy Khánh, “Lập trình logic trong Prolog”(2004), NXB Đại học quốc gia Hà Nộị

[3]Vũ Đức Thi, ”Cơ sở dữ liệu”, NXB Thống kê, 2004. [4]Đỗ Trung Tuấn, “Hệchuyêngia”, Nxb. Giáo dục, 1998

[5]Đỗ Trung Tuấn, “Trítuệnhântạo”, Nxb. Đại học Quốc gia Hà Nội, 2010

[6]Lê Mạnh Thạnh, Trƣơng Công Tuấn (2002), “Tối ưu câu truy vấn trên chương

trình Datalog”, Báo cáo Hội nghị Toán học toàn quốc lần VI tại Huế.

[7]Biên dịch: Trần Đức Quang (1999), Nguyên lý các hệ Cơ sở dữ liệu và Cơ Lê Mạnh Thạnh, Trƣơng Công Tuấn (2003), “Tối ưu hóa câu truy vấn trong cơ sở

dữ liệu suy diễn bằng phép biến đổi ma tập”, Tạp chí Tin học và Điều khiển

học.

Tiếng Anh.

[8]Apt K. R., “Logic Programming” (1990), Elsevier Science Publishers, pp. 135- 144.

[9]Arni, F., Ong, K., Tsur, S., Wang, H., and Zaniolo, “The deductive database system LDL++”. TPLP 3, 1 (2003), 61–94.

[10] Ceri S. , Gottlob G., Tanca L, ”Logic Programming and Databases” (1990), Springer-Verlag Berlin Heidelberg Publishers, pp.54-63.

[11] Clark K. L, “Negation as failure in Logic and Databases”(1978), H. Gallaire and J. Minker, editors, Plenum Press, New York, pp. 293-322.

[12] H Ait-Kaci and R Nasr, "LOGIN: A Logic Programming Language with Built-in Inheritance"(1986). Journal of Logic Programming, pp. 187-215.

[13] LTF Ganut, "Introduction to Logic"(1991). The University of Chicago Press, pp. 178-193.

[14] In J. Minker, editor, “Foundation of Deductive Databases and Logic Programming” (1972), Morgan Kaufmann, Publishers, pp. 126-144.

[15] J Ullman, "Database and Knowledge Base Systems"(1988), Computer Press, pp. 171-178.

[16] S Tsur and C Zaniolo, "LDL: A Logic Based Data Language"(1986). Proc. of the 12th Int. Conf. on Very Large Database, Tokyo, pp. 203-214.

WEBSITE THAM KHẢO

[17] http:// en.wikipediạorg/wiki/Deductive_database(22/02/2013) [18] http://wikịvisualprolog.com/index.php?title=New_Features_in_Visual_Prol og_7.4#IDẸ(27/02/2013) [19] http://www.cs.sunysb.edu/~warren/xsbbook/node12.html.(01/03/2013) [20] http://docs.racket-lang.org/datalog.(11/03/2013) [21] www.cs.uclạedu/~zaniolo/papers.(15/03/2013) [22] http://tainguyensọvnụedụvn/xmlui/handle/123456789/10492(17/03/2013) [23] http://123doc.vn/collection/1043-csdl.htm .(20/03/2013) [24] http://tailieutonghop.com/free/logic-mo-ta-va-ung-dung-trong-co-so-du- lieu_f254-7649.html(22/03/2013) [25] http://csẹunl.edu/~riedesel/pub/cse413/des/doc/manualDES.pdf

Một phần của tài liệu Luận văn thạc sĩ công nghệ thông tin Nghiên cứu cơ sở dữ liệu suy diễn và ứng dụng (Trang 73 - 87)

Tải bản đầy đủ (PDF)

(87 trang)