340 likes | 524 Views
Lucene. Thực hiện: Võ Thị Kim Sa – Phan Đức Nghĩa. Lucene. Analysis. 1. Analyzer. 2. Stemming Analysis. 3. 4. Synonym. Analysis. Khái niệm: Là quá trình tạo ra Token để chuẩn bị index Mỗi Token được ghi vào Index gọi là Term Cấu trúc Token : Text value Start, end offset
E N D
Lucene Thực hiện: Võ Thị Kim Sa – Phan Đức Nghĩa
Lucene Analysis 1 Analyzer 2 Stemming Analysis 3 4 Synonym
Analysis • Khái niệm: • Là quá trình tạo ra Token để chuẩn bị index • Mỗi Token được ghi vào Index gọi là Term • Cấu trúc Token: • Text value • Start, end offset • Token type: kiểu String mặc định là “word” • Position increment • Term: chỉ position increment của Token được giữ lại khi ghi vào Index trở thành Term
Analysis • Start end offset trong Token để làm gì? • Giúp việc highlight kết quả tìm kiếm, xác định được vị trí bắt đầu và kết thúc của việc highlight một từ • Đưa từ muốn tìm hiển thị trong kết quả tìm kiếm
Analysis • Ví dụ: phân tích Field chứa “the quick brown fox”
Analysis • Position increment: thể hiện sự mối liên hệ giữa một token với token trước đó • Token hơn token trước đó 1: đứng liền sau trong đoạn được phân tích • Token hơn token trước đó từ 1 trở lên: có từ đã bị loại bỏ
Analysis • Token bằng token trước đó: dùng trong trường hợp được đặt lại tên, thêm từ đồng nghĩa, gần nghĩa (alias) • Ví dụ:
Analysis • TokenStream: tập hợp các Token
Analysis • Tokenizer: • chịu trách nhiệm chuyển text thành các Token • được sử dụng đầu tiên trong quá trình Analysis • Input là Reader (một class để đọc các chuỗi ký tự, thuộc thư viện java.io.Reader) • TokenFilter: • Gắn kết các TokenStream • Biến đổi các TokenStream được đưa vào TokenFilter
Analysis • Các thao tác thông thường của TokenFilter: • Loại bỏ Stopword • Chuyển sang dạng lowercase • Đưa về dạng nguyên bản (“stem”). Ví dụ: Wi-Fi -> Wi Fi • Thêm từ đồng nghĩa, gần nghĩa. Ví dụ: “quick” có từ đồng nghĩa: “fast”, “rapid”
Lucene Analysis 1 Analyzer 2 Stemming Analysis 3 4 Synonym
Analyzer • Analyzer: tạo ra một TokenStream • Subclass cơ bản: • WhitespaceAnalyzer: chuyển input thành Token dựa trên khoảng trắng • SimpleAnalyzer: chuyển input thành lowercase. Ví dụ: TpHcm => tphcm • StopAnalyzer: chuyển input thành lowercase đồng thời loại bỏ stopword • StandardAnalyzer: chuyển input thành lowercase, loại bỏ stopword, và những thao tác loại bỏ khác như: loại bỏ dấu nháy, dấu chấm khỏi từ viết tắt. Ví dụ: “T.L.A” => “TLA”
Analyzer • Ví dụ 1: "The quick brown fox jumped over the lazy dogs" • WhitespaceAnalyzer: [The] [quick] [brown] [fox] [jumped] [over] [the] [lazy] [dogs] • SimpleAnalyzer: [the] [quick] [brown] [fox] [jumped] [over] [the] [lazy] [dogs] • StopAnalyzer:[quick] [brown] [fox] [jumped] [over] [lazy] [dogs] • StandardAnalyzer:[quick] [brown] [fox] [jumped] [over] [lazy] [dogs]
Analyzer • Ví dụ 2: "XY&Z Corporation - xyz@example.com“ • WhitespaceAnalyzer: [XY&Z] [Corporation] [-] [xyz@example.com] • SimpleAnalyzer: [xy] [z] [corporation] [xyz] [example] [com] • StopAnalyzer: [xy] [z] [corporation] [xyz] [example] [com] • StandardAnalyzer: [xy&z] [corporation] [xyz@example.com]
Analyzer Language Tính năng bổ sung N- gram Payload
Analyzer • Languages: chứa mã code UTF-8 • Non – English language: GermanAnalyzer, RussianAnalyzer • Asian language: tiếng Nhật, tiếng Hoa, tiếng Hàng… dùng CJKAnalyzer, ChineseAnalyzer
Analyzer • N - gram: nhóm một phần của “tiếng” thành những Token riêng biệt • Ví dụ: 2 – gram của “lucene”: Lu, uc, ce, en, ne • Giúp cho việc tìm kiếm trở nên dễ dàng hơn khi dữ liệu quá phức tạp hoặc khó tokenize
Analyzer • Payload: cho phép thêm một mảng dữ liệu binary vào bất kỳ Term trên Index
Lucene Analysis 1 Analyzer 2 Stemming Analysis 3 4 Synonym
Stemming Analysis • Stemming Analysis: là phương pháp đưa các từ về dạng nguyên bản • Ví dụ: “breathe”, “breathes”, “breathing”, “breathed” sẽ được đưa về thành “breath” • Có nhiều phương pháp Stemming Analysis như: Porter stemmer, Snowball (phương pháp stemming Analysis hỗ trợ nhiều ngôn ngữ), Kstem
Lucene Analysis 1 Analyzer 2 Stemming Analysis 3 4 Synonym
Synonym • Synonym: phương pháp tạo ra các từ đồng nghĩa, gần nghĩa với từ gốc • Được đặt cùng vị trí position increment với từ gốc • Giúp tìm ra những Document không chứa từ muốn tìm nhưng chứa những từ đồng nghĩa, gần nghĩa với từ muốn tìm • Class sử dụng: SynonymAnalyzer, SynonymFilter
Highlight • Highlight query term: • cho phép người dùng thấy được những từ muốn tìm ở kết quả tìm kiếm bằng cách làm nổi bật các từ đó
Highlight • Cách thức highlight: String text= "The quick brown fox jumps over the lazy dog"; TermQuery query = new TermQuery(new Term("field", "fox")); Scorer scorer = new QueryScorer(query); Highlighter highlighter = new Highlighter(scorer); TokenStream tokenStream = new SimpleAnalyzer().tokenStream("field", new StringReader(text)); System.out.println(highlighter.getBestFragment(tokenStream, text)); => Kết quả: The quick brown <B>fox</B> jumps over the lazy dog
Highlight • Analyzer đọctext, trả về một tokenStream (kiểu TokenStream) String text= "The quick brown fox jumps over the lazy dog"; TokenStream tokenStream = new SimpleAnalyzer().tokenStream("field“,new StringReader(text)); TermQuery query = new TermQuery(new Term("field", "fox")); • Để có thể highlight, term trong query phải giống với Token trong tokenStream
Analysis • Những từ giống nhau của query và tokenStream trở thành từ để highlight • Mỗi Token trong TokenStream chứa position, offset (dùng để highlight) • Highlighter chia nhỏ từ để highlight thành các fragment (mảnh) có kích thước bằng nhau, mặc định là 100 ký tự, dùng lớp Fragmenter Scorer scorer = new QueryScorer(query); Highlighter highlighter = new Highlighter(scorer); System.out.println(highlighter.getBestFragment(tokenStream, text));
Highlight • Nhiệm vụ chính của Scorer là sắp xếp (rank) các fragment • QueryScore sẽ sử dụng Term trongquery để đưa vào Highlighter • Term trong query phải ở dạng từ gốc (đã được stemming). Do đó trước khi đưa vào QueryScore dùng hàm Query.rewrite (IndexReader) để đưa Term trong query về dạng gốc
Highlight • Highlighter dùng SimpleHTMLFormatter để highlight các Term • SimpleHTMLFormatter dùng thẻ Bold cho những từ highlight
Demo • Mô tả dữ liệu • Cơ sở dữ liệu: “db_book” • Table: “tbl_book”
Demo • Các Field:
Demo • Dữ liệu mẫu: …
Demo • Kết quả thực hiện • Xem Demo
Cám Ơn ! www.themegallery.com