Hình 18: Một tình huống nhập nhằng

Một phần của tài liệu Đồ án tốt nghiệp cơ sở dữ liệu bán hàng (Trang 51 - 55)

tách là "thuộc địa / bàn" và "thuộc / địa bàn". Ta có thể chỉ ra rất nhiều những cụm nhập nhằng trong tiếng Việt, chẳng hạn "tổ hợp âm tiết", "bằng chứng cớ",...

Trường hợp trong câu có âm tiết không nằm trong từ điển thì rõ ràng ôtômát âm tiết không đoán nhận được âm tiết này. Kết quả là đồ thị ta xây dựng từ câu đó là không liên thông. Dựa vào tính chất này, ta thấy rằng nếu đồ thị không liên thông thì dễ dàng phát hiện ra rằng đơn vị âm tiết không đoán nhận được không nằm trong từ điển âm tiết, tức nó bị viết sai chính tả hoặc là một đơn vị âm tiết (từ vựng) mới.

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

1. GIẢI PHÁP ĐỌC ĐỊNH DẠNG TÀI LIỆU

1.1Giao 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.2Chươ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

In

Dictionar

y?

Còn 1 từ

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 Câu cần tách

Cắt tiếng bên trái Giữ các từ đã cắt

Câu được cắt

Câu bên trái

Thêm từ mới vào mảng từ tách

Hình 19: Giải thuật tách từ từ câu

Một phần của tài liệu Đồ án tốt nghiệp cơ sở dữ liệu bán hàng (Trang 51 - 55)

Tải bản đầy đủ (DOC)

(85 trang)
w