STT Tên thiết bị Chỉ số
1 CPU Intel Core i5 3340
2 Ram 2 GB 3 Bộ nhớ ngoài >100 GB 4 Hệ điều hành Win7 4.1.2 Về công cụ phần mềm Số TT Tên phần mềm Nguồn 1 Gate 8.0 https://gate.ac.uk/download/
2 Mamp pro3.1.0 https://www.mamp.info/en/downloads/
4.2 Xây dựng các luật trong Gate
Để tìm đƣợc các thực thể ta xây dựng các luật bằng văn phạm JAPE để đƣa ra các mẫu đối sánh dò tìm và nhận biết các thực thể nhƣ: tên sự kiện, thời gian(giờ, phút, ngày tháng năm), địa chỉ diễn ra hội thảo. Ta xây dựng các luật JAPE tƣơng ứng với các thực thể đó là: tenhoithao.jape, thoigian.jape, diachi.jape.
4.2.1 Luật đƣợc xây dựng địa chỉ nhƣ sau:
File lists.def (C:\Program Files\GATE_Developer_8.0\plugins\ANNIE \resources\gazetteer\lists.def) ta khai báo các file streetname_vn.lst, phuongquanhuyen_vn.lst, city_vn.lst, loc_key_vn.lst, university_vn.lst để khi chƣơng trình hoạt động thì các từ điển trong file này sẽ đƣợc thực thi.
37
Ta thêm vào trong file streetname_vn.lst một số từ điển để trong quá trình làm việc luật sẽ so khớp với từ điển nhƣ:
Liễu giai Phố Hàng Đào Đƣờng Minh Khai Nguyễn Bỉnh Khiêm,...
Ta thêm vào file phuongquanhuyen.lst một số từ điển để trong quá trình làm việc luật sẽ so khớp với từ điển nhƣ:
Ba Đình Gia Lâm Quận1 Quận 2,....
Ta thêm vào trong file city_vn.lst một số từ điển để trong quá trình làm việc luật sẽ so khớp với từ điển nhƣ:
Hà nội Hải Phòng
Thành phố Hồ Chí Minh,…
Ta thêm vào trong file loc_key_vn.lst một số từ điển để trong quá trình làm việc luật sẽ so khớp với từ điển nhƣ:
Tòa nhà Hội trƣờng Khách sạn,…
Ta thêm vào trong file university_vn.lst một số từ điển để trong quá trình làm việc luật sẽ so khớp với từ điển nhƣ:
Đại học Bách Khoa Hà Nội Đại học Ngoại Thƣơng Hà Nội Đại học Kinh Tế Quốc Dân,…
Ta xây dựng luật diachi.jape như sau:
38 Input: Token Lookup
Options: control = appelt Macro: ADRESS_NUMBER (
({Token.kind == number})
({Token.kind == word, Token.length == "1"})? ) Macro: COMMA ({Token.string == ","}) Macro: DASH ({Token.string == "-"}) Macro: SLASH ({Token.string == "/"}) Macro: POINT ({Token.string == "."}) Trong đó:
Phase diachi tên đoạn là diachi Input đầu vào là các từ
Options: control = appelt chọn kiểu điều khiển là appelt
Trong quá trình sử dụng viết luật để không bị lặp đi lặp lại ta sử dụng các Macro: ADRESS_NUMBER(số địa chỉ), Macro: COMMA (dấu phẩy), Macro: DASH (dấu gạch ngang), Macro: SLASH(dấu /), Macro: POINT(dấu chấm).
Để đƣa ra đƣợc thông tin địa chỉ: số 1 Liễu giai, Ba đình, Hà nội ta có đoạn luật sau
Rule: StreetNameVN3 (
({Token.string == "Số"}|{Token.string == "số"}|{Token.string == "Nhà"}|{Token.string == "nhà"})?
39 ({Lookup.minorType == street})? ({Lookup.minorType == street_name}) ({Lookup.minorType == district}|COMMA|DASH)* ({Lookup.minorType == city}) ) :streetAddress -->
:streetAddress.Diachi = {kind = "streetAddress", rule = StreetNameVN3} Ở đoạn luật trên thì “streetAddress” là nhãn. Vế phải của luật là phần sau mũi tên. Nhãn “streetAddress” đƣợc chuyển tới vế phải của luật và chú giải kiều Diachi, với hai đặc trƣng tùy chọn là kind và rule có các giá trị lần lƣợt tƣơng ứng là “streetAddress” và “StreetNameVN3”
Một luật khác để đƣa ra nhãn địa chỉ: Tòa nhà B1 - trường Đại học Bách khoa Hà nội ta có luật sau
Rule: Adress_location ( ( ({Lookup.majorType==loc_general_key}) ({Token.kind == word}) ({Token.kind == number})? )? (COMMA|DASH|SLASH)? ({Token.string == "trƣờng"}|{Token.string == "Trƣờng"})? ({Lookup.minorType == university}) ) :streetAddress -->
:streetAddress.Diachi = {kind = "streetAddress", rule = Adress_location} Ở đoạn luật trên thì “streetAddress” là nhãn. Vế phải của luật là phần sau mũi tên. Nhãn “streetAddress” đƣợc chuyển tới vế phải của luật và chú giải kiều
40
Diachi, với hai đặc trƣng tùy chọn là kind và rule có các giá trị lần lƣợt tƣơng ứng là “streetAddress” và “Adress_location”
4.2.2 Luật xây dựng thời gian nhƣ sau:
Trong file lists.def (C:\ProgramFiles\GATE_Developer_8.0\plugins\ANNIE\ resources\ gazetteer\lists.def) ta khai báo một số file nhƣ: day_vn.lst, months_vn.lst, year.lst để khi chƣơng trình hoạt động thì các từ điển trong file này đƣợc thực thi.
Ta thêm vào trong file day_vn.lst một số từ điển về thứ trong tuần để khi hệ thống hoạt động luật so khớp với bộ từ điển nhƣ:
Thứ hai thứ hai Chủ nhật
Ta thêm vào trong file months_vn.lst một số từ điển về tháng để khi hệ thống hoạt động luật so khớp với bộ từ điển nhƣ:
Tháng giêng Tháng hai Tháng ba,.... Tháng mƣời hai
Ta thêm vào trong file year.lst một số từ điển về năm để khi hệ thống hoạt động luật so khớp với bộ từ điển nhƣ:
2012 2013,... 2019
Ta xây dựng luật thoigian nhƣ sau: Phase: thoigian
Input: Token Lookup Percent Options: control = appelt
Để thuận tiện trong quá trình viết luật không phải viết đi viết lại ta xây dựng một số macro (Phụ lục 1)
41
Nhƣ vậy, khi gặp một đoạn văn bản có kiểu thứ ngày tháng năm ta sử dụng luật ThuNgayThangNam thì sẽ đƣa đƣợc thông tin về thời gian: chủ nhật, ngày 8 tháng 9 năm 2011 hoặc ngày 8 tháng 9 năm 2011
Rule: ThuNgayThangNam ((((DAY)(COMMA))?|(DAY)?) (NGAY_TEXT)
(ONE_DIGIT|TWO_DIGIT)
({Token.string == "Tháng"}|{Token.string == "tháng"}|{Token.string == "thang"})
(ONE_DIGIT|TWO_DIGIT)
(({Token.string == "Năm"}|{Token.string == "năm"}|{Token.string == "nam"})
(YEAR))? )
:date -->
:date.Thoigian = {rule = "ThuNgayThangNam"}
Ở đoạn luật trên thì “date” là nhãn. Vế phải của luật là phần sau mũi tên. Nhãn “date” đƣợc chuyển tới vế phải của luật và chú giải kiểu Thoigian, chỉ có đặc trƣng duy nhất là rule có giá trị là “ThuNgayThangNam”
Một luật nữa về ngày tháng năm có kiểu nhƣ: chủ nhật, ngày 19/8/2014 Hoặc 19/8/2014
Rule: Ngay_slash (
(((DAY)(COMMA))?|(DAY)?) (NGAY_TEXT)?
(ONE_DIGIT|TWO_DIGIT) SLASH (ONE_DIGIT|TWO_DIGIT) SLASH YEAR
42 :date
-->
:date.Thoigian = {rule = "Ngay_slash"}
Ở luật “Ngay_slash” thì date là nhãn, nhãn date đƣợc chuyển tới vế phải của luật chú giải kiểu Thoigian có đặc trƣng của luật là “Ngay_slash”
Tƣơng tự để đƣa ra kiểu thời gian có dạng chủ nhật, ngày 19-8-2014
hoặc 26-08-2014 ta có luật Ngay_dash hay kiểu rút gọn của thời gian nhƣ ngày 08/02, CN 08/02
Luật để đƣa thông tin thời gian giờ phút nhƣ sau: để đƣa đƣợc các thông tin giờ nhƣ 10h 30 hoặc 10 giờ 30 phút hoặc 10 giờ kém 30 phút
Rule: TimeGioPhut (
(ONE_DIGIT|TWO_DIGIT)
({Token.string == "giờ"} | {Token.string == "h" }) (
({Token.string == "kém"})? (ONE_DIGIT|TWO_DIGIT)
({Token.string == "phút"} ((ONE_DIGIT|TWO_DIGIT) {Token.string == "giây"} )?)?
)? ) :time -->
:time.Gio = {kind = "positive", rule = "TimeGioPhut"}
Ở luật TimeGioPhut thì time là nhãn, nhãn time đƣợc chuyển tới vế phải của luật chú giải kiểu Gio có đặc trƣng của luật là kind = “positive”, rule = “TimeGioPhut”
Ngoài ra ta còn xây dựng một số luật để bắt thời gian có kiểu 8:14 am, 4.34 pm, 6am
43
4.2.3 Luật xây dựng tên sự kiện nhƣ sau:
Thêm danh sách hoithao_key.lst, hoithao_list.lst vào trong lists.def theo đƣờng dẫn C:\Program Files\GATE_Developer_8.0\ plugins\ANNIE\resources \gazetteer \lists.def để khi hệ thống hoạt động thì các từ điển trong file đó cũng đƣợc thực thi.
Thêm vào trong bộ từ điển một số từ khóa hội thảo theo đƣờng dẫn nhƣ sau C:\Program Files\GATE_Developer_8.0\ plugins\ANNIE\resources\gazetteer\ hoithao_key.lst để khi hệ thống hoạt động luật sẽ so khớp với bộ từ điển, một số từ khóa nhƣ:
Hội thảo
Hội thảo khoa học
Hội thảo khoa học trong nƣớc Hội thảo khoa học quốc tế
Thêm vào trong bộ từ điển một số tên hội thảo theo đƣờng dẫn nhƣ sau C:\Program Files\GATE_Developer_8.0\ plugins\ANNIE\resources\gazetteer\ hoithao_list.lst trong quá trình hoạt động bộ luật sẽ so khớp từ điển với văn bản nếu đúng thì đƣa ra tên hội thảo, một số tên hội thảo nhƣ:
Khoa học xã hội và UNESCO với sứ mệnh phát triển bền vững Mạng lƣới các nhà khoa học xã hội nghiên cứu về Tây Nguyên Hợp tác hoà bình, an ninh và phát triển khu vực trong bối cảnh mới Nghiên cứu lịch sử - văn hóa Nhật Bản
Xây dựng luật tên hội thảo
Phase: TenHoiThao Input: Token Lookup Options: control = appelt
Để thuận tiện trong quá trình viết luật không phải viết đi viết lại ta xây dựng một số macro (Phụ lục 2)
44
Để đƣa đƣợc thông tin về tên hội thảo: “Hội thảo khoa học…..” ta có luật hoithao1 như sau:
Rule: hoithao1 (
(DAU_NHAY)
(({Token.string == "Hội"}{Token.string == "thảo"})
({Token.kind == word}|{Token.kind == number}|{Token.kind == ponctuation})*):tenhoithao
(DAU_NHAY) )
:hoithaofull -->
: hoithaofull.TenHoiThao = { rule = hoithao1}
Ở luật hoithao1 thì hoithaofull là nhãn, nhãn hoithaofull đƣợc chuyển tới vế phải của luật chú giải kiểu TenHoiThao có đặc trƣng của luật là rule = “hoithao1”
Một luật khác để đƣa đƣợc tên hội thảo có dạng Hội thảo: "Học tốt ..." hoặc Hội thảo tập huấn quốc tế "hội nhập và phát triển..."
Rule: hoithao2 (
({Lookup.majorType == hoithao_key}) (TWOPOINT)? (DAU_NHAY)( (ANYWORD)* ):tenhoithao_short (DAU_NHAY) ) :ten_hoi_thao -->
:ten_hoi_thao.TenHoiThao = { rule = hoithao2}
Ở luật hoithao2 thì ten_hoi_thao là nhãn, nhãn ten_hoi_thao đƣợc chuyển tới vế phải của luật chú giải kiểu TenHoiThao có đặc trƣng của luật là rule = “hoithao2”
45
4.2.4 Luật xây dựng link gốc
Ngoài các luật để đƣa các thực thể thời gian, địa chỉ, tên hội thảo ta xây dựng thêm một luật để tạo đƣờng link tới file gốc.
Phase: link_goc
Input: Token Lookup SpaceToken Options: control = appelt
Ta xây dựng một số macro nhƣ (Phụ lục 3) Rule: sourceURL ( ({Token.string == "Nguồn"}) (TWOPOINT)? ({Token.string == "["}) ((ANYWORD)*):source ({Token.string == "]"}) ):sourceFull -->
:sourceFull.URL = { rule = sourceURL}
Nhƣ vậy, nhãn là sourceFull đƣợc chuyển tới vế phải của luật với chú giải là URL với đặc trƣng của luật là “sourceURL”
4.3 Xây dựng hệ thống và giao diện thực nghiệm
Dữ liệu đƣợc lấy từ các website nhƣ: https://vass.gov.vn/ (Viện hàn lâm khoa học xã hội Việt Nam), http://www.ciem.org.vn/ (Bộ kế hoạch và đầu tƣ viện nghiên cứu quản lý kinh tế Trung Ƣơng).
Tập dữ liệu thu thập đƣợc bằng phƣơng pháp thủ công ta đƣa tập dữ liệu này qua Bộ trích rút thông tin để trích rút ra các thực thể, các thực thể sau khi đƣợc gán nhãn sẽ đƣợc lƣu trữ trong hệ quản trị cơ sở dữ liêu PHP MyAdmin
46
Hình 4.1 Giao diện chính hệ thống GATE Giao diện GATE đƣợc chia làm hai phần chính:
47
Hình 4.2 Giao diện vế trái của hệ thống GATE
Applications: Dùng để thực thi chƣơng trình, trong chƣơng trình ứng dụng có ANNIE để nạp hệ thống
Language Resources: Tài nguyên ngôn ngữ, chứa một hoặc nhiều tài liệu (nhƣ trên ta có hai tài liệu là hoi thao 1, hoi thao 2 và hoi thao là một kho tài liệu chứa hoi thao1 và hoi thao 2).
Processing Resources: Tài nguyên xử lý là các ANNIE nhƣ: POS, Sentence Splitter, Gazetteer,... ta thêm các luật thoi_gian, ten_hoi_thao, dia_chi, nguồn.
48
- Bên phải là giao diện nạp và thực thi chƣơng trình . Khi click đúp chuột trái vào mục ANNIE trong mục Application ở bên trái thì bên phải xuất hiện giao diện nhƣ sau:
Hình 4.3 Giao diện vế phải hệ thống GATE
Tại mục Loaded Processing resources ta chọn tất cả các nội dung sau đó nhấn chuột vào nút để đƣa toàn bộ thông tin sang mục Selected Processing resources (lƣu ý khi chuyển sang cũng phải theo thứ tự nhƣ trong mục Loaded Processing resources) sau đó nhấn chuột vào Run this Application để thực thi chƣơng trình. Sau đó kích đúp vào Document để xem kết quả.
49
Hình 4.4 Kết quả trích rút từ văn bản định dạng tự do
50
Sau khi hệ thống trích rút đƣợc các kết quả thì kết quả này đƣợc lƣu trữ vào trong hệ quản trị cơ sở dữ liệu PHP MyAdmin. Để lƣu trữ các thực thể tên hội thảo, địa chỉ, thời gian, đƣờng link ta sử dụng các bảng tƣơng ứng nhƣ: tenhoithao, diachi, gio, ngaythang, url
Trong bảng tenhoithao gồm có các trƣờng:
- Source: lƣu đƣờng dẫn tới file dữ liệu trích rút - Tenhoithao: Tên hội thảo trích rút đƣợc
- Timestamp: Ghi lại thời gian trích rút
Trong bảng ngaythang gồm có các trƣờng:
- Source: lƣu đƣờng dẫn tới file dữ liệu trích rút - Ngaythang: Lƣu lại ngày tháng năm trích rút đƣợc - Timestamp: Ghi lại thời gian trích rút
Trong bảng diachi gồm các trƣờng:
- Source: lƣu đƣờng dẫn tới file dữ liệu trích rút - ngaythang: Lƣu lại địa chỉ trích rút đƣợc từ văn bản - Timestamp: Ghi lại thời gian trích rút
Trong bảng sourceurl gồm các trƣờng:
- url: Lƣu lại địa chỉ trang web
51
Hình 4.6 Thông tin về tên hội thảo đƣợc lƣu trong bảng tenhoithao
52
4.4 Đƣa dữ liệu lên Web, khai thác tìm kiếm thông tin
Từ kết quả thu đƣợc và đƣợc lƣu trữ trong hệ quản trị cơ sở dữ liệu PHP MyAdmin. Ta đƣa các thông tin của các thực thể lên mạng để theo dõi các sự kiện diễn ra bằng cách ta truy cập vào địa chỉ http://localhost:8888/hoithao.php
Hình 4.8 Sau khi trích rút thông tin hiện thị trên website
Tại đây ngƣời dùng có thể tìm kiếm thông tin theo tên hội thảo hoặc tìm kiếm theo thời gian diễn ra hội thảo. Để tìm kiếm thông tin về hội thảo ngƣời sử dụng chỉ cần đánh từ khóa vào ô tìm kiếm theo tên hội thảo hoặc đánh vào ô tìm kiếm theo thời gian(thời gian tháng trong năm) diễn ra hội thảo.
Ví dụ: Đánh vào ô tìm kiếm theo tên hội thảo: “ngôn ngữ học” thì hệ thống cho ta kết quả nhƣ sau:
53
Hình 4.9 Kết quả tìm kiếm theo tên hội thảo
Nếu nhƣ ngƣời dùng không biết đƣợc từ khóa hội thảo là gì thì ngƣời dùng có thể tìm kiếm theo chủ đề, lĩnh vực: ví dụ ngƣời dùng đánh vào ô tìm kiếm theo hội thảo “hội thảo văn học” vì hội thảo văn học có thể có rất nhiều các cuộc hội thảo cho nên ta có thể kết hợp với tìm kiếm theo thời gian.
54
Hay cùng một từ khóa tìm kiếm nhƣng lại có rất nhiều các hội thảo khi đó ta kết hợp với tìm kiếm theo thời gian. Ví dụ cùng là từ khóa “văn hóa” thì trong tháng 8 và tháng 9 tên hội thảo đều có và để tìm kiếm chính xác ta kết hợp với thời gian
Hình 4.11 Kết quả tìm kiếm kết hợp theo tên hội thảo và theo thời gian
Tại đây ngƣời sử dụng muốn và quan tâm tới sự kiện nào thì ngƣời dùng chỉ cần kích chuột vào đƣờng link là sẽ tới trang web tƣơng ứng. Chẳng hạn ta kích vào đƣờng link https://vass.gov.vn/noidung/hoinghihoithao/Pages/tin-tuc-hoi-nghi-hoi- thao.aspx?ItemID=941 trên giao diện http://localhost:8888/hoithao.php ta đƣợc kết quả nhƣ sau:
55
Hình 4.12 Giao diện sau khi kích vào đƣờng link
4.5 Đánh giá quá trình rút sự kiện
Để đánh giá khả năng trích rút sự kiện tác giả đƣa ra 2 độ đo là độ chính xác (P – Precision), độ hồi tƣởng (R - Recall)
Độ chính xác (P) =
Trong đó:
- Số sự kiện đúng: Số sự kiện đƣợc mô hình trích rút đúng - Số sự kiện sai: Số sự kiện mà mô hình trích rút sai
Độ hồi tƣởng (R) =
Trong đó:
Số sự kiện đúng
Số sự kiện đúng + Số sự kiện sai
Số sự kiện đúng
56
- Số sự kiện không đƣợc trích rút: Là số sự kiện mà mô hình không trích rút đƣợc
- Số sự kiện đúng: Số sự kiện đƣợc mô hình trích rút chính xác Qua đó ta có đánh giá nhƣ sau:
- Số sự kiện đúng đƣợc trích ra từ tập thực nghiệm là: 103 - Số sự kiện sai là: 3
- Số sự kiện không tìm thấy: 11
Dựa vào công thức đánh giá độ chính xác và độ hồi tƣởng ta có kết quả sau: - Độ chính xác (P) là: (103)/(103+3)=97%
- Độ hồi tƣởng (R) là: (103)/(103+11)= 90%
4.6 Kết luận chƣơng
Trong chƣơng 4 tác giả đã xây dựng hệ thống trích rút sự kiện từ văn bản hội thảo khoa học tiếng Việt dựa trên các luật văn phạm JAPE kết quả tƣơng đối khả quan, việc tìm kiếm thông tin theo tên hội thảo, tìm kiếm theo thời gian, tìm kiếm kết hợp tên hội thảo với thời gian cũng rất khả quan.
57
Chƣơng 5 KẾT QUẢ VÀ HƢỚNG PHÁT TRIỂN 5.1 Các kết quả đạt đƣợc
Với đề tài trích rút sự kiện từ văn bản tiếng Việt, sau thời gian nghiên cứu luận văn đã trình bày đƣợc các khái niệm về trích rút thông tin, trích rút sự kiện, phƣơng pháp tiếp cận bài toán trích rút sự kiện, công cụ hỗ trợ trong quá trình trích rút sự kiện.
Từ các kết quả đã đạt đƣợc trong quá trình nghiên cứu tác giả đề xuất mô hình trích rút sự kiện hội thảo từ văn bản tiếng Việt, xây dựng và cài đặt demo chƣơng trình trích rút sự kiện hội thảo từ văn bản tiếng Việt, lƣu trữ thông tin vào trong cơ sở dữ liệu PHP MyAdmin, đƣa dữ liệu lên Web để khai thác, việc tìm kiếm