Theo dõi và thu thập thông tin

Một phần của tài liệu Đánh giá và thu thập thông tin tự động trên internet sử dụng dịch vụ tìm kiếm (Trang 55)

Hệ thống theo dõi thông tin trên Internet về phía máy chủ chịu trách nhiệm theo dõi và thu thập thông tin gồm 4 package cơ bản: Controller, Model, DAO, và Util. Mỗi Package gồm các lớp và hàm chính nhƣ trong biểu đồ lớp sau:

Hình 3.1: Biểu đồ class của phía máy chủ.

Trong đó:

Package Controller: gồm hai lớp chính chịu trách nhiệm gửi truy vấn, lấy các

trang kết quả và trích xuất các tin bài từ mã nguồn của trang tìm kiếm đã đƣợc lấy về thông qua các hàm FetchPagevà extractTextFromGG .

Package Model: chứa các lớp là các mô hình của các đối tƣợng lƣu trữ và đối

tƣợng đƣợc dùng dể xử lý trong chƣơng trình.

Package DAO: chứa các lớp chịu trách nhiệm xử lý các truy vấn đến cơ sở dữ

liệu nhƣ thêm, xóa, cập nhật, …

*/

public boolean CheckExistsRecord(String key, String value, String

collectionName){

DBCollection collection = ConnectDB.ConnectToACollection( Config.DATABASE_INFORMATION,

collectionName);

DBObject query = new BasicDBObject(key, value); DBCursor result = collection.find(query);

if(result.size() > 0){ return true; } return false; } /*

* Ham tu tang _id trong mongodb */

public int getNextId(DBCollection seq, String seq_name){ String sequence_field = "seq";

DBObject query = new BasicDBObject();

query.put("_id", seq_name);

DBObject change = new BasicDBObject(sequence_field, 1); DBObject update = new BasicDBObject("$inc", change);

DBObject res = seq.findAndModify(query, new BasicDBObject(), new

BasicDBObject(), false, update, true, true);

return (int) (res.get(sequence_field)); }

/*

* this function insert record to database if it didn't exist */

public void InsertDBObjectToDB(ResultModel result, String collectionName, String seqName)

throws UnknownHostException, MongoException{

DBCollection collection = ConnectDB.ConnectToACollection( (adsbygoogle = window.adsbygoogle || []).push({});

Config.DATABASE_INFORMATION,

collectionName);

BasicDBObject bs = new BasicDBObject();

DBCollection seq = ConnectDB.ConnectToACollection( Config.DATABASE_INFORMATION,

seqName);

int a = getNextId(seq, "url"); bs.put("_id", a);

bs.put("title", result.getTitle());

bs.put("description", result.getDescription()); bs.put("displayUrl", result.getDisplayUrl()); bs.put("url", result.getUrl());

bs.put("sourceCode", result.getSourceCode());

Date time = new Date(); bs.put("time", time);

collection.save(bs);

System.out.println("insert successful"); }

/*

* This function update a document */

public void UpdateDBObjectToDB(String key, String value, ResultModel

result, String collectionName, String seqName) throws UnknownHostException,

MongoException{

DBCollection collection = ConnectDB.ConnectToACollection(

Config.DATABASE_INFORMATION,

collectionName);

DBCollection seq = ConnectDB.ConnectToACollection( Config.DATABASE_INFORMATION,

seqName);

DBObject oldOb = new BasicDBObject(key, value); BasicDBObject newOb = new BasicDBObject();

newOb.put("title", result.getTitle());

newOb.put("description", result.getDescription());

newOb.put("displayUrl", result.getDisplayUrl());

newOb.put("url", result.getUrl());

newOb.put("sourceCode", result.getSourceCode());

Date time = new Date(); (adsbygoogle = window.adsbygoogle || []).push({});

newOb.put("time", time);

collection.update(oldOb, newOb);

System.out.println("Update successful"); }

Package Util: chứa các lớp chịu trách nhiệm liên kết với cơ sở dữ liệu, và

chứa lớp cấu hình gồm các biến final dùng chung cho các lớp khác.

Hình 3.2: Biểu đồ tuần tự của phía máy chủ. 3.1.2. Quản lý người dùng

