So sánh các máy phân tích Lucene


104

Ai đó có thể vui lòng giải thích sự khác biệt giữa các máy phân tích khác nhau trong Lucene không? Tôi nhận được ngoại lệ maxClauseCount và tôi hiểu rằng tôi có thể tránh điều này bằng cách sử dụng KeywordAnalyzer nhưng tôi không muốn thay đổi từ StandardAnalyzer mà không hiểu các vấn đề xung quanh trình phân tích. Cảm ơn rất nhiều.

Câu trả lời:


209

Nói chung, bất kỳ bộ phân tích nào trong Lucene đều là bộ lọc tokenizer + stemmer + stop-words.

Tokenizer chia văn bản của bạn thành nhiều phần và vì các máy phân tích khác nhau có thể sử dụng các trình phân tích khác nhau, bạn có thể nhận được các luồng mã thông báo đầu ra khác nhau , tức là chuỗi các phần văn bản. Ví dụ: KeywordAnalyzerbạn đã đề cập hoàn toàn không tách văn bản và lấy tất cả trường làm mã thông báo duy nhất. Đồng thời, StandardAnalyzer(và hầu hết các máy phân tích khác) sử dụng dấu cách và dấu chấm câu làm điểm phân tách. Ví dụ, đối với cụm từ "Tôi rất hạnh phúc", nó sẽ tạo ra danh sách ["i", "am", "rất", "hạnh phúc"] (hoặc một cái gì đó tương tự). Để biết thêm thông tin về các trình phân tích / mã hóa cụ thể, hãy xem Tài liệu Java của nó .

Stemmers được sử dụng để lấy gốc của một từ được đề cập. Nó phụ thuộc nhiều vào ngôn ngữ được sử dụng. Ví dụ, đối với cụm từ trước đó bằng tiếng Anh sẽ có một cái gì đó như [ "i", "có", "veri", "happi"] được sản xuất, và cho Pháp "Je suis très Heureux" một số loại máy phân tích Pháp (như SnowballAnalyzer, khởi tạo với "tiếng Pháp") sẽ tạo ra ["je", "être", "tre", "heur"]. Tất nhiên, nếu bạn sử dụng trình phân tích của một ngôn ngữ này để tạo văn bản bằng ngôn ngữ khác, thì các quy tắc từ ngôn ngữ khác sẽ được sử dụng và trình gốc có thể tạo ra kết quả không chính xác. Nó không phải là lỗi của tất cả hệ thống, nhưng kết quả tìm kiếm sau đó có thể kém chính xác hơn.

KeywordAnalyzerkhông sử dụng bất kỳ trình tạo gốc nào, nó vượt qua tất cả các trường không bị sửa đổi. Vì vậy, nếu bạn định tìm kiếm một số từ trong văn bản tiếng Anh, bạn không nên sử dụng trình phân tích này.

Từ dừngnhững từ thường xuyên nhất và hầu như vô dụng. Một lần nữa, nó phụ thuộc rất nhiều vào ngôn ngữ. Đối với tiếng Anh, những từ này là "a", "the", "I", "be", "have", v.v. Bộ lọc từ dừng loại bỏ chúng khỏi luồng mã thông báo để giảm nhiễu trong kết quả tìm kiếm, vì vậy cuối cùng cụm từ của chúng tôi là "Tôi 'm rất vui "với StandardAnalyzersẽ được chuyển thành danh sách [" verify "," happiness "].

KeywordAnalyzermột lần nữa không làm gì cả. Vì vậy, KeywordAnalyzerđược sử dụng cho những thứ như ID hoặc số điện thoại, nhưng không được sử dụng cho văn bản thông thường.

Và đối với maxClauseCountngoại lệ của bạn , tôi tin rằng bạn sẽ hiểu được khi tìm kiếm. Trong trường hợp này hầu hết có lẽ là do truy vấn tìm kiếm quá phức tạp. Cố gắng chia nó thành nhiều truy vấn hoặc sử dụng các chức năng cấp thấp hơn.


1
@ffriend: Tôi không nghĩ Stemmer (sử dụng snowball hoặc các thuật toán khác) có thể chuyển đổi am -> là vì đó là công việc của Lemmatizer. Bạn có thể kiểm tra nó ở đây snowball.tartarus.org/demo.php
Tho

Vậy Tika phù hợp với điều này ở đâu? Về mặt kỹ thuật nó không phải là một máy phân tích sao?
anon

1
@anon: Tika là một dự án riêng biệt với một số tính năng chính. Giả sử ý bạn là trình phân tích cú pháp Tika, tôi muốn nói rằng Tika nhận luồng byte và xuất văn bản + siêu dữ liệu, trong khi các bộ phân tích Lucene lấy văn bản và xuất luồng mã thông báo đã xử lý. Ví dụ: trước tiên, bạn có thể phân tích cú pháp tệp PDF hoặc XML bằng Tika, tạo ra tài liệu có các trường như "tiêu đề", "tác giả" và "văn bản", sau đó phân tích một số hoặc tất cả các trường này bằng máy phân tích Lucene.

chỉ tự hỏi, "rất" và "hạnh phúc" không phải là những từ bị từ chối, tại sao chúng lại được chuyển thành "xác minh" và "vui vẻ"? nó có phù hợp với sự khác biệt của i <-> y vì chúng nghe giống nhau không?
oguzalb

0

Theo quan điểm của tôi, tôi đã sử dụng StandAnalyzerSmartCNAnalyzer. Vì tôi phải tìm kiếm văn bản bằng tiếng Trung. Rõ ràng SmartCnAnalyzerlà xử lý tiếng Trung tốt hơn. Đối với các mục đích khác nhau, bạn phải chọn bộ phân tích lãi suất.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.