2009-03-20 6 views
6

Có cách nào nhanh chóng và dễ dàng để nhận các tần suất từ ​​một chỉ số Lucene, mà không thực hiện nó thông qua lớp TermVectorFrequencies, vì phải mất rất nhiều thời gian cho các bộ sưu tập lớn?Nhận các tần số có thời hạn trong Lucene

Ý của tôi là, có gì đó giống như TermEnum không chỉ tần suất tài liệu mà còn là tần suất của cụm từ?

CẬP NHẬT: Sử dụng TermDocs quá chậm.

Trả lời

8

Sử dụng TermDocs để nhận tần suất cụm từ cho một tài liệu nhất định. Giống như tần suất tài liệu, bạn nhận được các tài liệu có kỳ hạn từ một số IndexReader, sử dụng thuật ngữ quan tâm.


Bạn sẽ không tìm thấy phương thức nhanh hơn TermDocs mà không mất đi một số tính tổng quát. TermDocs đọc trực tiếp từ tệp ".frq" trong phân đoạn chỉ mục, trong đó mỗi tần suất cụm từ được liệt kê theo thứ tự tài liệu.

Nếu đó là "quá chậm", hãy đảm bảo rằng bạn đã tối ưu hóa chỉ mục của mình để hợp nhất nhiều phân đoạn thành một phân đoạn. Lặp lại các tài liệu theo thứ tự (bỏ qua là không sao, nhưng bạn không thể nhảy qua lại trong danh sách tài liệu một cách hiệu quả).

Bước tiếp theo của bạn có thể là xử lý bổ sung để tạo cấu trúc tệp đặc biệt hơn nữa rời khỏi SkipData. Cá nhân tôi sẽ tìm kiếm một thuật toán tốt hơn để đạt được mục tiêu của tôi, hoặc cung cấp phần cứng tốt hơn — nhiều bộ nhớ, hoặc để giữ một RAMDirectory, hoặc để cung cấp cho hệ điều hành để sử dụng trên hệ thống lưu trữ tệp của riêng nó.

1

TermDocs cho TF của một thuật ngữ nhất định trong mỗi tài liệu chứa thuật ngữ. Bạn có thể lấy DF bằng cách lặp qua từng tài liệu <, tần số > và đếm số cặp, mặc dù TermEnums sẽ nhanh hơn. IndexReadertermDocs(Term) method trả về một TermDocs cho Thuật ngữ và chỉ mục đã cho.

+0

cách tiếp cận này có thể được sử dụng để xác định tần suất cụm từ là tập hợp kết quả của truy vấn Lucene không? –

+0

là nó có thể sử dụng termDocs để có được PhraseFrequency? – Dany

2

Phiên bản thân của Lucene (đến 4.0, cuối cùng) bây giờ cho thấy totalTermFreq() cho mỗi cụm từ từ TermsEnum. Đây là tổng số lần cụm từ này xuất hiện trong tất cả nội dung (nhưng, như docFreq, không tính đến việc xóa tài khoản).

+0

Sử dụng lucene 4.0, tương đương với td.read (doc, freq), trong đó td là một TermDoc và doc và freq là int []? – lizzie