1. Trang chủ
  2. » Luận Văn - Báo Cáo

Nghiên cứu các kỹ thuật rút trích thông tin web và phát triển hệ thống tư vấn tuyển sinh tự động

81 1 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Tiêu đề Nghiên Cứu Các Kỹ Thuật Rút Trích Thông Tin Web Và Phát Triển Hệ Thống Tư Vấn Tuyển Sinh Tự Động
Tác giả Nguyễn Thị Bích Mi, Phan Thị Tường Vi
Người hướng dẫn ThS. Dương Hữu Thành
Trường học Trường Đại Học Mở Thành Phố Hồ Chí Minh
Chuyên ngành Công Nghệ Thông Tin
Thể loại Nghiên Cứu Khoa Học
Năm xuất bản 2018
Thành phố TP. Hồ Chí Minh
Định dạng
Số trang 81
Dung lượng 4,4 MB

Cấu trúc

  • CHƯƠNG 1: TỔNG QUAN ĐỀ TÀI (15)
    • 1.1. Giới thiệu tổng quan (15)
    • 1.2. Các nghiên cứu liên quan (15)
    • 1.3. Lý do chọn đề tài (16)
    • 1.4. Mục tiêu và phương pháp nghiên cứu (16)
      • 1.4.1. Mục tiêu nghiên cứu (16)
      • 1.4.2. Phương pháp nghiên cứu (17)
    • 1.5. Đối tượng và phạm vi nghiên cứu (17)
    • 1.6. Đóng góp khoa học của đề tài (17)
    • 1.7. Bố cục báo cáo (18)
  • CHƯƠNG 2: HỆ THỐNG TƯ VẤN TUYỂN SINH TỰ ĐỘNG (19)
    • 2.1. Giới thiệu (19)
    • 2.2. Cơ sở lý thuyết (20)
      • 2.2.1. Rút trích dữ liệu (20)
      • 2.2.2. Xử lý ngôn ngữ tự nhiên (35)
    • 2.3. Full text search (53)
      • 2.3.1. Tính độ tương đồng câu sử dụng độ đo Cosine (57)
    • 2.4. Kiến trúc hệ thống (63)
    • 2.5. Cài đặt (64)
      • 2.5.1. Phần mềm: Yêu cầu phần mềm (64)
      • 2.5.2. Cấu trúc chương trình (64)
  • CHƯƠNG 3: THỰC NGHIỆM, KẾT LUẬN, HƯỚNG PHÁT TRIỂN (66)
    • 3.1. Thực nghiệm ứng dụng (66)
      • 3.1.1. Thiết lập môi trường (Virtual Environment) (66)
      • 3.1.2. Bảng các thư packages dùng trong hệ thống (66)
      • 3.1.3. Rút trích dữ liệu (67)
      • 3.1.4. Tách từ (72)
      • 3.1.5. Đánh chỉ mục và tìm kiếm (74)
      • 3.1.6. Tính độ tương đồng (77)
    • 3.2. Kết quả thực nghiệm (78)
    • 3.3. Kết quả đạt được (79)
    • 3.4. Những vấn đề còn tồn tại (80)
    • 3.5. Hướng phát triển (80)
  • TÀI LIỆU THAM KHẢO......................................................................................... 70 (81)

Nội dung

HỆ THỐNG TƯ VẤN TUYỂN SINH TỰ ĐỘNG

Giới thiệu

Trong phần này, chúng em giới thiệu các kỹ thuật rút trich thông tin web, cơ sở lý thuyết nến tảng xử lý ngôn ngữ tự nhiên và minh họa phát triển hệ thông tư vấn tuyển sinh tự động trả lời các câu hỏi tư vấn đơn giản trên cơ sở kho dữ liệu tư vấn tuyển sinh nhóm rút trích trên các trang tư vấn tuyển sinh uy tín trong vòng năm năm gần nhất.

Trước tiên, nói về khái niệm rút trích thông tin web Rút trích nội dung trang web (Web Scraping) chính là phương pháp dùng để rút trích thông tin từ những trang web mà chúng ta mong muốn, ta có thể rút trích nội dung trang web dựa vào xpath, css selector, regular expression,… bên cạnh đó chúng ta còn có một số thư viện, module python hỗ trợ cho việc rút trích như Scrapy, Beautiful soup, Selenium, …

Sau khi có được một lượng data trong cơ sở dữ liệu chúng ta tiến hành bước xử lý ngôn ngữ tự nhiên và cụ thể là xử lý trong tiếng Việt Một số tool hỗ trợ trong việc xử lý ngôn ngữ như nltk (Natural Language Toolkit) dành cho tiếng Anh, underthesea (Vietnamese Natural Language Toolkit) dành cho tiếng Việt với các chức năng như tách từ (tokenization), gán nhãn từ loại ( POS tagging), phân đoạn từ (Word segmentation), …

Lập chỉ mục trên cơ sở dữ liệu Khi chỉ mục đã được lập, thông tin đã được lưu trữ, lúc này khi người dùng tìm kiếm với các từ khóa, các kết quả sẽ được hiển thị và những kết quả này sẽ được truy xuất từ nguồn dữ liệu đã được lưu trữ, lập chỉ mục trước đó trong cơ sở dữ liệu.

Tính độ tương đồng trên dữ liệu trả về nhằm lấy ra được kết quả gần đúng, hoặc đúng nhất với từ khóa của người dùng bằng cách sử dụng mô hình không gian vector, tính tần số của tài liệu, nghịch đảo tần số từ, …

Hệ thống tư vấn tuyển sinh tự động giúp người dùng có được ngay câu trả lời đúng hoặc gần đúng nhất với câu hỏi đặt ra mà không cần phải chờ đợi câu trả lời trực tiếp từ các chuyên gia trong một khoảng thời gian dài Hệ thống với

8 | T r a n g kho dữ liệu là các câu hỏi của người dùng và câu trả lời của các chuyên gia trên các trang web.

Quá trình hiện thực hệ thống với các bước rút trích, xử lý dữ liệu,tách từ, đánh chỉ mục.