Phía máy khách là một ứng dụng web thực hiện chức năng giao tiếp với ngƣời dùng thông qua giao diện trên trình duyệt và qua mạng Internet. Một số chức năng chính mà ứng dụng web cung cấp cho ngƣời dùng sử dụng nhƣ sau:

Hình 3.3: Biểu đồ ca sử dụng của người dùng.

Mô tả một số ca sử dụng quan trọng:

Chức năng xem các kết quả:

- Mô tả: ca sử dụng mô tả việc ngƣời dùng theo dõi các kết quả tìm kiếm tự động của hệ thống.

- Luồng sự kiện: ca sử dụng bắt đầu khi ngƣời dùng đăng nhập thành công vào hệ thống. Trên ứng dụng web sẽ hiển thị danh sách các từ khóa mà ngƣời dùng đăng kí, khi click vào bất kì từ khóa nào, ứng dụng web sẽ hiển thị tất cả kết quả mới nhất liên quan.

- Quan hệ: ca sử dụng này phải <<include>> ca sử dụng đăng nhập. - Yêu cầu: ngƣời dùng đã đăng kí ít nhất 1 từ khóa.

Chức năng thêm từ khóa mới:

- Mô tả: ca sử dụng mô tả việc ngƣời dùng muốn thêm từ khóa tìm kiếm vào tài khoản của mình.

- Luồng sự kiện: ngƣời dùng chọn phần “Thêm từ khóa”. Sau đó nhập từ khóa mà mình mong muốn vào form.

- Quan hệ: ca sử dụng này phải <<include>> ca sử dụng đăng nhập. Chức năng dừng\bắt đầu theo dõi từ khóa:

- Mô tả: ca sử dụng mô tả việc ngƣời dùng muốn dừng theo dõi hoặc bắt đầu theo dõi một từ khóa đã dừng.

- Luồng sự kiện: ngƣời dùng chọn phần “Xem thông tin cá nhân” để xem thông tin chi tiết về tài khoản và các từ khóa của mình. Trong cột Status ngƣời dùng chọn “Started” để dừng theo dõi một từ khóa đang đƣợc theo dõi. Và “Stopped” để bắt đầu theo dõi một từ khóa đang bị dừng. - Quan hệ: ca sử dụng này phải <<include>> ca sử dụng đăng nhập. Ứng dụng web đƣợc xây dựng trên framework Struts 2 theo mô hình MVC nên các lớp đƣợc chia thành các tầng Model, Controller, View rõ ràng:

- Tầng Model chứa các model của hệ thống, tƣơng ứng với mỗi model sẽ là một bảng với các trƣờng tƣơng đƣơng trong hệ quản trị cơ sở dữ liệu MySQL. Gồm các class:

Bảng 3.1: Các class trong package Model

- Tầng Controller chứa các hàm điều khiển, so sánh. Tầng Action chứa

các action của hệ thống xử lý các yêu cầu từ các trang View của ngƣời dùng. Gồm các class sau:

Tên class Mô tả

ResultModel Gồm các thuộc tính của các tin bài kết quả: id,

title, description, displayUrl, url, sourceCode.

Keyword Gồm các thuộc tính của từ khóa: id, keyname.

User Gồm các thuộc tính của ngƣời dùng: id, username,

password, email.

TrendModel Gồm các thuộc tính của các từ khóa hot: trend_id, (adsbygoogle = window.adsbygoogle || []).push({});

Bảng 3.2: Các class trong package Controller

Tên class Mô tả

ArticleController

Xử lý các action liên quan đến các tin bài nhƣ hiển thị, phân trang, thêm, xóa từ khóa, ..

UserController

Xử lý các action liên quan đến ngƣời dùng nhƣ đăng kí tài khoản, đăng nhập đăng xuất.

- Tầng View là các JSP hiển thị giao diện, kết quả cho ngƣời dùng theo

dõi, tƣơng tác.

- Ngoài ra trong hệ thống theo dõi thông tin trên Internet còn có thêm một tầng DAO chịu trách nhiệm xử lý các truy vấn liên quan trực tiếp

đến cơ sở dữ liệu nhƣ các truy vấn SELECT, UPDATE, INSERT, … gồm các class:

