Dưới đây là biểu đồ tiến trình.User W_Tìm kiếm QL_Tài liệu :Tài liệu Yêu cầu tìm kiếmtừ khoá Tìm kiếmtừ khoá Lấy tài liệu kết quả kết quả Hiển thị Hình 5: Biểu đồ tiến trình chức năng tì
Trang 1PHẦN III: GIẢI PHÁP KỸ THUẬT
1 GIẢI PHÁP ĐỌC ĐỊNH DẠNG TÀI LIỆU
1.1 Giao diện Ifilter
Giao diện Ifilter được thiết kế bởi Microsoft để sử dụng cho dịch vụ định chỉ số(Indexing Service) Mục đích chính của nó là trích rút phẩn text từ file để dịch vụ Địnhchỉ số có thể đánh chỉ số và tìm kiếm nó về sau Một vài phiên bản của Windows cótrình thực thi Ifilter cho các file office, cũng có những phiên bản miễn phí hoặc thươngmại cho việc đọc các loại file khác (pdf có bộ lọc Adobe PDF là phổ biến nhất) Giaodiện IFilter có thể được sử dụng trong các dạng không phải dạng text giống như các tàiliệu office, tài liệu pdf…hay cũng của dụng dạng file text như html, xml, để trích rútnhững phần quan trong của file Mặc dù giao diện IFilter được sử dụng chủ yếu cho cácmục đích trích rút text từ tài liệu, nó cũng được sử dụng trong các bộ máy tìm kiếm
Windows Desktop Search sử dụng các bộ lọc để đánh chỉ số cho file
Chi tiết công nghệ của giao diện IFilter không được tiết lộ bởi Microsoft Phần sauđây, tôi giới thiệu cách phần mềm được chọn sử dụng giao diện IFilter để đọc file nhưthế nào
1.2 Chương trình EPocalipse.IFilter
Để thực hiện một việc tách từ, đơn giản sử dụng:
TextReader reader=new FilterReader(fileName);
using (reader)
{
textBox1.Text=reader.ReadToEnd();
}
Với fileName là đường dẫn tuyệt đối của file được định vị trên ổ cứng
Quá trình thực thi nhận dạng extension của file được thực hiện như sau: Gọiphương thức LoadIFilter và truy tìm theo dấu vết của các keys đăng ký trong registrytrong quá trình thực hiện đó Chi tiết được thực hiện trong lớp FilterLoader Khi mộtcặp lớp/DLL được tìm thấy cho mở rộng của file đó, các thông tin này được lưu lạitrong cach để tránh việc phải đọc lại registry
Khi có tên của DLL và ID của lớp thực hiện cho bộ lọc, lớp ComHelper thực hệncác công việc sau:
Tải dll sử dụng phương thức LoadLibrary trong API của Win32
Gọi phương thức GetProcAddress để lấy một con trở tới hàm
DllGetClassObject.
Trang 2 Sử dụng Marshal.GetDelegateForFunctionPointer() để chuyển con trỏhàm tới một delegate Chú ý, chỉ available trong NET 2.0
Gọi hàm DllGetClassObject để nhận một đối tượng IclassFactory
Khi có một đối tượng IClassFactory , ta sử dụng nó để tạo một các instance củalớp thực thi filter
private static IFilter LoadFilterFromDll(string dllName,
//And create an IFilter instance using that class factory
Guid IFilterGUID=new Guid("89BCB740-6119-101A-BCB7-00DD010655AF"); Object obj;
classFactory.CreateInstance(null, ref IFilterGUID, out obj);
2.1Giải pháp tách từ Tiếng Anh
Với các tài liệu tiếng Anh, từ của tiếng Anh được phân cách với nhau bằng dấucách Điều đó có nghĩa là chúng ta có thể tách từ tiếng Anh bằng dấu phân tách là dấucách Việc xử lý các stopword của tiếng anh thì chúng tôi cũng có một file gồm hơn
300 từ stopword của tiếng Anh để phục vụ cho việc loại bỏ stopword khỏi văn bản tách
Trang 3In Dictionar
Còn 1 từ
để tách ra những từ quan trọng, tránh những từ mang ý nghĩa chung, hay chỉ là cảmthán
2.2Giải pháp cho Tiếng Việt
Yes
Hình 1: Giải thuật tách từ từ câu
Câu bên trái Câu cần tách
Trang 4Tài liệu được tách thành các câu chuẩn (hoàn chỉnh) Giải thuật tách các từ khóa từ các câu đó.Các từ trong câu sẽ được kiểm tra xem có tồn tại trong từ điển không bằng các so sánh nó với
các từ trong từ điển Nếu nó “giống” từ trong từ điển, thì tách từ đó và kiểm tra tiếp Giải thuật
trên giảm thiểu tối đa tình huống nhập nhằng Tuy nhiên trong trường hợp câu này thì giải
thuật tách sai: Học sinh học sinh học Học|sinh học|sinh học Nhưng như tình huống này
(thuộc địa bàn) thì lại giải quyết tốt (thuộc|địa bàn).
Chi phí về thời gian cho giải thuật trên là rất lớn ở bước kiểm tra từ tách ra có trong
từ điển hay không Từ điển với hơn 99.000 từ được load vào bộ nhớ trong dưới vớikiểu dữ liệu được tổ chức theo 2 kiểu như sau:
Một là mảng các string Mỗi phần tử là từ hay cụm từ của từ điển Mảng này đượcsắp xếp theo thứ tự tăng dần của mã ASCII (Trong C#, kiểu dữ liệu mảng nó
Tổ chức thành một arraylist mà mỗi phần tử của nó là mảng các string Mảng cácstring thuộc 1 phần tử nó giống nhau về âm tiết đầu tiên của từ Ví dụ
An giấc
Anh Anh chàng Anh hùng Anh hùng
chủ nghĩa
Anh kiệt Anh linh Anh vũ
…
Table 1: Bảng một số ví dụ về cấu trúc lưu trữ từ điển
Khi đọc một từ, ta tách âm tiết đầu tiên của nó và kiểm tra trước với các phần tử đầutiên của mảng, sau đó, kiểm tra tiếp với các phần tử trong mảng của nó Khi đó, nó sẽtăng tốc độ tìm kiếm lên đáng kể
Trang 5Chi tiết về giải pháp này xin tham khảo ở đồ án của bạn Cường.
4 GIẢI PHÁP PHÂN TÍCH NGƯỜI DÙNG
Một phiên làm việc được bắt đầu từ khi người dùng search với một từ khóa và kếtthúc bằng việc search bộ từ khóa mới Phân tích lịch sử truy cập của người dùng làphân tích độ yêu thích của họ với các tài liệu khác khi đọc một tài liệu nào đó Khingười dùng click vào những tài liệu gợi ý Cs (tài liệu được hệ thống đưa ra khi ngườidùng quyết định đọc một tài liệu nào đó - A), hệ thống sẽ cập nhật mức độ yêu thíchvới các tài liệu gợi ý C(một trong các Cs) của tài liệu A Ngoài ra, hệ thống còn cungcấp chức năng khảo sát để thu thập ý kiến của người dùng về mức độ tương đồng củatài liệu C so với tài liệu A Các dữ liệu này sẽ được hệ thống xử lý để quyết định cácthứ tự ưu tiên cho các tài liệu gợi ý trong những lần làm việc sau
Một phương pháp nữa để thu hẹp bộ lọc là thu thập các thông tin về sở thích củangười dùng về các tiêu chí lĩnh vực nào đó Khi đăng ký tài khoản với hệ thống, hệthống sẽ ghi nhận các sở thích ứng với người dùng đó, dùng làm các thông tin phục vụcho bộ lọc các kết quả trả về trong màn hình tìm kiếm cho người dùng
5 GIẢI PHÁP CÔNG NGHỆ
Như tên đề tài đã phản ánh, hệ thống sẽ như một modul tích hợp trên trình duyệtweb để hoạt động như bộ search engine Nên giải pháp công nghệ được đề xuất là môitrường NET 2.0, hệ quản trị cơ sở dữ liệu MS SQL server 2005 để lưu trữ các indexcủa tài liệu thu thập được Giao diện quản trị và người dùng được xây dựng dựa trênmôi trường web với ngôn ngữ ASP.Net và mã nguồn C#
Chương trình cũng sử dụng kiến trúc 3 tầng để trao đổi với CSDL Modul DAL xử
lý các trao đổi Database và Dataset, dataadapter Modul BLL thực hiện việc chuyển các
đổ dữ liệu từ các dataset vào các kiểu dữ liệu của lớp giao diện xử lý Các phương thứcchức năng được thiết kế trong modul Utilities…
Trang 6PHẦN IV: XÂY DỰNG CHƯƠNG TRÌNH, CÀI
ĐẶT CHẠY DEMO
1 PHÂN TÍCH HỆ THỐNG
1.1 Mô hình use-case và đặc tả use-case
Tìm kiếm tài liệu theo ngữ nghĩa
Người dùng
Quản trị Tìm kiếm
RID: Module phân tích tài liệu thành từ khoá, và trích rút từ khoá đặc trưng cho nội dung văn bản.
LSA: Module sử dụng để so sánh nội dung văn bản bằng ngữ nghĩa.
Corr: Module dánh giá độ tương đồng nội dung văn bản.
Đăng ký người dùng Cập nhập Thông tin người dùng
«uses» Phân tích logfile
Cập nhập tài liệu liên quan
«uses»
Quản lý tác giả
Quản trị danh mục
Hình 2: Biểu đồ use-case hệ thống
Trang 7Dưới đây là biểu đồ tiến trình.
User W_Tìm kiếm QL_Tài liệu :Tài liệu
Yêu cầu tìm kiếm(từ khoá)
Tìm kiếm(từ khoá) Lấy tài liệu()
kết quả kết quả
Hiển thị()
Hình 5: Biểu đồ tiến trình chức năng tìm kiếm
Trang 8Use-case quản lý tài liệu
+Chi tiết tài liệu() : void +Thông tin
W_Tài liệu
Admin
+Thêm() : int +Sửa() : int +Xoá() : int -ID tài liệu : int
QL_Tài liệu
+Thêm() : int +Sửa() : int +Xoá() : int +Danh sách TL
W_Danh sách tài liệu
TT_Tài liệu
1*
+Đăng nhập() -username -pass
/ Kiểm tra(user/pass)
W_Tài liệu
T h ê m ()
S ử a X o á ()()
kết quả
Kết quả Kết quả
Hình 7: Biểu đồ cộng tác
Trang 9Chức năng thêm mới tài liệu:
Admin W_Admin W_Tài liệu QL_Tài liệu TT_Tài liệu Đăng nhập(user/pass)
kiểm tra(user/pass) yêu cầu chọn thao tác
Thêm mới()
Thêm mới()
Thêm mới() kết quả Kết quả
kết quả hiển thị danh sách TL()
Hình 8: Biểu đồ tiến trình chức năng thêm mới tài liệu
Chức năng sửa tài liệu:
Đăng nhập(user/pass)
kiểm tra(user/pass) yêu cầu chọn thao tác
Chọn chỉnh sửa tài liệu
Chọn tài liệu() Danh sách tài liệu()
Lấy tài liệu(id)
Lấy tài liệu(id) kết quả Kết quả
hiển thị() Chỉnh sửa()
Chỉnh sửa()
Sửa() kết quả kết quả
kết quả
Hình 9: Biểu đồ tiến trình chức năng sửa tài liệu
Trang 10Chức năng xoá tài liệu:
Admin W_Admin W_tài liệu QL_Tài liệu TT_Tài liệu Đăng nhập(user/pass)
kiểm tra(user/pass) yêu cầu chọn thao tác
Chọn chỉnh sửa tài liệu
Chọn tài liệu() Danh sách tài liệu()
Thao tác Xoá()
Xoá(id)
Xoá(id) kết quả kết quả
/ Kiểm tra(user/pass)
W_Tài liệu
T h ê m ()
S ử a X o á ()()
kết quả
Kết quả Kết quả
Hình 11: Biểu đồ cộng tác quản lý tài liệu
Trang 11Use-case quản lý tác giả
+Chi tiết tài liệu() : void +Thông tin
W_Tác giả
Admin
+Thêm() : int +Sửa() : int +Xoá() : int -ID tác giả : int
QL_Tác giả
+Thêm() : int +Sửa() : int +Xoá() : int +Danh sách TG
- Chức năng thêm mới tác giả:
Admin W_Admin W_Tác giả QL_Tác giả TT_Tác giả Đăng nhập(user/pass)
kiểm tra(user/pass) yêu cầu chọn thao tác
Thêm mới()
Thêm mới()
Thêm mới() kết quả Kết quả
kết quả hiển thị danh sách TG()
Hình 13: Biểu đồ tiến trình thêm mới tác giả
Chức năng sửa thông tin tác giả:
Trang 12Admin W_Admin W_Tác giả QL_Tác giả TT_Tác giả Đăng nhập(user/pass)
kiểm tra(user/pass) yêu cầu chọn thao tác
Chọn chỉnh sửa tác giả
Chọn tác giả() Danh sách tác giả()
Lấy tác giả(id)
Lấy tác giả(id) kết quả Kết quả
hiển thị() Chỉnh sửa()
Chỉnh sửa()
Sửa() kết quả
kết quả kết quả
Hình 14: Biểu đồ tiến trình sửa tác giả
Chức năng xoá tác giả:
Admin W_Admin W_Tác giả QL_Tác giả TT_Tác giả Đăng nhập(user/pass)
kiểm tra(user/pass) yêu cầu chọn thao tác
Chọn xoá tác giả Danh sách tác giả()
Thao tác Xoá()
Xoá(id)
Xoá(id) kết quả kết quả
kết quả
Hình 15: Biểu đồ tiến trình xóa tác giả
Trang 13/ Kiểm tra(user/pass)
W_Tác giả
Thêm() Sửa() Xoá() kết quả
Kết quả
Kết quả
Hình 16: Biểu đồ cộng tác quản lý tác giả
Use-case quản lý nhà xuất bản
+Chi tiết NXB() : void +Thông tin
W_NXB
Admin
+Thêm() : int +Sửa() : int +Xoá() : int -ID NXb : int
QL_NXB
+Thêm() : int +Sửa() : int +Xoá() : int +Danh sách NXB
Trang 14Chức năng thêm mới NXB:
Đăng nhập(user/pass)
kiểm tra(user/pass) yêu cầu chọn thao tác
Thêm mới()
Thêm mới()
Thêm mới() kết quả Kết quả
kết quả hiển thị danh sách NXB()
Hình 18: Biểu đồ tiến trình thêm mới NXB
Chức năng chỉnh sửa thông tin NXB:
Đăng nhập(user/pass)
kiểm tra(user/pass) yêu cầu chọn thao tác
Chọn chỉnh sửa NXB
Chọn NXB() Danh sách NXB()
Lấy NXB(id)
Lấy NXB(id) kết quả Kết quả
hiển thị() Chỉnh sửa()
Chỉnh sửa()
Sửa() kết quả
kết quả kết quả
Hình 19: Biểu đồ tiến trình chỉnh sửa thông tin NXB
Trang 15Chức năng xoá NXB:
Admin W_Admin W_NXB QL_NXB TT_NXB Đăng nhập(user/pass)
kiểm tra(user/pass) yêu cầu chọn thao tác
Chọn xoá NXB Danh sách NXB()
Thao tác Xoá()
Xoá(id)
Xoá(id) kết quả kết quả
/ Kiểm tra(user/pass)
W_NXB
Thêm() Sửa() Xoá()
Trang 16+Xoá() : int +Danh sách User
W_Danh sách User TT_User
Chức năng thêm mới User:
User W_Đăng ký W_User QL_User TT_User Nhập thông tin()
kiểm tra(thông tin)
kết quả
Kiển tra tồn tại()
Hình 23: Biểu đồ tiến trình thêm mới user
Trang 17Chức năng chỉnh sửa thông tin:
User W_Đăng nhập W_User QL_User TT_User Đăng nhập(user/pass)
kiểm tra(user/pass) yêu cầu chọn thao tác
Chọn chỉnh sửa User Thông tin User()
Lấy User(id)
Lấy User(id) kết quả Kết quả
hiển thị() Chỉnh sửa()
Chỉnh sửa()
Sửa() kết quả kết quả
kết quả
Hình 24: Biểu đồ tiến trình chỉnh sửa user
Chức năng xoá User:
Admin W_Admin W_User QL_User TT_User Đăng nhập(user/pass)
kiểm tra(user/pass) yêu cầu chọn thao tác
Chọn xoá User Danh sách User()
Thao tác Xoá()
Xoá(id)
Xoá(id) kết quả kết quả
kết quả
Hình 25: Biểu đồ tiến trình xóa user
Trang 18/ Kiểm tra(user/pass)
W_User
T h m (
Sa (
X o (
kết quả Kết quả Kết quả
User
+Đăng ký() : bool +Đăng nhập() : bool -Thông tin user
W_Đăng ký/Đăng nhập
Đăng nhập() Đăng ký()
/ Kiểm tra(user/pass) Kết quả
Hình 26: Biểu đồ cộng tác quản lý user
Trang 192 A02 Danh mục cấp 1 Chứa các thông tin về loại của
tài liệu Danh mục phân cấp 2-3 Danh mục cấp 1 lớn nhất, 2
Trang 201-# Tên Tên thực thể Miêu tả
là danh mục con của danh mục cấp 1, 3 là danh mục con của danh muc cấp 2
7 A07 Danh mục cấp 2 Chứa các thông tin về loại của
tài liệu Danh mục phân cấp 2-3 Danh mục cấp 1 lớn nhất, 2
1-là danh mục con của danh mục cấp 1, 3 là danh mục con của danh muc cấp 2
8 A08 Danh mục cấp 3 Chứa các thông tin về loại của
tài liệu Danh mục phân cấp 2-3 Danh mục cấp 1 lớn nhất, 2
1-là danh mục con của danh mục cấp 1, 3 là danh mục con của danh muc cấp 2
10 A10 Cấu hình hệ thống Chứa các thông tin liên quan tới
cấu hình hoạt động của hệ thống
11 A11 Tài liệu liên quan Chứa những tài liệu liên quan
về mặt thống kế số lần được xem
12 A12 Kết quả phân tích LSA Chứa kết quả của phép phân
tích LSA
.Table 2: Bảng các thực thể chính
Trang 21Bảng các quan hệ thực thể
hoặc nhiều tác giả, một tác giả có thể có một hoặc nhiều tài liệu
xuất bản một hoặc nhiều cuốn sách Một cuốn sách chỉ do một nhà xuất bản sản xuất
một hoặc nhiều danh mục con cấp 2
một hoặc nhiều danh mục con cấp 3
liệu liên quan về mặt nội dung
LSA với các tài liệu khác
Table 3: Bảng quan hệ các thực thể
Danh sách bảng
1 A01 Tài liệu: Chứa thông
tin cơ bản của một tài liệu
CREATE TABLE [dbo].[A01] (
[A01_ID] [int] IDENTITY (1, 1) NOT NULL ,[A01_Name] [nvarchar] (100) NULL ,
[A01_Code] [char] (8) NOT NULL ,[A01_Description] [ntext] NULL ,[A05_ID] [int] NOT NULL ,[A01_DatePublished] [datetime] NULL ,[IsActive] [bit] NULL ,
[A01_LinkDown] [Varchar] NULL ,
Trang 222 A02 Danh mục cấp 1:
Chứa các thông tin về loại của tài liệu Danh mục phân cấp 1-2-3
Danh mục cấp 1 lớn nhất, 2 là danh mục con của danh mục cấp
1, 3 là danh mục con của danh muc cấp 2
CREATE TABLE [dbo].[A02] (
[A02_ID] [int] IDENTITY (1, 1) NOT NULL ,[A02_Name] [nvarchar] (50) NULL ,
[A02_Code] [char] (3) NOT NULL ,[IsActive] [bit] NULL
) ON [PRIMARY]
GO
3 A04 Tác giả: Chứa các
thông tin cơ bản về tác giả
CREATE TABLE [dbo].[A04] (
[A04_ID] [int] IDENTITY (1, 1) NOT NULL ,[A04_Name] [nvarchar] (100) NULL ,
[A04_Birthday] [datetime] NULL ,[A04_Address] [nvarchar] (100) NULL ,[A04_NativePlace] [nvarchar] (100) NULL ,[A04_Phone] [int] NULL ,
[A04_Email] [varchar] (100) NULL ,[IsActive] [bit] NULL
) ON [PRIMARY]
GO
4 A05 Nhà xuất bản: Chứa
các thông tin cơ bản
về nhà xuất bản
CREATE TABLE [dbo].[A05] (
[A05_ID] [int] IDENTITY (1, 1) NOT NULL ,[A05_Name] [nvarchar] (100) NULL ,
[A05_Address] [nvarchar] (100) NULL ,[A05_Phone] [int] NULL ,
[A05_Email] [varchar] (100) NULL ,[A05_Remark] [ntext] NULL ,
[IsActive] [bit] NULL
Trang 23# Tên Mô tả Lệnh SQL
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]GO
5 A06 Người dùng: Chứa
các thông tin cơ bản của người dùng
CREATE TABLE [dbo].[A06] (
[A06_ID] [int] IDENTITY (1, 1) NOT NULL ,[A06_Name] [nvarchar] (100) NULL ,
[A06_UseName] [nvarchar] (100) NOT NULL ,[A06_PassWord] [nvarchar] (100) NOT NULL ,[A06_Phone] [int] NULL ,
[A06_Email] [varchar] (100) NULL ,[IsActive] [bit] NULL
Danh mục cấp 1 lớn nhất, 2 là danh mục con của danh mục cấp
1, 3 là danh mục con của danh muc cấp 2
CREATE TABLE [dbo].[A07] (
[A07_ID] [int] IDENTITY (1, 1) NOT NULL ,[A07_Name] [nvarchar] (100) NULL ,
[A07_Code] [char] (5) NOT NULL ,[A02_ID] [int] NOT NULL ,
[IsActive] [bit] NULL ) ON [PRIMARY]
GO
7 A08 Danh mục cấp 3:
Chứa các thông tin về loại của tài liệu Danh mục phân cấp 1-2-3
Danh mục cấp 1 lớn nhất, 2 là danh mục con của danh mục cấp
1, 3 là danh mục con của danh muc cấp 2
CREATE TABLE [dbo].[A08] (
[A08_ID] [int] IDENTITY (1, 1) NOT NULL ,[A08_Name] [nvarchar] (100) NULL ,
[A08_Code] [char] (8) NOT NULL ,[A07_ID] [int] NOT NULL ,
[IsActive] [bit] NULL ) ON [PRIMARY]
GO
8 A09 Bảng quan hệ: Thành
lập quan hệ nhiều nhiều giửa bảng A01
và A04
CREATE TABLE [dbo].[A09] (
[A01_ID] [int] NOT NULL ,[A04_ID] [int] NOT NULL ) ON [PRIMARY]