Các thành phần chung khác

Một phần của tài liệu Hệ thống trả lời tự động tiếng việt cho công tác tuyển sinh báo cáo nghiên cứu khoa học giáo viên (Trang 56)

Định nghĩa các thành phần mà có thể tái sử dụng trong nhiều dạng câu hỏi của hệ thống. nganh_Truong(NG,TR)-->t_CuaORThuocORO,nganhNao(NG), t_TaiORCuaORThuocOROORTrong, truongChung(TR). truong_Nganh(TR,NG)-->t_TaiORCuaORThuocOROORTrong, truongChung(TR),t_CuaORThuocORO, nganhNao(NG). nganhCuaTruong(NG,TR)-->nganh_Truong(NG,TR); truong_Nganh(TR,NG). ...

3.2.2.11 Định nghĩa thành phần đại diện chung cho đối tƣợng nghi vấn

Có nhiều câu hỏi giống nhau hoàn toàn về cú pháp nhưng chỉ khác nhau về đối tượng nghi vấn. Việc định nghĩa thành phần này sẽ làm gọn nhẹ lại bộ cú pháp của văn phạm. truong_Nganh_WHERE(N,TR)-->truongNao(TR); nganhCuaTruong(N,TR). truong_Nganh_HDT_WHERE(N,TR,HDT)-->hdtVaTruong(HDT,TR); nganhCuaTruongHDT(N,TR,HDT). truong_Khoa_WHERE(K,TR)-->truongNao(TR); khoaCuaTruong(K,TR). truong_Khoa_HDT_WHERE(K,TR,HDT)-->hdtVaTruong(HDT,TR); khoaCuaTruongHDT(K,TR,HDT). truong_Khoa_Nganh_WHERE(X,TR)-->truongNao(TR); khoaCuaTruong(X,TR);nganhCuaTruong(X,TR). truong_Khoa_Nganh_HDT_WHERE(X,TR,HDT)--> hdtVaTruong(HDT,TR); khoaCuaTruongHDT(X,TR,HDT); nganhCuaTruongHDT(X,TR,HDT). khoa_Nganh_WHERE(X,TR)-->khoaCuaTruong(X,TR); nganhCuaTruong(X,TR). dn_NamKhoaTruongNganhHDT(Nam,X,TR,HDT)--> dn_NamTruongHDT(Nam,TR,HDT); dn_NamKhoaTruongHDT(Nam,X,TR,HDT); dn_NamNganhTruongHDT(Nam,X,TR,HDT).

3.3 Cú pháp các câu hỏi sử dụng trong hệ thống

Dựa trên tập các câu hỏi tiếng việt dùng để truy vấn thông tin tuyển sinh đã được xác định trước và hệ thống văn phạm của DCG, ta tiến hành lắp ghép các thành phần định nghĩa ở trên để tạo ra cú pháp của các câu hỏi.

Các câu hỏi mà hệ thống đề cập chủ yếu đến các chủ đề sau: - Các thông tin cơ bản về trường

- Thông tin về Trường – Khoa – Ngành.

- Thông tin về ngành mũi nhọn của Khoa và của Trường. - Điểm chuẩn của Ngành – Khoa – Trường.

- Chỉ tiêu tuyển sinh của Ngành – Khoa – Trường - Chuẩn đầu ra của Ngành – Khoa – Trường. - Thời gian đào tạo của Ngành – Khoa – Trường. - Thông tin về Khối – Ngành – Trường.

- Thông tin về chuyển ngành trong trường - Thông tin về tổ chức thi hay xét tuyển - Thông tin về bảo lưu

- Thông tin về học phí và miễn giảm học phí - Các thông tin về giảng viên của trường.

CHƢƠNG 4: XÂY DỰNG CHƢƠNG TRÌNH 4.1 Các thành phần trong hệ thống

Như đã phân tích ở chương 2. Trong hệ thống có 3 thành phần chính:

- Thành phần giao diện người dùng.

- Thành phần xử lý.

- Thành phần dữ liệu.

Hình 4.1 Các thành phần trong hệ thống

Trong thành phần xử lý bao gồm nhiều công đoạn con từ việc tiền xử lý câu hỏi đến việc nhận kết quả truy vấn CSDL và hiển thị lên thành phần giao diện. Việc xây dựng hệ thống chính là việc đi hoàn thiện từng thành phần trên. Chúng ta sẽ tìm hiểu kỹ việc xây dựng từng thành phần trong các mục tiếp theo.

