2011-09-12 36 views
11

Khai thác Hiệp hội dường như cho kết quả tốt để truy xuất các điều khoản có liên quan trong văn bản corpora. Có một số công trình về chủ đề này bao gồm phương pháp nổi tiếng LSA. Cách đơn giản nhất để khai thác các hiệp hội là xây dựng ma trận đồng xuất hiện của docs X terms và tìm các thuật ngữ xảy ra trong cùng một tài liệu thường xuyên nhất. Trong các dự án trước đây của tôi, tôi đã thực hiện nó trực tiếp trong Lucene bằng cách lặp qua TermDocs (tôi nhận nó bằng cách gọi IndexReader.termDocs(Term)). Nhưng tôi không thể thấy bất cứ điều gì tương tự trong Solr.Cách dễ nhất để triển khai khai thác cụm từ liên kết trong Solr là gì?

Vì vậy, nhu cầu của tôi là:

  1. Để lấy thuật ngữ liên quan nhất trong lĩnh vực cụ thể.
  2. Để truy xuất cụm từ , gần nhất với cụm từ được chỉ định trong trường cụ thể.

tôi sẽ tỷ lệ trả lời theo cách sau:

  1. Lý tưởng nhất là tôi muốn tìm phần Solr rằng trực tiếp bao gồm nhu cầu nhất định, có nghĩa là, một cái gì đó để có được các điều khoản liên quan trực tiếp.
  2. Nếu điều này là không thể, tôi đang tìm cách để có được thông tin ma trận đồng xảy ra cho trường được chỉ định.
  3. Nếu đây không phải là một lựa chọn quá, tôi muốn biết cách đơn giản nhất để 1) nhận được tất cả các điều khoản và 2) nhận được id (số) của văn bản các điều khoản xảy ra trong.
+0

Tôi googled chủ đề và tôi đang chờ đợi câu trả lời bản thân mình. BTW, khả năng phân cụm của Solr được mô tả "như một cách để nhóm các kết quả/tài liệu liên quan đến ngữ nghĩa". Không đủ gần đúng không? – aitchnyu

+0

Clustering có một chút khác biệt. Trước hết, nó làm việc với các tài liệu, không phải thuật ngữ, vì vậy bạn không thể cụm từ (ít nhất tôi không thể thấy bất kỳ ý nghĩa về cụm từ và không biết cách dễ dàng để làm điều đó với Solr). Mặc dù nó có vẻ như điều ngược lại là có thể: bạn có thể sử dụng khai thác liên kết trên các điều khoản để thực hiện phân cụm trên các tài liệu. – ffriend

Trả lời

2

Vì vẫn không có câu trả lời cho câu hỏi của tôi, tôi phải viết suy nghĩ của riêng mình và chấp nhận nó. Tuy nhiên, nếu ai đó đề xuất giải pháp tốt hơn, tôi sẽ vui vẻ chấp nhận nó thay vì của tôi.

Tôi sẽ đi với ma trận đồng xuất hiện vì đây là phần chính của khai thác liên kết. Nói chung, Solr cung cấp tất cả các chức năng cần thiết để xây dựng ma trận này theo một cách nào đó, mặc dù chúng không hiệu quả như truy cập trực tiếp với Lucene. Để xây dựng ma trận chúng ta cần:

  1. Tất cả các điều khoản hoặc ít nhất những người thường xuyên nhất, bởi vì thuật ngữ hiếm sẽ không ảnh hưởng đến kết quả của khai thác mỏ hiệp hội về bản chất.
  2. Tài liệu nơi các điều khoản này xảy ra, một lần nữa, ít nhất là tài liệu hàng đầu.

Cả hai nhiệm vụ này có thể dễ dàng thực hiện với các thành phần tiêu chuẩn Solr.

Để truy xuất các điều khoản TermsComponent hoặc faceted search có thể được sử dụng. Chúng tôi chỉ có thể nhận các thuật ngữ hàng đầu (theo mặc định) hoặc tất cả các điều khoản (bằng cách đặt số lượng tối đa các thuật ngữ cần thực hiện, xem tài liệu về tính năng cụ thể để biết chi tiết).

Nhận tài liệu có cụm từ được đề cập chỉ đơn giản là tìm kiếm cụm từ này. Điểm yếu ở đây là chúng tôi cần 1 yêu cầu cho mỗi cụm từ và có thể có hàng nghìn cụm từ. Một điểm yếu khác là tìm kiếm không đơn giản, cũng không phải mặt, không cung cấp thông tin về số lần xuất hiện của thuật ngữ hiện tại trong tài liệu tìm thấy.

Có điều này, thật dễ dàng để xây dựng ma trận co-occurrence. Để liên kết với tôi, bạn có thể sử dụng các phần mềm khác như Weka hoặc viết thực hiện riêng, ví dụ: Apriori algorithm.

+0

Phiên bản mới nhất của Solr có cho phép các tùy chọn bổ sung để triển khai không? – Saar

3

Bạn có thể xuất một chỉ số Lucene (hoặc Solr) để Mahout, và sau đó sử dụng Phân bổ Dirichlet Latent. Nếu LDA không đủ gần với LSA cho nhu cầu của bạn, bạn chỉ có thể lấy ma trận tương quan từ Mahout, và sau đó sử dụng Mahout để phân tích giá trị số ít.

Tôi không biết bất kỳ thành phần LSA nào cho Solr.

+0

Cảm ơn câu trả lời của bạn, nhưng thực sự tôi không cần LSA - Tôi đã đề cập đến nó để chứng minh rằng chủ đề này khá phổ biến và thật lạ khi Solr vẫn không có bất kỳ sự hỗ trợ nào cho các nhiệm vụ đó. Như tôi đã đề cập, tôi đã có mã để truy xuất trực tiếp các liên kết với Lucene, vì vậy tôi quan tâm đến cách thực hiện nó với Solr. – ffriend

+0

@ffriend: Tôi không chắc bạn đang hỏi gì. Solr có cùng định dạng chỉ mục như Lucene, vì vậy bất kỳ mã nào hoạt động cho Lucene sẽ làm việc cho Solr. – Xodarap

+0

tất nhiên tôi biết rằng Solr sử dụng Lucene trong nội bộ và tôi có thể viết công cụ riêng biệt để truy cập cùng một chỉ mục từ Lucene và nhận được những gì tôi muốn. Nhưng nó là bất tiện: Tôi sẽ có 2 chương trình riêng biệt - Solr và công cụ của tôi, cài đặt chúng khác nhau, gọi chúng một cách khác nhau, v.v. Những gì tôi muốn là một lệnh Solr hoặc một cái gì đó như thế để tìm các điều khoản liên quan. Tất nhiên, tôi có thể tạo RequestHandler tùy chỉnh và nhận được chính xác những gì tôi cần (và thực sự đây là những gì tôi sẽ làm nếu không có lựa chọn nào tốt hơn), nhưng trước tiên tôi muốn biết liệu có điều gì đó cho nhiệm vụ này đã có. – ffriend

-1

Bạn có thể lấy số lần xuất hiện của thuật ngữ hiện tại trong tài liệu tìm thấy trong các truy vấn sau đây:

http://ip:port/solr/someinstance/select?defType=func&fl=termfreq(field,xxx),*&fq={!frange l=1}termfreq(field,xxx)&indent=on&q=termfreq(field,xxx)&sort=termfreq(field,xxx) desc&wt=json 
Các vấn đề liên quan