Quá trình tương tác giữa người dùng với hệ thống với các bước nhận câu hỏi từ người dùng, tiền xử lý, search trên cơ sở dữ liệu, tính độ tương đồng trên kết quả trả về và trả lời lại cho người dùng.

Cơ sở lý thuyết

2.2.1 Rút trích dữ liệu Để rút trích được nội dung của trang web chúng ta có một số phương pháp như xpath, css selector, regular expression, vậy chúng là gì? a Xpath

Xpath (XML Path Language) là một ngôn ngữ thiết kế ra với mục đích giúp cho ứng dụng có thể di chuyển bên trong XML document và truy xuất các giá trị cũng như thuộc tính của các elements Nó được sử dụng khá phổ biến để duyệt và tìm kiếm các thuộc tính hay các phần tử cụ thể với các pattern phù hợp trong một file XML Có thể tạo một truy vấn XPath để tìm các bảng cụ thể, tìm đến các hàng cụ thể, hoặc tìm các ô của một bảng có các thuộc tính nhất định. Đây cũng là một cách để chia nhỏ nội dung trong một trang web cụ thể nào đó.

Cách lấy Xpath trên trình duyệt Chrome:

Bước 1: click chuột phải vào thành phần muốn lấy xpath trên giao diện web, sau đó chọn Inspect.

Bước 2: chuột phải vào thành phần trên Elements => click Copy => click Copy Xpath Giá trị Xpath của button là: ‘//*[@id="navbar"]/ul/li[1]/a’

Hình 2.2 Sao chép XPath từ trình duyệt Chrome. b Css selector

Css selector là sự kết hợp giữa chọn một phần tử và chọn một giá trị xác định của phần tử đó trong một trang web Một bộ selector gồm phần tử và giá trị đó được gọi là pattern selector.

CSS Selector được xây dựng trên nguyên tắc sử dụng các thẻ của HTML, bao gồm thuộc tính và giá trị của mỗi thẻ Nhìn chung, công cụ này cung cấp những chức năng tương tự như XPath trong việc lựa chọn, lấy ra các phần của một trang HTML, nhưng chủ yếu lấy dựa vào các thiết kế như màu của các thành phần trong trang web Đối với XPath thì bộ CSS Selector phổ biến hơn trong việc lấy các thành phần như vậy Mỗi bộ CSS Selector có thể được chuyển sang bộ XPath tương đương, nhưng không thể làm ngược lại.

Khi sử dụng bộ CSS Selector thì không cần biết trước nội dung mà chúng lấy được sẽ có cấu trúc như thế nào Vì các trang HTML trình bày theo các node tách biệt, nên CSS Selector sẽ duyệt qua từng node và trả về nội dung mà chúng ta mong muốn Nhưng chúng ta phải biết được node mà mình muốn trích xuất.

Tương tự như XPath, CSS Selector có thể định vị phần tử dựa vào ID, lớp, hoặc tên của phần tử đó.

Hình 2.3 Các quy tắc xác định CSS Selector

 CSS Selector ID: tìm kiếm phần tử dựa vào ID

 CSS Selector Class: tìm kiếm phần tử dựa vào tên Class

 CSS Selector Attribute: tìm kiếm phần tử dựa vào thuộc tính, cặp thuộc tính và giá trị của phần tử.

 CSS Selector ID/Class and attribute: kết hợp tìm kiếm dựa vào cả ba yếu tố trên.

 CSS Selector Sub-string: tìm kiếm phần tử dựa vào các chuỗi con.

 CSS Selector Inner text: giúp xác định và tạo các CSS Selector theo mẫu của tag HTML.

CSS Selector có nhiều lợi ích được kể đến như có thể sử dụng trên hầu hết các loại trình duyệt khác nhau.

Cách lấy Css selector trên trình duyệt cũng giống như cách lấy Xpath, thay vì click Copy Xpath thì chúng ta click vào Copy selector Giá trị nhận được là: ‘#navbar > ul > li:nth-child(1) > a’ c Regular expression

Regular expression (biểu thức chính quy) là biểu thức định nghĩa một khuôn mẫu (pattern) tìm kiếm chuỗi Nó có thể được sử dụng tìm kiếm, sửa đổi, và thao tác trên văn bản Khuôn mẫu được định nghĩa bởi biểu thức chính quy có thể khớp một hoặc một vài lần, hoặc không khớp với một văn bản cho trước. Regex được hỗ trợ bởi hầu hết các ngôn ngữ lập trình như python, java, C#, C/ C++, pcre(php), javascript, golang,… Nhưng mỗi ngôn ngữ hỗ trợ biểu thức

11 | T r a n g thông thường hơi khác nhau Trong luận văn này chúng ta sẽ tìm hiểu và sử dụng regular expression trong python.

Regex trong Python được thể hiện qua module re, module re cung cấp sự hỗ trợ đầy đủ các regex trong Python Module này tạo Exception là re.error nếu xảy ra một lỗi trong khi biên dịch hoặc khi sử dụng một regex Để sử dụng được regex chúng ta cần biết một số pattern, flags trong python:

1 ^ So khớp giá trị từ đầu chuỗi nguồn

2 $ So khớp giá trị từ cuối chuỗi nguồn

3 So khớp bất kỳ ký tự đơn nào ngoại trừ newline (dòng mới) Sử dụng flag M cho phép kết nối với newline (dòng mới)

4 [] So khớp với bất kỳ ký tự đơn nào trong []

5 [^] Kết nối với bất kỳ ký tự đơn nào không ở trong []

6 * Kết nối với 0 hoặc nhiều sự xuất hiện của biểu thức đặt trước

7 + Kết nối với 1 hoặc nhiều sự xuất hiện của biểu thức đặt trước

8 ? Kết nối với 0 hoặc 1 sự xuất hiện của biểu thức đặt trước

9 { n} Kết nối với n sự xuất hiện của biểu thức đặt trước

10 { n,} Kết nối với n hoặc nhiều hơn sự xuất hiện của biểu thức đặt trước

11 { n, m} Kết nối với ít nhất n và nhiều nhất m sự xuất hiện của biểu thức đặt trước

13 () Nhóm các Regular Expression và ghi nhớ text đã kết nối

