Tải bản đầy đủ (.docx) (4 trang)

PHẦN III GIẢI PHÁP KỸ THUẬT

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (195.27 KB, 4 trang )

PHẦ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ụ Định chỉ
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ương mạ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). Giao diệ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ài liệu office, tài liệu
pdf…hay cũng của dụng dạng file text như html, xml, để trích rút những phần quan trong
của file. Mặc dù giao diện IFilter được sử dụng chủ yếu cho các mụ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ọi phương
thức LoadIFilter và truy tìm theo dấu vết của các keys đăng ký trong registry trong quá
trình thực hiện đó. Chi tiết được thực hiện trong lớp FilterLoader. Khi một cặ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ại trong 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ện cá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.
 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ủa lớp
thực thi filter
private static IFilter LoadFilterFromDll(string dllName,
string filterPersistClass)
{
//Get a classFactory for our classID
IClassFactory classFactory=ComHelper.GetClassFactory(dllName,
filterPersistClass);
if (classFactory==null)
return null;
//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);
return (obj as IFilter);
}
 Cuối cùng, có một thực thể IFilter mà có thể thích hợp với lớp FilterReader
IPersistFile persistFile=(filter as IPersistFile);
if (persistFile!=null)
{
persistFile.Load(fileName, 0);
IFILTER_FLAGS flags;
IFILTER_INIT iflags =
IFILTER_INIT.CANON_HYPHENS |
IFILTER_INIT.CANON_PARAGRAPHS |

IFILTER_INIT.CANON_SPACES |
IFILTER_INIT.APPLY_INDEX_ATTRIBUTES |
IFILTER_INIT.HARD_LINE_BREAKS |
IFILTER_INIT.FILTER_OWNED_VALUE_OK;
if (filter.Init(iflags, 0, IntPtr.Zero, out
flags)==IFilterReturnCode.S_OK)
return filter;
}
2. GIẢI PHÁP TÁCH TỪ
2.1 Giả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ấu cá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ấu cá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 để tách ra những từ
quan trọng, tránh những từ mang ý nghĩa chung, hay chỉ là cảm thán.
2.2 Giải pháp cho Tiếng Việt
2.1.1 Các giải pháp đã có
Hiện có rất nhiều chương trình hỗ trợ việc phân tích cú pháp, tách từ, gán nhãn từ tiếng
Việt cùng với các giải thuật thuật toán khác nhau. Những đồ án được tham khảo là chương
trình Code_correct (chính xác loại văn bản dựa vào tập huấn luyện), chương trình
VNSegment của tác giả Phương Thái (chương trình khá hoàn chỉnh trong việc tách từ và
phân loại từ tiếng Việt. Chỉ có điều viết trên nền Java và không được cung cấp sourcode và
file thư viện), chương trình VNTokenizer (đề cập tới một số nghiên cứu hữu ích cho việc
tác từ).
2.1.2 Giải pháp sử dụng và nhận xét
Giải pháp được sử dụng được mô tả bằng giải thuật phía dưới. Dựa trên một bộ từ điển
tiếng Việt tương đối đầy đủ gồm hơn 99.000 từ và cụm từ.
Yes
No
No

Yes
Hình : Giải thuật tách từ từ câu
Tà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ới kiể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 được sắ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ác string
thuộc 1 phần tử nó giống nhau về âm tiết đầu tiên của từ. Ví dụ

ả đào ả đầu ả hoàn Nông nổi
ái
Ái Ái ân Ái chà Ái quốc Ái nam
ái nữ
Ái thần Ái tình
an
An cư lạc
nghiệp
An dưỡng An giấc
Anh
Anh chàng Anh hùng Anh hùng
chủ nghĩa
Anh kiệt Anh linh Anh vũ
Ăn

Ăn Ăn cắp Ăn trộm

Table : 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ử đầu tiê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ể.
Câu bên trái
Câu cần tách
In Dictionary?
Câu được cắt
Còn 1 từ
Cắt tiếng bên trái
Giữ các từ đã cắt
Stack
Thêm từ mới vào
mảng từ tách
3. GIẢI PHÁP LSA
Giải pháp LSA là một trong các giải pháp xử lý tài liệu về mặt ngữ nghĩa. Sau khi các thu
được bộ từ khóa cho từng văn bản, phương pháp LSA sẽ phân tích trên bộ từ khóa đó với
các văn bản khác để tìm ra mức độ tương đồng. Bộ từ khóa của một tài liệu và các tài liệu
còn lại sẽ hình thành ma trận độ tương đồng về nội dung. Phương pháp LSA sử dụng giải
thuật SVD để giảm chiều cho ma trận trên.
Chi 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ết thú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 đó. Khi ngườ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ười dù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ích vớ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 cung cấ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ủa tà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ác thứ 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ủa ngườ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ệt web để
hoạt động như bộ search engine. Nên giải pháp công nghệ được đề xuất là môi trường
.NET 2.0, hệ quản trị cơ sở dữ liệu MS SQL server 2005 để lưu trữ các index củ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ên mô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ức chức năng
được thiết kế trong modul Utilities…

×