Vinova tuyển lập trình viên Mobile & Web ở Hà Nội, lương $300-1000

Article: Làm từ điển dựa trên full text search engine 2397

ngocdaothanh.myopenid.com 172
Updated over 2 years ago

Bản chất của từ điển là từ keyword do người dùng đưa ra lục tìm văn bản liên quan. Đây chính là nhiệm vụ của full text search (FTS) engine. Do đó, hoàn toàn có thể làm từ điển dựa trên FTS engine. Nếu đã có sẵn dữ liệu, thì dùng chiêu thức này giúp việc làm từ điển trở thành nhẹ tênh{#emotions_dlg.laughing}.

Bài viết này giới thiệu chung về FTS engine và chương trình từ điển webdictr do anh Nguyễn Duy Thọ viết, dùng Sphinx.

FTS là gì?

Search và text search thì dễ hiểu rồi, chỉ cần bật Notepad rồi ấn Ctrl+F là thấy. Còn full là gì? Theo Wikipedia thì full có nghĩa là search engine search theo từ chứ không đơn giản chỉ thô thiển dựa theo kí tự và có thêm nhiều tính năng cao cấp, ví dụ:

  • Văn bản chỉ chứa từ "drove", nhưng khi search với keyword "drive" thì vẫn ra.
  • Cho phép các toán tử như AND, OR.
  • Cho phép dùng wildcard, ví dụ search với keyword "s*x" thì sẽ ra văn bản chứa từ "sin".

Như vậy, mọi FTS engine đều có hai thành phần quan trọng sau:

  1. Phân tách các từ rời ra khỏi câu (tokenizer/analyzer). Ví dụ cho câu "The quick brown fox jumps over the lazy dog", thì engine sẽ tách ra các từ "quick", "brown", "fox", "jumps"...
  2. Gộp các từ có cùng gốc lại làm một (stemer). Ví dụ văn bản gồm nhiều từ "jumps", "jumped", "jumping", "jumper"... thì engine cũng gộp chúng lại thành từ gốc là "jump".

Hai cái trên phụ thuộc ngôn ngữ. Ví dụ:

  • Tiếng Anh có thể nhờ khoảng trắng để phân tách từ, nhưng tiếng CJK (Chinese, Japanese, Korean) lại phải dùng chiêu thức khác vì các từ viết dính sát nhau.
  • Tiếng Tàu không cần stemer nhưng tiếng Nhật lại cần.

Thường các engine đều được thiết kế tách làm 2 phần: phần không phụ thuộc ngôn ngữ và phần phụ thuộc ngôn ngữ. Khi muốn hỗ trợ thêm ngôn ngữ nào thì chỉ việc thêm tokenizer và stemer cho ngôn ngữ đó.

Khi cân nhắc chọn engine cho chương trình của mình, thì điều đầu tiên cần xét là xem thử engine đã có sẵn tokenizer và stemer cho ngôn ngữ mình cần không. Engine càng nổi (ví dụ Lucene) thì khả năng có sẵn là rất cao. Các engine đều hỗ trợ sẵn tiếng Anh. Nhờ có người Pháp mà tiếng Việt chuyển sang dùng hệ Latinh từ gần 400 năm nay, nên có thể dùng sẵn tokenizer và stemer của tiếng Anh để search, không cần viết thêm nếu không cần search quá chính xác. Bạn có tự hào là người Việt không?{#emotions_dlg.foot_in_mouth}

Để tìm hiểu thêm về FTS, nên nghịch engine nào đó có nhiều tài liệu, Lucene chẳng hạn.

webdictr

webdictr là chương trình từ điển có giao diện web, dùng Rails. Với chuơng trình Rails thì vài năm trước Ferret là số một, còn nay ngôi vị này thuộc về Sphinx vì 2 lí do dễ thấy: Ferret bị bêu rếu là có bug có thể làm hỏng thông tin index đã mất công tạo (không biết đã được sửa chưa) và Sphinx được tiếng là rất nhanh. Yếu tố dễ dùng không ăn thua vì cả 2 đều có plugin dễ dùng{#emotions_dlg.laughing}. Hiện có 2 plugin cho Sphinx hay được dùng là UltraSphinx và Thinking Sphinx. UltraSphinx cho phép thao tác với Sphinx nhiều hơn nhưng Think Sphinx được chuộng hơn vì dễ dùng hơn.

Sphinx hiện chưa có sẵn tokenizer và stemer cho ngôn ngữ khác tiếng Anh và Nga, nhưng dùng nó làm từ điển tiếng Việt thì không sao như phần trên đã giải thích.

[còn tiếp]

Tham khảo

Tìm hiểu chung về FTS:

Lựa chọn engine:

Sphinx:

Sphinx và ngôn ngữ không phải tiếng Anh:

Comments

You must login to be able to comment

Uploaded files

No file uploaded yet

You must login to be able to upload

Nhà tài trợ:

Mọi người đều tự do viết bài, sửa bài của người khác, và bình luận ở trang web này. Bạn muốn chủ động tạo bài mới để chia sẻ kinh nghiệm với mọi người? Xin click link ở dưới.

Create new content