14 \w Khớp với tất cả kí tự là chữ, số và gạch dưới Tương đương với mẫu [A-Za-z0-9_].

15 \W Khớp với tất cả kí tự không phải là chữ Tương đương với mẫu

16 \s Khớp với một kí tự khoảng trắng, bao gồm trống - space, tab, phân trang - form feed, phân dòng - line feed

17 \S Khớp với một kí tự không phải khoảng trắng

18 \d Khớp với một kí tự số Tương đương với mẫu [0-9]

19 \D Khớp với một kí tự không phải là kí tự số Tương đương với mẫu

20 \A Kết nối với phần đầu của chuỗi

21 \Z Kết nối với phần cuối của chuỗi Nếu một newline (dòng mới) tồn tại, nó kết nối với phần ở trước newline (dòng mới)

22 \z Kết nối với phần cuối của chuỗi

23 \G Kết nối với điểm mà tại đó kết nối cuối cùng được tìm thấy

24 \b Kết nối với các giới hạn từ khi bên ngoài các dấu [] Kết nối với backspace (mã là 0x08) khi bên trong các dấu []

25 \B Kết nối với các giới hạn không phải là từ

26 \v Khớp với kí tự vertical tab (U+000B)

27 \t Khớp với kí tự tab (U+0009)

28 \r Khớp với kí tự quay đầu dòng - carriage return (U+000D)

29 \nKhớp với kí tự xuống dòng - line feed (U+000A) Bảng 1

Một số pattern sử dụng trong python

1 I hoặc IGNORECASE Không phân biệt hoa thường khi so khớp

2 L hoặc LOCALE So Khớp với local hiện tại.

3 M hay MULTILINE Thay đổi $và ^ thành kết thúc của một dòng và bắt đầu của một dòng thay vì mặc định là kết thúc chuỗi và bắt đầu chuỗi.

4 A hay ACSII Thay đổi \w, \W, \b, \B, \d, \D, \S và \s thành so khớp full unicode.

5 S hay DOTALL Thay đổi pattern “.” thành khớp với bất kỳ ký tự nào và dòng mới

6 U hoặc UNICODE Thông dịch các chữ cái theo bộ ký tự Unicode Flag này ảnh hưởng tới hành vi của \w, \W, \b, \B

Bảng 2 Một số flags sử dụng trong python

Module re có các hàm thường được sử dụng như re.search(), re.match(), re.findall(), re.sub(), re.split(), re.compile(),…

1 re.search(pattern, Trả về một đối tượng match nếu thành công và trả về string, flags) None nếu thất bại.

Kiểm tra một kết hợp bất cứ nơi nào trong chuỗi.

Chúng ta sử dụng hàm group(num) hoặc groups() của đối tượng match để lấy biểu thức đã được so khớp.

2 re.match(pattern, Trả về một đối tượng match nếu thành công và trả về string, flags) None nếu thất bại.

Kiểm tra một kết hợp chỉ ở đầu chuỗi.

Chúng ta sử dụng hàm group (num) hoặc groups() của đối tượng match để lấy biểu thức đã được so khớp.

3 re.findall(pattern, Tìm tất cả các kết hợp có thể trong toàn bộ chuỗi và trả string, flags) về một danh sách các chuỗi.

4 re.sub(pattern, repl, Thay thế tất cả sự xuất hiện của pattern trong string string, count, flags) bằng repl Nếu không tìm thấy pattern thì chuỗi trả về sẽ không thay đổi.

5 re.subn(pattern, Tương tự như re.sub() nhưng trả về một tuble repl, string, count, flags)

6 re.split(pattern, Trả về một danh sách đã được loại bỏ các giá trị so string, maxsplit, khớp. flags)

7 re.compile(pattern, Biên dịch một regular expression pattern thành một flags) regular expression object Để tái sử dụng một biểu thức nhiều lần trong một chương trình

Bảng 3 Một số phương thức sử dụng chủ yếu trong module re của python

 pattern: là chuỗi regular expression.

 string: là chuỗi cần so khớp.

 flags: là các kiểu so khớp muốn thực hiện Nếu để trống flags, thì flags sẽ bằng 0.

 maxsplit: số giới hạn Nếu để trống python sẽ hiều bằng 0 Nếu bằng không hàm sẽ thực hiện đến hết string Nếu maxsplit khác 0 thì trong quá trình split khi số phần đã đến maxspit thì dừng lại và trả về mảng gồm các phần chia trước đó và chuỗi còn lại.

 count: số giới hạn Nếu để trống python sẽ hiều bằng 0 Nếu bằng không hàm sẽ thực hiện đến hết string Nếu count khác 0 thì hàm sẽ thực hiện đến count và dừng lại, trả về chuỗi đã được thực hiện tới count và chuỗi còn lại.

Hình 2.4: Một số ví dụ về module re trong python Để rút trích được dữ liệu ta cần có các thư viện hoặc module hỗ trợ, trong python cung cấp một số thư viện để rút trích như Scrapy, Beautiful soup, Selenium, … các thư viện này đều có sử dụng xpath, css selector,… để rút trích. d Scrapy framework

Scrapy framework là một framework ứng dụng để thu thập dữ liệu các trang web và trích xuất dữ liệu có cấu trúc có thể được sử dụng cho một loạt các ứng dụng hữu ích, như khai thác dữ liệu, xử lý thông tin hoặc lưu trữ lịch sử Scrapy framework được viết bằng python và là open source web crawling framework.

Mặc dù Scrapy ban đầu được thiết kế cho việc rút trích web, nó cũng có thể được sử dụng để trích xuất dữ liệu bằng cách sử dụng các API hoặc như một trình thu thập thông tin web với mục đích chung. Để viết được một ứng dụng thu thập dữ liệu bằng Scrapy thì trước tiên chúng ta tìm hiều qua về Scrapy có những thành phần gì, cách thức hoạt động của nó.

Hình 2.5: Những thành phần chính và cách thức hoạt động của Scrapy framework

Thành phần của Scrapy framework:

 Scrapy Engine: có trách nhiệm kiểm soát luồng dữ liệu giữa tất cả các thành phần của hệ thống và kích hoạt các sự kiện khi một số hành động xảy ra.

 Scheduler: giống như một hàng đợi (queue), scheduler sắp xếp thứ tự các URL cần download.

 Dowloader: thực hiện dowload trang web và cung cấp cho engine.