4.2 Thành phần dữ liệu

Dữ liệu của hệ thống được xây dựng trên hệ quản trị cơ sở dữ liệu SQL Server 2008.

Từ các thông tin cần truy vấn tác giả tiến hành xây dựng mô hình lưu trữ dữ liệu sau: Thành phần giao diện Thành phần xử lý Thành phần dữ liệu

Trong mô hình dữ liệu trên có thể đáp ứng được việc lưu trữ để trả lời các thông tin về trường, khoa, ngành, điểm chuẩn, chuẩn đầu ra, khối thi, ...

4.3 Thành phần xử lý

Đây chính là thành phần quan trọng nhất của một hệ thống xử lý ngôn ngữ tự nhiên. Bao gồm các công đoạn sau:

- Tiền xử lý câu hỏi.

- Phân tích cú pháp của câu.

- Tổng hợp dữ liệu để truy vấn CSDL.

- Xử lý kết quả trả lời.

Hình 4.3 Mô hình quy trình xử lý công việc của hệ thống.

4.3.1 Tiền xử lý câu hỏi

Đây là công đoạn gọt dũa câu hỏi nhằm loại bỏ các ký tự thừa, loại bỏ các dấu câu không cần thiết và chuyển các ký tự trong câu về ký tự thường. (adsbygoogle = window.adsbygoogle || []).push({});

Mặt khác, các câu hỏi trong đề tài được mô tả cú pháp dựa trên văn phạm DCG sử dụng trong ngôn ngữ lập trình Prolog. Khi triển khai trong thực tế thì gặp vấn đề về mặt kỹ thuật, đó là gói công cụ cho phép tích hợp Prolog vào trong môi trường .NET hiện chưa hỗ trợ tiếng Việt. Do đó cần chuyển các từ

Xử lý kết quả trả lời Tiền xử lý Phân tích câu hỏi Tổng hợp dữ liệu

Câu hỏi Câu hỏi

“chuẩn”

Cây truy vấn

Kết quả truy vấn

tiếng Việt về dạng mã phù hợp có thể xử lý được trên các môi trường khác nhau.

4.3.1.1 Loại bỏ các ký tự thừa

Đầu vào là một câu hỏi do người dùng nhập, đầu ra là một câu hỏi gần “chuẩn” theo ngôn ngữ tự nhiên nhất. Các ký tự thừa ở đây là những ký tự không phải là ký tự chữ cái và ký tự số.

Công việc được mô tả cụ thể như sau: Đầu vào:

 Chuỗi strCH chứa nội dung của câu hỏi.

 Mảng arrKT chứa các ký tự là chữ cái và ký tự số.

Đầu ra: Chuỗi strKQ chứa nội dung câu hỏi sau khi được loại bỏ các ký tự thừa.

 Lưu đồ mô tả chi tiết công việc được trình bày trong phụ lục 3.

4.3.1.2 Chuyển mã tiếng việt

Mục tiêu là chuyển mã tiếng Việt có dấu unicode về dạng không dấu mà vẫn đảm bảo khi chuyển ngược lại thì dấu tiếng Việt vẫn được bảo toàn. Để thực hiện, ý tưởng của tác giả đề xuất là:“mã hóa” ký tự tiếng việt có dấu thành ký tự không dấu có kèm thêm mã xác định dấu của từ đó. Có hai phương án lựa chọn là chuyển về dạng mã của kiểu gõ Telex hoặc kiểu gõ VNI.

Qua quá trình phân tích và lựa chọn, tác giả chọn cách chuyển về dạng mã của kiểu gõ VNI. Để thực hiện, tác giả sẽ khai báo 2 tập ký tự: KTUnicode

dùng để chứa các ký tự tiếng Việt có dấu, KTVNI chứa các ký tự tương ứng trong KTUnicode nhưng ở dạng không dấu và kèm theo “số xác định dấu”. Cụ thể như sau:

String[] KTUnicode = { "đ", "â", "ă", "ê", "ô", "ơ", "ư", "á", "à", "ả", "ã", "ạ", "ấ", "ầ", "ẩ", "ẫ", "ậ", "ắ", "ằ", "ẳ", "ẵ", "ặ", "é", "è", "ẻ", "ẽ", "ẹ", "ế", "ề", "ể", "ễ", "ệ", "í", "ì", "ỉ", "ĩ", "ị", "ó", "ò", "ỏ", "õ", "ọ", "ố", "ồ", "ổ", "ỗ", "ộ", "ớ", "ờ", "ở", "ỡ", "ợ", "ú", "ù", "ủ", "ũ", "ụ", "ứ", "ừ", "ử", "ữ", "ự", "ý", "ỳ", "ỷ", "ỹ", "ỵ" };

String[] KTVNI = { "d9", "a6", "a8", "e6", "o6", "o7", "u7", "a1", "a2", "a3", "a4", "a5", "a61", "a62", "a63", "a64", "a65", "a81", "a82", "a83", "a84", "a85", "e1", "e2", "e3", "e4", "e5", "e61", "e62", "e63", "e64", "e65", "i1", "i2", "i3", "i4", "i5", "o1", "o2", "o3", "o4", "o5", "o61", "o62", "o63", "o64", "o65", "o71", "o72", "o73", "o74", "o75", "u1", "u2", "u3", "u4", "u5", "u71", "u72", "u73", "u74", "u75", "y1", "y2", "y3", "y4", "y5" };

Cách chuyển các ký tự có dấu tiếng Việt sang dạng mã của kiểu gõ VNI được mô tả như sau:

- Đầu vào là câu hỏi strCH là kết quả ở bước loại bỏ các ký tự thừa và được chuyển về các ký tự thường. KTUnicode là tập bảng mã các ký tự tiếng Việt có dấu, KTVNI là tập các ký tự tương ứng trong KTUnicode được chuyển sang dạng mã VNI.

- Đầu ra là câu hỏi strKQ đã chuyển mã các ký tự có dấu tiếng Việt thành dạng mã của kiểu gõ VNI.

 Lưu đồ mô tả chi tiết công việc được trình bày trong phụ lục 3 Ví dụ với câu hỏi “Trường Đại học Lạc Hồng có bao nhiêu ngành” ta sẽ thu có được câu hỏi sau: “tru7o72ng d9a5i ho5c la5c ho62ng co1 bao nhie6u nga2nh”.

Cách chuyển ngược lại các ký tự ở dạng mã của kiểu gõ VNI về các ký tự có dấu tiếng việt Unicode được mô tả như sau:

- Đầu vào là câu hỏi strCH là ở dạng mã kiểu gõ VNI, KTUnicode là tập bảng mã các ký tự tiếng Việt có dấu, KTVNI là tập các ký tự tương ứng trong KTUnicode được chuyển sang dạng mã VNI.

- Đầu ra là câu hỏi strKQ đã chuyển mã các ký tự ở dạng mã kiểu gõ VNI về các ký tự có dấu tiếng Việt Unicode.

 Lưu đồ mô tả chi tiết công việc được trình bày trong phụ lục 3.

4.3.2 Phân tích cú pháp câu hỏi

Ở công đoạn này công việc được giao lại cho trình biên dịch của Prolog thực hiện. Sau khi trình biên dịch của Prolog thực hiện xong, sẽ có ba trường hợp xảy ra: (adsbygoogle = window.adsbygoogle || []).push({});

- Phân tích cú pháp thành công và trả về cây truy vấn. Kết thúc công đoạn này.

- Phân tích cú pháp không thành công, Khi đó sẽ quay lại để tiếp tục so khớp tìm ra câu hỏi có cấu trúc gần với câu hỏi ban đầu.

- Sau khi tiếp tục so khớp để tìm ra cấu trúc gần đúng mà vẫn không có kết quả. Khi đó sẽ trả về giá trị FALSE và kết thúc công đoạn này.

Đầu vào: Bao gồm các phần sau

- Tập cú pháp các câu hỏi đã được định nghĩa bằng văn phạm DCG.

- Câu hỏi đã được tiền xử lý loại bỏ những ký tự thừa và chuyển mã các ký tự có dấu tiếng Việt.

Đầu ra: là một trong các trường hợp sau

- Cây truy vấn dưới dạng chuỗi nếu phân tích thành công.

- Tập các câu hỏi có cấu trúc gần với câu hỏi ban đầu.

- FALSE nếu không phân tích được và không tìm được cấu trúc gần đúng với câu hỏi ban đầu.

4.3.4 Tổng hợp dữ liệu để tiến hành truy vấn CSDL