Bảng 3.3: Các class của package DAO

Tên class Mô tả

ArticleDao Gồm các hàm xử lý việc lấy, thêm, update các trƣờng

dữ liệu trong cơ sở dữ liệu lƣu trữ các tin bài.

ReferenceDB Gồm các hàm xử lý việc truy vấn đến cơ sở dữ liệu

lƣu trữ các từ khóa.

UserDAO Gồm các hàm xử lý việc truy vấn đến cơ sở dữ liệu

quản lý ngƣời dùng.

- Và package Util chứa các hàm dùng chung của cả hệ thống nhƣ hàm

connect đến cơ sở dữ liệu, và file cấu hình, gồm các class:

Bảng 3.4: Các class của package Util

Tên class Mô tả

Config Chứa các biến final của chƣơng trình

ConnectDB Chứa hàm kết nối đến cơ sở dữ liệu MongoDB.

Mỗi class chứa các hàm để thực hiện các chức năng khác nhau. Trong đó có hai chức năng quan trọng cơ bản là hiển thị các kết quả tìm kiếm cho ngƣời dùng, và chức năng quản lý ngƣời dùng của hệ thống. Các class chính cho các chức năng hiển thị kết quả cho ngƣời dùng nhƣ trong biểu đồ lớp sau:

Hình 3.4: Biểu đồ lớp chức năng liên quan đến tin bài.

Vai trò của một số hàm chính trong biểu đồ lớp trong Hình 3.4 trên:

- Khi ngƣời dùng muốn xem các tin bài liên quan đến một từ khóa nào đó, lệnh thực hiện từ các tầng View là các trang jsp, nó sẽ gọi Action tƣơng ứng là retrieve() trong class ArticleAction. Action sẽ gọi hàm retrieve() của class ArticleController, lớp controller sẽ quyết định hành động tiếp theo của chƣơng trình, và cuối cùng trả về kết quả cho trang View.

- Ngƣời dùng có thể xem trực tiếp trang web gốc của kết quả, hoặc có thể xem bản sao lƣu mà hệ thống đã lƣu trữ tại thời điểm tìm kiếm thông qua action retrieveAContent().

Biểu đồ lớp của các chức năng quản lý ngƣời dùng: (adsbygoogle = window.adsbygoogle || []).push({});

Hình 3.5: Biểu đồ lớp của các chức năng quản lý người dùng.

Các hàm phục vụ một số chức năng chính nhƣ là

- Chức năng đăng nhập: ngƣời dùng sẽ gọi action login(), trƣớc tiên trong action đó sẽ gọi các hàm validateFromLogin() để kiểm tra định dạng của các trƣờng username và password. Sau đó sẽ quyết định hành động tiếp theo.

- Tƣơng tự với chức năng tạo ngƣời dùng mới, action register() sẽ hoạt động để kiểm tra định dạng của form. Sau đó sẽ quyết định hành động tiếp theo là cho phép đăng kí thành công, hoặc đăng kí thất bại.

- Chức năng thêm keyword mới vào danh sách các keywords của ngƣời dùng qua action addKeyword(). Tƣơng tự, hàm addKeyword() của tầng Controller sẽ đƣợc gọi và nó sẽ quyết định hành động tiếp theo. - Tƣơng tự nhƣ vậy, chức năng xóa keyword nào đó của ngƣời dùng qua

action deleteKeyword().

- Chức năng tạm dừng hoặc khởi động lại việc theo dõi một từ khóa nào đó thông qua Action changeStatus().

Ngoài ra, ứng dụng web còn lấy và hiển thị những từ khóa đƣợc tìm kiếm nhiều nhất đƣợc google thống kê trên Google xu hƣớng[3] thông qua lớp Action TrendsAction, và TrendsModel.

3.1.3. Quản lý dữ liệu hệ thống