Full text search

Chắc hẳn chúng ta biết đến kĩ thuật tìm kiếm cơ bản nhất đó là thông qua câu lệnh LIKE của SQL.

SELECT column_name(s) FROM table_name(s) WHERE column_name LIKE patern;

Sử dụng LIKE, ta sẽ chỉ phải tìm kiếm ở column đã định trước, do đó lượng thông tin phải tìm giới hạn lại chỉ trong các column đó Câu lệnh LIKE cũng tương đương với việc bạn matching pattern cho “từng” chuỗi của từng dòng (rows) của field tương ứng, do đó về độ phức tạp sẽ là tuyến tính với số dòng, và số kí tự của từng dòng, hay chính là “toàn bộ kí tự chứa trong field cần tìm kiếm” Do đó sử dụng LIKE query sẽ có 2 vấn đề:

 Chỉ search được trong row đã định trước

Như vậy chúng ta cần một kĩ thuật tìm kiếm khác, tốt hơn LIKE query, mềm dẻo hơn, tốt về performance hơn, đó chính là Full text search.

Full text search là kĩ thuật tìm kiếm trên Full text database, ở đây Full text database là cơ sở dữ liệu chứa “toàn bộ” các kí tự (text) của một hoặc một số các tài liệu, bài báo (document), hoặc là của websites… và khái niệm cơ bản nhất trong Full Text Search, đó là Inverted Index Và đây cũng là điều làm nên sự khác biệt giữa Full text search và các kĩ thuật search thông thường khác. Vậy Inverted Index là gì?

Inverted Index là kĩ thuật thay vì index theo đơn vị row(document) giống như SQL thì chúng ta sẽ tiến hành index theo đơn vị term Cụ thể hơn, Inverted Index là một cấu trúc dữ liệu, nhằm mục đích map giữa term, và các document chứa term đó Ví dụ chúng ta có 3 documents: D1, D2, D3

Inverted Index của 3 documents trên sẽ được lưu dưới dạng như sau:

Bây giờ chúng ta query cụm từ “Đây là vở”, thì thay vì việc phải scan từng document một, bài toán tìm kiếm document chứa 3 term trên sẽ trở thành phép toán union của 3 tập hợp (document sets) của 3 term đó trong inverted index.

Inverted index cực kì linh hoạt trong việc tìm kiếm Query đầu vào của bạn có thể là “Đây là vở”, “đây LÀ Vở” thì độ phức tạp tính toán của phép union vẫn không đổi. Đối với Full text search có nhiều thư viện hỗ trợ và trong đó nổi bật nhất là Lucene(Lucene là phần mềm mã nguồn mở, dùng để phân tích, đánh chỉ mục và tìm kiếm thông tin với hiệu suất cao bằng Java) Mặc dù thiết kế và xây dựng ban đầu từ java nhưng hiện nay cũng đã có một số phiên bản cho các ngôn ngữ khác: NET, C++, Perl, Python, … Đối với Python chúng ta có Pylucene, có những chắc năng như Lucene và được sử dụng trên Python.Tuy nhiên đối với việc cài đặt Pylucene khá phức tạp chúng ta cần cài đặt Java JDK/JRE, JCC, ANT (thư viện Java Apache Ant)

Vì vậy chúng ta sẽ tìm hiểu một thư viện cũng có một số chức năng tương tự trong Python đó là Whoosh.

Whoosh là một thư viện trong Python giúp cho lập trình viên có thể tạo ra công cụ tìm kiếm Có thể tùy chỉnh, thay thế và mở rộng Whoosh cài đặt dễ dàng và không cần đến trình biên dịch hay phải cài đặt Java.

Chúng ta sẽ tìm hiểu về cách đánh chỉ mục và tìm kiếm của Whoosh: Đánh chỉ mục:

Whoosh yêu cầu chỉ định các trường của chỉ mục trước khi bắt đầu lập chỉ mục Schema liên kết tên trường với metadata, chẳng hạn như định dạng của các bài đăng và nội dung của trường được lưu trữ trong chỉ mục, Schema chỉ cần tạo một lần khi tạo chỉ mục.

Hình 2.39: Tạo đối tượng index

Bây giờ chúng ta có thể bắt đầu thêm document Phương thức writer() của đối tượng Index trả về một đối tượng IndexWriter cho phép chúng ta thêm tài liệu vào chỉ mục Phương thức add_document (** kwargs) của IndexWriter chấp nhận các đối số từ khóa mà tên trường được ánh xạ tới một giá trị Gọi commit() trên IndexWriter để lưu các document được thêm vào chỉ mục.

Hình 2.40: Lưu các document vào chỉ mục

 Các text fields được đánh chỉ mục phải được truyền một giá trị unicode Các fileds được lưu trữ nhưng không được lập chỉ mục (kiểu trường STORED) có thể được truyền cho bất kỳ đối tượng pickle-able nào.

 Không phải điền giá trị cho từng trường Whoosh không quan tâm nếu ta để lại một filed từ một document.

44 | T r a n g Để bắt đầu tìm kiếm chỉ mục, chúng ta cần một đối tượng searcher:

Hình 2.41: tạo đối tượng Searcher

Phương thức search() của Searcher lấy một Query Object Ta có thể xây dựng các đối tượng truy vấn trực tiếp:

Hình 2.42: Đối tượng truy vấn trực tiếp “apple and bear”

Hoặc sử dụng bộ phân tích truy vấn mặc định trong module qparser Đối số đầu tiên của constructor QueryParser là trường mặc định để tìm kiếm Đây thường là trường "body text" Đối số tùy chọn thứ hai là một Schema.

Hình 2.43: Bộ phân tích truy vấn QueryParser

QueryParser mặc định thực hiện một ngôn ngữ truy vấn rất giống với Lucene's Nó cho phép kết nối các thuật ngữ với AND hoặc OR, eleminate các điều khoản với NOT, các thuật ngữ nhóm với nhau thành các mệnh đề với dấu ngoặc đơn, phạm vi, tiền tố, và các truy vấn Wildcard, và chỉ định các trường khác nhau để tìm kiếm Theo mặc định, nó nối các mệnh đề cùng với AND:

Hình 2.44: Bộ phân tích truy vấn QueryParser kết nối thuật ngữ nhóm

Sử dụng phương thức search() của searcher để chạy truy vấn và nhận được một đối tượng result:

Hình 2.45: Đối tượng Results Ưu điểm của phương pháp full text search:

 Kết quả search trả về nhiều.

 Khi đánh index thì tốc độ search Nhanh.

 Tối ưu hơn việc sử dụng LIKE khi thao tác với các trường văn bản lớn.

 Độ chính xác thấp: độ nhiễu cao, từ đồng nghĩa (synonyms), từ cấu tạo bằng chữ đầu của cụm từ (acronym)

2.3.1 Tính độ tương đồng câu sử dụng độ đo Cosine

Trong phương pháp tính độ đo Cosine, các câu sẽ được biểu diễn theo một mô hình không gian vector Các tài liệu và câu truy vấn được đại diện bằng các trục tọa độ trong không gian, mỗi trục tương ứng với một từ trong các tài liệu Tài liệu được chọn thích hợp nhất với câu truy vấn là những tài liệu và vector hợp với vector của câu truy vấn một góc nhỏ nhất trong không gian vector Các tài liệu này thu được từ quá trình tiền xử lý văn bản đầu vào, các bước tiền xử lý gồm: tách câu, tách từ, gán nhãn từ loại, loại bỏ những câu không hợp lệ (không phải là câu thực sự) và biểu diễn câu trên không gian vectơ.

Ví dụ: câu truy vấn với 3 tài liệu được xem xét thì tài liệu d2 là thích hợp nhất với câu truy vấn.

Hình 2.46: Mô hình truy vấn vector

Một số cách tiếp cận để vector hóa câu truy vấn và các tài liệu:

Ba thông số được sử dụng trong term weighting:

 Term frequency (tf i, j ): số lần từ w i xuất hiện trong tài liệu d j  độ quan trọng của từ trong tài liệu.

 Document frequency (df i ): số lượng tài liệu có sự xuất hiện từ i  sự phân bố của từ trong kho tài liệu.

 Collection frequency (cf i ): Tổng số lần xuất hiện w i trong tập tất cả các tài liệu.

Tần số mục từ (Term Frequency - tf) tf của một từ càng cao có nghĩa là từ đó càng có khả năng mô tả được nội dung của tài liệu đang xét Ví dụ, trong một tài liệu xuất hiện rất nhiều từ

“máy tính” thì ta có thể đoán nội dung tài liệu nói về lĩnh vực tin học.

Tuy nhiên suy luận trên không phải lúc nào cũng đúng vì sẽ có một số từ ít ý nghĩa xuất hiện rất nhiều trong văn bản như từ “và”, “là”,

Một số công thức xác định tf:

Tần số ngược (Inverse Document Frequency - idf): idf thể hiện một từ có là đặc trưng hay phổ biến hay không idf của tài liệu t được tính như sau: idft Nhận xét rằng: các từ xuất hiện trong càng nhiều tài liệu (df) thì idf càng thấp và ngược lại Ví dụ từ kho dữ liệu Reuters (Manning et al.)

Bảng 6: Ví dụ từ kho dữ liệu Reuters

Kết hợp thông số tf và idf:

Nhận xét w(t, d) = tft, d × idft sẽ:

 cao khi t xuất hiện nhiều lần trong tập các văn bản nhỏ.

 thấp khi t xuất hiện ít trong một tài liệu hoặc khi nó xuất hiện trong nhiều trong các tài liệu.

 rất thấp khi t xuất hiện trong hầu hết các tài liệu.

Trong đó: N là tổng số tài liệu đang xét.

Kiến trúc hệ thống

Kiến trúc của hệ thống:

Hình 2.47: Kiến trúc hệ thống

Xử lý trong kiến trúc hệ thống bao gồm những bước sau:

Bước 1: Rút trích dữ liệu từ các trang web bằng thư viện Selenium WebDriver kết hợp với một số phương pháp như regular expression, xpath, css selector, …

Bước 2: Tiền xử lý dữ liệu như loại bỏ các thẻ HTML, chuẩn hóa chuỗi sau đó lưu vào cơ sở dữ liệu.

Bước 3: Lấy dữ liệu từ cơ sở dữ liệu, thực hiện tách từ cho các câu hỏi và câu trả lời và lưu xuống cơ sở dữ liệu ở một collection khác.

Bước 4: Đánh chỉ mục trên collection đã thực hiện tách từ trước đó bằng thư viện whoosh của Python.

Cài đặt

2.5.1 Phần mềm: Yêu cầu phần mềm

Cấu trúc chương trình tư vấn tuyển sinh tự động:

Hình 2.48: Mô hình chương trình tư vấn tuyển sinh tự động

Bước 1: Người dùng đặt câu hỏi về vấn đề tuyển sinh, Hệ thống tiếp nhận câu hỏi.

Bước 2: Hệ thống xử lý:

 Bước 2.1: Tiền xử lý câu hỏi: tách từ =>sửa đổi từ viết tắt => loại bỏ từ dừng.

 Bước 2.2: Search dựa vào câu hỏi: Hệ thống sẽ dựa vào câu hỏi để truy vấn xuống cơ sở dữ liệu đã đánh chỉ mục và trả về những câu phù hợp.

 Bước 2.3: Tính độ tương đồng trên kết quả: hệ thống tính độ tương đồng bằng phương pháp Cosine, trả về trọng số của các kết quả đã nhận ở bước 2.

 Bước 2.4: Xắp xếp câu trả lời giảm dần dựa vào độ tương đồng và trả về ẵ cỏc kết quả cú độ tương đồng cao nhất.

Bước 3: Hiển thị câu những câu trả lời đúng hoặc gần đúng nhất cho người dùng dựa vào kết quả của bước 2.

THỰC NGHIỆM, KẾT LUẬN, HƯỚNG PHÁT TRIỂN

Thực nghiệm ứng dụng