Việc tổng hợp dữ liệu phụ thuộc vào cây truy vấn thu được ở bước trên. Ví dụ với câu hỏi:

Điểm chuẩn của ngành Công nghệ Thông tin trường Đại học Lạc Hồng là bao nhiêu

Qua công đoạn tiền xử lý ta thu được:

d9ie63m, chua63n, cu3a, nga2nh, co6ng, nghe65, tho6ng, tin, tru7o72ng, d9a5i, ho5c, la5c, ho62ng, la2, bao, nhie6u” Qua công đoạn phân tích cú pháp câu hỏi ta thu được cây truy vấn sau:

diemChuan ( where(nganh(ten(co6ng,ten(nghe65,ten(tho6ng,tin)))))), where(truong(ten(d9a5i,ten(ho5c,ten(la5c,ho62ng)))))), where(hedaotao(hedaotaoMD)), where(nam(namMD)), select(diemChuan) )

Do câu hỏi trên người dùng nhập thiếu hai thành phần xác định là hệ đào tạo và năm. Do đó bộ phân tích cú pháp câu hỏi sẽ tự gán các giá trị trên về mặc định. Câu hỏi đúng trong trường hợp này phải là: “điểm chuẩn năm yyyy ở bậc đại học của ngành công nghệ thông tin của trường đại học lạc hồng là bao nhiêu”.

Với cây truy vấn ở dạng chuỗi trên ta có thể chuyển về dạng cấu trúc cây như sau:

Hình 4.6 Cây truy vấn của câu hỏi “Điểm chuẩn của ngành Công nghệ Thông tin trường Đại học Lạc Hồng là bao nhiêu”.

Nhận xét ở cây truy vấn trên ta thấy nút gốc 4 nút con WHERE và một nút con SELECT. Các nút con của WHERE chính là các giá trị dùng để làm điều kiện lọc, và các nút con của SELECT chính là các giá trị cần hiển thị.

Các công việc cần làm để phát sinh câu SQL dựa trên cây truy vấn là:

- Tổng hợp các nút lá lại trên mỗi nút WHERE để có được các mệnh đề con của mệnh đề WHERE trong câu truy vấn SQL.

- Phát sinh câu truy vấn dựa trên nút WHERE và SELECT.

4.3.4.1 Tổng hợp các nút lá lại trên mỗi nút WHERE

Để thực hiện tổng hợp dữ liệu trên các nút lá con của mỗi nút WHERE, tác giả có 2 phương án để thực hiện:

where namMD nam diemchuan where where nganh ten tin hedaotaoMD hedaotao ten công ten nghệ thông where truong ten hồng ten đại ten học lạc select diemChuan

- Phương án thứ nhất: Khai báo một cấu trúc dữ liệu để biểu diễn cấu trúc nút và cấu trúc cây. Sau đó tiến hành duyệt qua từng nút con của nút gốc và tổng hợp dữ liệu ở các nút lá lại.

- Phương án thứ hai: Sử dụng cây cú pháp dạng chuỗi và tiến hành sử dụng các phép toán trên chuỗi để phân tích và thu được dữ liệu cần thiết.

Tác giả lựa chọn phương án thứ hai vì nó dễ xử lý hơn và không đòi khỏi khai báo thêm cấu trúc dữ liệu nút và cấu trúc dữ liệu cây.

Với cây cú pháp dạng chuỗi sau: diemChuan( where(nganh(ten(co6ng,ten(nghe65,ten(tho6ng,tin)))))), where(truong(ten(d9a5i,ten(ho5c,ten(la5c,ho62ng)))))), where(hedaotao(hedaotaoMD)), where(nam(namMD)), select(diemChuan)) (adsbygoogle = window.adsbygoogle || []).push({});

Các bước tổng hợp dữ liệu các nút lá của nút WHERE như sau:

- Tiến hành thay thế chuỗi “ten(” bằng một chuỗi rỗng ta được chuỗi sau: diemChuan ( where(nganh(co6ng,nghe65,tho6ng,tin)))))), where(truong(d9a5i,ho5c,la5c,ho62ng)))))), where(hedaotao(hedaotaoMD)), where(nam(namMD)), select(diemChuan) )

- Bước tiếp theo là tách chuỗi theo khóa “where(” và khóa “select(”. Ta được các chuỗi con sau:

o “diemChuan (” o “nganh(co6ng,nghe65,tho6ng,tin)))))),” o “truong(d9a5i,ho5c,la5c,ho62ng)))))),” o “hedaotao(hedaotaoMD)),” o “nam(namMD)),” o “diemChuan))”

