Article:
Làm từ điển dựa trên full text search engine
2397
ngocdaothanh.myopenid.com 172Updated 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
.
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:
- 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"...
- 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?
Để 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
. 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:
- Introduction to FTS
- Getting Started With MySQL's FTS Capabilities
- FTS in PostgreSQL (có phần khái niệm chung rất hữu ích)
- Đọc Introduction to Information Retrieval xong là tự viết được FTS engine trong 1 ngày
Lựa chọn engine:
Sphinx:
- Sphinx: A Primer
- A Concise Guide to Using Thinking Sphinx
- Rails Thinking Sphinx Plugin: FTS that’s Cooler than a Polar Bear’s Toenails
- Hướng dẫn sử dụng Thinking Sphinx
Sphinx và ngôn ngữ không phải tiếng Anh:
172