3.1.1 Thiết lập môi trường (Virtual Environment)

Virtual Environment thiết lập một môi trường ảo, cho phép chúng ta thử nghiệm với các packages của Python mà không làm ảnh hưởng đến những packages đã được cài đặt sẵn trên Python Khi môi trường ảo được kích hoạt, các gói sẽ được cài đặt bên trong thư mục môi trường ảo cụ thể của project Công cụ tạo ra Virtual Environment trên Python là virtualenv Virtualenv tạo ra một thư mục chứa tất cả những thứ cần thiết (executables, libraries).

Cài đặt môi trường ảo virtualenv, khởi tạo và kích hoạt trong ubuntu:

$ source envScrapingTS/bin/activate Sau khi môi trường ảo kích hoạt, chúng ta có thể cài đặt các packages và chúng sẽ nằm trong thư mục môi trường ảo của project.

3.1.2 Bảng các thư packages dùng trong hệ thống

Hệ thống áp dụng một số packages trong quá trình viết script bằng ngôn ngữ Python:

Bảng 8: ác packages sử dụng trong hệ thống

Thông qua việc tìm hiểu các phương pháp cũng như các thư viện hỗ trợ,

Em sẽ sử dụng thư viện Selenium cho việc rút trích và áp dụng một số phương pháp như xpath, css selector, regular expression,…

Các trang web được tiến hành rút trích: http://hoidap.thongtintuyensinh.vn

Hình 3.1: Trang web hỏi đáp tuyển sinh https://bigschool.vn/hoi-dap-ve-quy-che-tuyen-sinh-2017

Sử dụng WebDriver của trình duyệt Chrome, download qua đường link: https://sites.google.com/a/chromium.org/chromedriver/downloads

Tiến hành rút trích dữ liệu của hai trang web đối với trang web “hỏi đáp tuyển sinh” có 10 trang cần rút trích.

Hình 3.3: Mô hình rút trích dữ liệu từ trang web

Bước 1: Tiến trình rút trích sẽ mở trình duyệt Chrome và truy cập vào trang web bằng URL.