- Bước tiếp theo: Bỏ qua chuỗi đầu tiên, duyệt qua từng chuỗi, tiến hành thay thế “(” thành dấu “=”, xóa bỏ các ký tự “,” và “)” ở cuối mỗi chuỗi. Ta được các chuỗi con sau:

o nganh=co6ng,nghe65,tho6ng,tin

o truong=d9a5i,ho5c,la5c,ho62ng

o hedaotao=hedaotaoMD

o nam=namMD

o diemchuan

- Bước tiếp theo: Duyệt qua các chuỗi, thay thế dấu “,” bằng một khoảng trắng. Và tiến hành phục hồi dấu tiếng việt ta được các chuỗi con sau:

o nganh=công nghệ thông tin

o truong=đại học lạc hồng

o hedaotao=hedaotaoMD

o nam=namMD

4.3.4.2 Phát sinh câu truy vấn SQL

- Trước hết trong CSDL ta phải định nghĩa các thành phần sau:

o Định nghĩa các giá trị dùng để thay thế cho các giá trị mặc định thu được từ cây truy vấn.

o Định nghĩa mối quan hệ giữa các table với nhau và các table kết nối với nhau thông qua những khóa nào.

- Truy vấn CSDL để thay thế các giá trị mặc định trong câu truy vấn. Duyệt qua các chuỗi trên và tiến hành thay thế các giá trị mặc định ta được:

o nganh=công nghệ thông tin

o truong=đại học lạc hồng

o hedaotao=đại học

o nam=getdate()

o diemchuan

- Dựa vào các chuỗi con trên và các mối quan hệ giữa các table ta sẽ phát sinh được câu truy vấn như sau:

select diemchuan

from tblnganh ng

inner join tblKhoa kh

on ng.KhoaID=kh.KhoaID inner join tblTruong tr (adsbygoogle = window.adsbygoogle || []).push({});

on kh.TruongID=tr.TruongID inner join tblNamTuyenSinh nts

on ng.NganhID=nts.NganhID inner join tblHeDaoTao hdt

on nts.HeDaoTaoID=hdt.HeDaoTaoID

where tr.TenTruong=N’đại học lạc hồng’

and ng.TenNganh=N’công nghệ thông tin’ and nts.Nam=getdate()

and hdt.TenHeDaoTao=N’đại học’

Việc gọi thực thi câu lệnh SQL chỉ đơn thuần về mặt kỹ thuật, phụ thuộc vào hệ quản trị CSDL và ngôn ngữ lập trình mà hệ thống sử dụng nên tác giả không trình bày chi tiết ở đây.

4.3.5 Xử lý kết quả trả lời

Đây là bước cuối cùng của hệ thống hỏi đáp. Tùy thuộc vào kết quả ở các bước trên mà hệ thống sẽ đưa ra câu trả lời tương ứng. Kết quả nhận được là 1 trong 4 trường hợp sau:

- Có câu lệnh SQL và câu lệnh trả về giá trị.

- Có câu lệnh SQL và câu lệnh không trả về giá trị.

- Chỉ tìm được cấu trúc gần đúng.

4.3.5.1 Câu lệnh SQL trả về giá trị

Tùy thuộc vào câu truy vấn mà cấu trúc dữ liệu câu trả lời nhận được có thể khác nhau. Việc xử lý kết quả để đưa ra câu trả lời sẽ phải căn cứ vào cấu trúc dữ liệu câu trả lời và số lượng dòng dữ liệu nhận được. Ví dụ như với câu truy vấn:

Trường Đại học Lạc Hồng có bao nhiêu ngành”. Kết quả trả về là một danh sách các ngành.

Nhưng với câu hỏi dạng “có/không” hoặc “đúng/sai”:

Trường Đại học Lạc Hồng có ngành công nghệ thông tin không”. Thì câu trả lời chỉ là một câu khẳng định “có” hoặc “không”.

Do hệ thống được xây dựng trên Web nên việc hiển thị dữ liệu được thông qua các thẻ HTML. Trong trường hợp kết quả trả về một danh sách sẽ được hiển

Một phần của tài liệu Hệ thống trả lời tự động tiếng việt cho công tác tuyển sinh báo cáo nghiên cứu khoa học giáo viên (Trang 56)