Cơ sở dữ liệu là một phần không thể thiếu của bất cứ ứng dụng nào của ngày nay. Vì tầm quan trọng của nó nhƣ vậy mà việc lựa chọn các hệ quản trị cơ sở dữ liệu phù hợp với yêu cầu của bài toàn là hết sức quan trọng và cần cân nhắc kĩ. Nhƣ đã đƣợc trình bày trong chƣơng 1: cơ sở lý thuyết, hệ thống theo dõi thông tin trên Internet của tôi sử dụng hai hệ quản trị cơ sở dữ liệu, thứ nhất là hệ quản trị cơ sở dữ liệu MongoDB dùng để lƣu trữ các tin bài là kết qủa của tìm kiếm. Và thứ hai là hệ quản trị cơ sở dữ liệu MySQL để lƣu trữ quản lý ngƣời dùng. Sau đây tôi sẽ trình bày chi tiết về cấu trúc của hai cơ sở dữ liệu vừa nêu.

3.1.3.1. Cơ sở dữ liệu lưu trữ các tin bài

Sau khi phân tích những kết quả trả về từ các công cụ tìm kiếm, hệ thống đã bóc tách ra đƣợc những trƣờng thông tin quan trọng cần thiết phục vụ cho việc lƣu trữ các tin bài liên quan và hiển thị kết quả cho ngƣời dùng theo dõi. Các dữ liệu của của hệ thống đƣợc lƣu trữ dƣới dạng các tài liệu (document) trong hệ quản trị cơ sở dữ liệu MongoDB. Do có nhiều từ khóa nên tƣơng ứng với mỗi từ khóa hệ thống sẽ tự sinh ra một collection với các trƣờng là:

Bảng 3.5: Mô tả collection của cơ sở dữ liệu lưu tin bài Collection _id: int title: text description: text displayUrl: text url: text sourceCode: text time: datetime

Trong đó, mỗi trƣờng tƣơng ứng với các dữ liệu đã trích xuất từ những kết quả trả về của Google:

- Trƣờng _id: đƣợc gán duy nhất cho mỗi kết quả, đƣợc đánh tự tăng trong cơ sở dữ liệu.

- Trƣờng title: là tiêu đề của trang web kết quả.

- Trƣờng description: là mô tả ngắn gọn nội dung của trang web kết quả.

- Trƣờng displayUrl: hiển thị của liên kết đến trang web gốc. - Trƣờng url: là đƣờng dẫn đến trang web gốc.

- Ngoài các trƣờng trên là các trƣờng đƣợc lấy từ việc phân tích các kết quả trả về, ta có thêm trƣờng sourceCode là mã nguồn của các trang kết quả có url tƣơng ứng, và trƣờng time là thời gian lƣu trữ vào cơ sở dữ liệu.

3.1.3.2. Cơ sở dữ liệu quản lý người dùng

Với ƣu điển dễ dàng quản lý và lƣu trữ của các hệ quản trị cơ sở dữ liệu quan hệ, hệ thống đã sử dụng hệ quản trị cơ sở dữ liệu MySQL để quản lý ngƣời dùng, gồm các bảng:

Hình 3.6: Lược đồ cơ sở dữ liệu quản lý người dùng.

Trong cơ sở dữ liệu chứa các bảng:

- Bảng Users: chứa các thông tin cá nhân của ngƣời dùng trong đó gồm

Bảng 3.6: Mô tả các thuộc tính của quan hệ User

Tên cột Mô tả

Id Định danh của ngƣời dùng, do hệ thống tự sinh ra là duy nhất cho mỗi ngƣời dùng

Username Là tên mà ngƣời dùng đã đăng kí dùng để đăng nhập vào ứng dụng web.

password

Mật khẩu của ngƣời dùng, phải gồm ít nhất 6 kí tự. Hệ thống sử dụng mã hóa MD5 để mã hóa bảo vệ mật khẩu. (adsbygoogle = window.adsbygoogle || []).push({});

Email

Email của ngƣời dùng, mỗi ngƣời dùng chỉ sử dụng 1 địa chỉ mail duy nhất, sử dụng khi ngƣời dùng muốn khôi phục lại mật khẩu của mình trong trƣờng hợp ngƣời dùng quên mật khẩu.

- Bảng keywords chứa các từ khóa mà tất cả ngƣời dùng đăng kí với hệ thống gồm các trƣờng:

Bảng 3.7: Mô tả các thuộc tính của quan hệ keywords

Tên cột Mô tả

key_id Định danh duy nhất của mỗi từ khóa.