Bước 2: Dựa vào xpath và css selector để rút câu hỏi và câu trả lời từ trang web, tại trang web hỏi đáp tuyển sinh(http://hoidap.thongtintuyensinh.vn) có 10 trang, chúng ta lần lượt click vào từng trang thông qua xpath.

Hình 3.4: Dữ liệu trong quá trình tiền xử lý

Dữ liệu rút trích sẽ được tiền xử lý với các thao tác: loại bỏ các thẻ HTML còn xót lại trong các câu hỏi và câu trả lời đồng thời xử lý các chữ viết tắt thuộc lĩnh vực tuyển sinh.

Hình 3.5: Dữ liệu đang được rút trích

Bước 3: Lưu dữ liệu xuống collection AnswerQuestion trong database DBTuyenSinh.

Hình 3.6: Dữ liệu rút trích trong database

Thực hiện tách từ với thư viện Under the sea trong Python để tách từ cho tiếng Việt.

Hình 3.7: Mô hình thực hiện tách từ cho dữ liệu đã rút trích

Bước 1: Lấy dữ liệu bao gồm câu hỏi, trả lời và ngày tháng từ collectionAnswerQuestion trong database DBTuyenSinh Thực hiện tách từ với phương thức word_sent() trong thư viện Under the sea.

Hình 3.8: Thực hiện tách từ

Bước 2: Lưu dữ liệu đã tách từ xuống collection WordSegmentation trong database DBTuyenSinh.

Hình 3.9: Dữ liệu đã được tách từ

3.1.5 Đánh chỉ mục và tìm kiếm

Thực hiện quá trình đánh chỉ mục và tìm kiếm bằng thư viện Whoosh của Python.

Quá trình đánh chỉ mục:

Hình 3.10: Mô hình đánh chỉ mục

Bước 1: Lấy dữ liệu từ collection WordSegmentation trong database DBTuyenSinh và tạo thư mục Data_index để lưu chỉ mục.

Bước 2: thực hiện đánh chỉ mục nội dung bao gồm cả câu hỏi và trả lời, sau đó lưu các document vào index trong thư mục Data_index.

Hình 3.11: Thư mục lưu trữ chỉ mục

Hình 3.12: Mô hình hoạt động tìm kiếm

Bước 1: Người dùng nhập câu hỏi về vấn đề tuyển sinh Hệ thống tiếp nhận câu hỏi.

Bước 2: Thực hiện tách từ cho câu hỏi của người dùng.

Bước 3: Loại bỏ stop word trong câu hỏi của người dùng Nếu dữ liệu stop word chưa có có thể vào console python để download:

Hình 3.13: Danh sách stop word các từ vựng

Stop word chúng ta download về có chứa các file stop word của một số tiếng như Anh, Pháp, Itali, nhưng không may lại không có stopwword tiếng Việt. Chúng có thể bổ xung thêm vào danh sách những stop word tiếng Việt như:

['bị', 'bởi', 'cả', 'các', 'cái', 'cần', 'càng', 'chỉ', 'chiếc', 'cho', 'chứ', 'chưa', 'chuyện', 'có', 'có_thể', 'cứ', 'của', 'cùng', 'cũng', 'đã', 'đang', 'đây', 'để', 'đến_nỗi', 'đều', 'điều', 'do', 'đó', 'được', 'dưới', 'gì', 'khi', 'không', 'lại', 'lên', 'lúc', 'mà', 'mỗi', 'một_cách', 'này', 'nên', 'nếu', 'ngay', 'nhiều', 'như', 'nhưng', 'những', 'nơi', 'nữa', 'phải', 'qua', 'ra', 'rằng', 'rất', 'rồi', 'sau', 'sẽ', 'so', 'sự', 'tại', 'theo', 'thì', 'trên', 'trước', 'từ', 'từng', 'và', 'vẫn', 'vào', 'vậy', 'vì', 'việc', 'với', 'vừa']

Bước 4: Truyền câu hỏi đã qua xử lý ở bước 2 và 3 vào câu query và dùng phương thức search() để thực hiện tìm kiếm trên dữ liệu đã đánh chỉ mục và trả về kết quả tìm thấy.

Bước 5: Lấy kết quả có được sau khi thực hiện tìm kiếm để tiến hành tính độ tương đồng.

Ví dụ người dùng nhập vào câu hỏi sau: “Cho em hỏi là điểm thi đại học của em dưới điểm sàn thì có được nộp nguyện vọng 2 vào các trường cao đẳng không ?”

Tiền xử lý câu hỏi với việc tách từ, loại bỏ stop word đối với câu hỏi sẽ cho ra kết quả: “điểm thi đại_học điểm sàn nộp nguyện_vọng 2 trường cao_đẳng” Và có 5 kết quả trả về sau khi thực hiện tìm kiếm bằng thư viện whoosh:

Hình 3.14: Kết quả thực hiện tìm kiếm

Khi thực hiện tìm kiếm dựa trên chỉ mục sẽ trả về nhiều kết quả có lẫn kết quả có độ chính xác đúng hoặc gần đúng nhất và kết quả không phù hợp, vì vậy để đạt được hiệu quả tối đa trong việc xuất kết quả cho người dùng chúng ta cần qua bước chọn lọc các tài liệu có liên quan nhất bằng phương pháp tính độ tương đồng, hệ thống sẽ thực hiện phương pháp tính độ đo Cosine.

Tiến hành tính độ tương đồng cần:

Bước 1: Nhận các tài liệu trả về từ việc tìm kiếm của thư viện whoosh. Bước 2: Tính độ tương đồng của các tài liệu trả về:

Bước 3: Sắp xếp các tài liệu giảm dần theo hệ số tương đồng và hiển thị một nữa số tài liệu có hệ số cao nhất cho người dùng.

Ví dụ câu truy vấn có 5 kết quả trả về từ bước tìm kiếm, sau khi thực hiện tính độ tương đồng sẽ trả về 3 câu có hệ số tương đồng cao nhất.

Hình 3.15: Kết quả thực hiện tính độ tương đồng

Kết quả thực nghiệm

Tiến hành thực nghiệm để có cái nhìn tổng quát về hướng phát triển của đề tài cũng như đưa ra những cải tiến để nâng độ chính xác và hiệu suất cho chương trình.

Thực hiện truy vấn trên hệ thống và lập bảng số liệu để phân tích Trong đó: Tỷ lệ chính xác được tính dựa trên số lượng câu trả lời phù hợp so với số lượng kết quả trả về sau khi tính độ tương đồng.

STT Câu truy vấn Số lượng Số lượng Số lượng Tỷ lệ kết quả kết quả kết quả chính tìm kiếm tính độ phù hợp xác(%) tương đồng

1 Cho em hỏi là 5 4 2 50% điểm thi đại học của em dưới điểm sàn thì có được nộp nguyện vọng

2 vào các trường cao đẳng không ?

2 Năm nay bỏ điểm 1 1 1 100% sàn thì có lấy nguyện vọng không ạ

Bảng 11: Thử nghiệm với câu truy vấn Đánh giá: Độ chính xác và số lượng kết quả của việc tìm kiếm dựa vào lượng dữ liệu rút trích được, nếu lượng dữ liệu lớn, độ chính xác càng cao.

Trong tiếng Việt việc tìm kiếm tài liệu giữa tiếng Việt có dấu, không dấu, sai chính tả sẽ dẫn đến kết quả khác nhau.

Kết quả đạt được

Tiến hành thực nghiệm để có được kết quả chính xác về các mô hình và sự chính xác của dữ liệu sử dụng trong đề tài Dựa vào kết quả đó nhóm sẽ có cái nhìn tổng quát về hướng phát triển của đề tài cũng như đưa ra những cải tiến để nâng độ chính xác và hiệu suất cho chương trình chính của đề tài.

– Rút trích được dữ liệu từ các trang web – Tách từ tiếng Việt

– Tiền xử lý dữ liệu rút trích – Đánh chỉ mục và tìm kiếm – Tính độ tương đồng giữa hai văn bản

Những vấn đề còn tồn tại

Lượng dữ liệu rút trích được còn ít làm ảnh hưởng đến quá trình tìm kiếm

Do trong quá trình phân tích tiếng Việt gặp nhiều vấn đề với dữ liệu rút trích (có dấu, không dấu, sai chính tả, …) làm ảnh hưởng đến kết quả truy vấn.

Thực hiện tính độ tương đồng trên cosine chưa giải quyết được vấn đề quan hệ ngữ nghĩa giữa các mục từ, từ đồng nghĩa việc này ảnh hưởng đến kết quả tìm kiếm làm cho số lượng kết quả ít, hiệu quả chưa cao Chỉ số làm mịn độ tương đồng cần thực hiện vì trong tiếng việt những từ như “là”, “thì”, … không mang nội dung văn bản nhưng lại ảnh hưởng đến chỉ số tính độ tương đồng tf làm ảnh hưởng đến kết quả tìm kiếm và tính độ tương đồng.

Hướng phát triển

- Xây dựng hệ thống rút trích tự động dữ liệu từ các trang web thuộc nhiều lĩnh vực khác nhau.

- Xây dựng kho dữ liệu tổng hợp thông tin lớn để tối ưu quá trình tìm kiếm và đạt được nhiều kết quả tối ưu hơn.

- Phân tích làm mịn hệ số tương đồng trong tính độ tương đồng.

- Thực hiện tính độ tương đồng thông qua quan hệ ngữ nghĩa giữa các mục từ, từ đồng nghĩa, để xét độ tương đồng giữa các câu tốt hơn.

- Xây dựng thành một hệ thống mạng xã hội cho phép mọi người tìm kiếm thông tin nhanh hơn, tổng hợp hơn.

- Đánh giá xu hướng chọn ngành, dự đoán xu hướng chọn ngành dựa trên dữ liệu đã thu thập.

Ngày đăng: 11/10/2023, 20:52

HÌNH ẢNH LIÊN QUAN

Hình 2.2. Sao chép XPath từ trình duyệt Chrome. - Nghiên cứu các kỹ thuật rút trích thông tin web và phát triển hệ thống tư vấn tuyển sinh tự động
Hình 2.2. Sao chép XPath từ trình duyệt Chrome (Trang 21)
Bảng 3. Một số phương thức sử dụng chủ yếu trong module re của python - Nghiên cứu các kỹ thuật rút trích thông tin web và phát triển hệ thống tư vấn tuyển sinh tự động
Bảng 3. Một số phương thức sử dụng chủ yếu trong module re của python (Trang 26)
Hình 2.4: Một số ví dụ về module re trong python - Nghiên cứu các kỹ thuật rút trích thông tin web và phát triển hệ thống tư vấn tuyển sinh tự động
Hình 2.4 Một số ví dụ về module re trong python (Trang 27)
Hình 2.5: Những thành phần chính và cách thức hoạt động của Scrapy framework - Nghiên cứu các kỹ thuật rút trích thông tin web và phát triển hệ thống tư vấn tuyển sinh tự động
Hình 2.5 Những thành phần chính và cách thức hoạt động của Scrapy framework (Trang 28)
Hình 2.7: Các phần của selenium - Nghiên cứu các kỹ thuật rút trích thông tin web và phát triển hệ thống tư vấn tuyển sinh tự động
Hình 2.7 Các phần của selenium (Trang 31)
Bảng 4: Các phương thức định vị phần tử trong selenium - Nghiên cứu các kỹ thuật rút trích thông tin web và phát triển hệ thống tư vấn tuyển sinh tự động
Bảng 4 Các phương thức định vị phần tử trong selenium (Trang 33)
Hình 2.8: Ví dụ sử dụng selenium - Nghiên cứu các kỹ thuật rút trích thông tin web và phát triển hệ thống tư vấn tuyển sinh tự động
Hình 2.8 Ví dụ sử dụng selenium (Trang 34)
Hình 2.10: Mô hình Parse tree - Nghiên cứu các kỹ thuật rút trích thông tin web và phát triển hệ thống tư vấn tuyển sinh tự động
Hình 2.10 Mô hình Parse tree (Trang 37)
Hình 2.11: Ví dụ Information Extraction - Nghiên cứu các kỹ thuật rút trích thông tin web và phát triển hệ thống tư vấn tuyển sinh tự động
Hình 2.11 Ví dụ Information Extraction (Trang 38)
Hình 2.13: Ví dụ Sentiment Analysis - Nghiên cứu các kỹ thuật rút trích thông tin web và phát triển hệ thống tư vấn tuyển sinh tự động
Hình 2.13 Ví dụ Sentiment Analysis (Trang 39)
Hình 2.14: Ví dụ Bag of Words - Nghiên cứu các kỹ thuật rút trích thông tin web và phát triển hệ thống tư vấn tuyển sinh tự động
Hình 2.14 Ví dụ Bag of Words (Trang 39)
Hình 2.15: Ví dụ Latent Dirichlet Allocation - Nghiên cứu các kỹ thuật rút trích thông tin web và phát triển hệ thống tư vấn tuyển sinh tự động
Hình 2.15 Ví dụ Latent Dirichlet Allocation (Trang 40)
Bảng 5: Thuật ngữ trong xử lý ngôn ngữ tự nhiên - Nghiên cứu các kỹ thuật rút trích thông tin web và phát triển hệ thống tư vấn tuyển sinh tự động
Bảng 5 Thuật ngữ trong xử lý ngôn ngữ tự nhiên (Trang 42)
Hình 2.22: Biểu đồ thể hiện tần xuất của 30 từ được dùng nhiều nhất trong text1 - Nghiên cứu các kỹ thuật rút trích thông tin web và phát triển hệ thống tư vấn tuyển sinh tự động
Hình 2.22 Biểu đồ thể hiện tần xuất của 30 từ được dùng nhiều nhất trong text1 (Trang 47)
Hình 2.29: Word Tokenization trong nltk - Nghiên cứu các kỹ thuật rút trích thông tin web và phát triển hệ thống tư vấn tuyển sinh tự động
Hình 2.29 Word Tokenization trong nltk (Trang 50)
Hình 2.46: Mô hình truy vấn vector - Nghiên cứu các kỹ thuật rút trích thông tin web và phát triển hệ thống tư vấn tuyển sinh tự động
Hình 2.46 Mô hình truy vấn vector (Trang 58)
Hình 2.47: Kiến trúc hệ thống - Nghiên cứu các kỹ thuật rút trích thông tin web và phát triển hệ thống tư vấn tuyển sinh tự động
Hình 2.47 Kiến trúc hệ thống (Trang 63)
Hình 2.48: Mô hình chương trình tư vấn tuyển sinh tự động - Nghiên cứu các kỹ thuật rút trích thông tin web và phát triển hệ thống tư vấn tuyển sinh tự động
Hình 2.48 Mô hình chương trình tư vấn tuyển sinh tự động (Trang 64)
Hình 3.1: Trang web hỏi đáp tuyển sinh - Nghiên cứu các kỹ thuật rút trích thông tin web và phát triển hệ thống tư vấn tuyển sinh tự động
Hình 3.1 Trang web hỏi đáp tuyển sinh (Trang 68)
Hình 3.2: Trang web bigschool - Nghiên cứu các kỹ thuật rút trích thông tin web và phát triển hệ thống tư vấn tuyển sinh tự động
Hình 3.2 Trang web bigschool (Trang 69)
Hình 3.3: Mô hình rút trích dữ liệu từ trang web - Nghiên cứu các kỹ thuật rút trích thông tin web và phát triển hệ thống tư vấn tuyển sinh tự động
Hình 3.3 Mô hình rút trích dữ liệu từ trang web (Trang 70)
Hình 3.4: Dữ liệu trong quá trình tiền xử lý - Nghiên cứu các kỹ thuật rút trích thông tin web và phát triển hệ thống tư vấn tuyển sinh tự động
Hình 3.4 Dữ liệu trong quá trình tiền xử lý (Trang 71)
Hình 3.6: Dữ liệu rút trích trong database - Nghiên cứu các kỹ thuật rút trích thông tin web và phát triển hệ thống tư vấn tuyển sinh tự động
Hình 3.6 Dữ liệu rút trích trong database (Trang 72)

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

w