Keyname Tên của từ khóa.

- Do mối quan hệ giữa ngƣời dùng và từ khóa là quan hệ nhiều nhiều (một ngƣời dùng có thể có nhiều từ khóa, và một từ khóa có thể đƣợc đăng kí bởi nhiều ngƣời) nên sinh ra thêm một bảng nữa là

users_keywords là bảng tham chiếu từ ngƣời dùng với những từ khóa

Bảng 3.8: Mô tả các thuộc tính của quan hệ users_keywords

Tên cột Mô tả

User_id Định dinh duy nhất của ngƣời dùng.

Key_id Định danh duy nhất của từ khóa

Day_start

Thời gian mà từ khóa đƣợc đăng kí với hệ thống do ngƣời dùng.

Day_stop

Thời gian gần đây nhất mà từ khóa bị tạm dừng theo dõi.

Stt

Trạng thái của từ khóa, với stt = 1 nghĩa là từ khóa vẫn đang đƣợc theo dõi, stt = 0 là từ khóa đang bị tạm dừng.

- Ngoài ra hệ thống còn quản lý các từ khóa mà đang đƣợc tìm kiếm nhiều nhất trên Google do chính Google thống kê qua trang web Google. Xu hƣờng của mình bằng bảng trends gồm các trƣờng:

Bảng 3.9: Mô tả các thuộc tính của quan hệ trends

Tên cột Mô tả

Id Định danh duy nhất của từ khóa

Trend_name Tên của từ khóa.

Searches Số lƣợng tìm kiếm qua Google đƣợc thống kê

trên Google Xu hƣớng

url Liên kết đến trang Google tìm kiếm chính từ

khóa đó.

Timesave Thời gian lƣu vào cơ sở dữ liệu.

3.2. Công cụ đánh giá và thu thập thông tin tự động (adsbygoogle = window.adsbygoogle || []).push({});

3.2.1. Áp dụng thuật toán Knuth Morris Pratt trong đánh giá, đối sánh mẫu

Qua sự đánh giá và so sánh các thuật toán ở chƣơng 2, quá trình đối sánh theo thuật toán Knuth Morris Pratt nhƣ trên đƣợc ứng dụng theo các bƣớc để cài đặt vào phần mềm mã nguồn mở. Quá trình đánh giá sẽ đƣợc thực hiện nhƣ sau:

chƣơng trình sẽ thực hiện tìm kiếm thông tin với từ khóa đã đăng ký thông qua khả năng tìm kiếm của google, với những dữ liệu tìm thấy sẽ đƣợc lƣu trữ vào cơ sở dữ liệu của MongoDB. Sau 2 phút hệ thống sẽ tự động tìm kiếm lần thứ 2, kết quả tìm kiếm đƣợc sẽ đƣợc đối sánh với kết quả lần 1, với những thông tin trên một trang web đƣợc cập nhập thêm thông tin nào đó thì hệ thống sẽ update vào cơ sở dữ liệu, với những trang chƣa có trong cơ sở dữ liệu thì sẽ đƣợc lƣu trữ vào cơ sở dữ liệu, với những trang trùng với trang đã có trong cơ sở dữ liệu sẽ đƣợc bỏ qua để tránh trƣờng hợp trùng lặp dữ liệu.

3.2.2. Các công cụ phần mềm

Bảng sau trình bày về các công cụ, gói phần mềm, phiên bản của chúng mà tôi đã sử dụng để xây dựng hệ thống Theo dõi thông tin trên Internet.

Bảng 3.10: Các công cụ phần mềm

STT Tên công cụ Ghi chú

1 Eclipse SDK Môi trƣờng phát triển ứng dụng.

2 Apache Tomcat ver 7.0.34 Là server để chạy các ứng dụng java servlet.

3 Framework struts 2

Là framework hỗ trợ xây dựng ứng dụng web.

4 Jsoup ver 1.7.3

Thƣ viện java hỗ trợ việc parse mã nguồn HTML của các trang web và hỗ trợ việc phân tích cây DOM.

Một phần của tài liệu Đánh giá và thu thập thông tin tự động trên internet sử dụng dịch vụ tìm kiếm (Trang 55)