2011-09-12 12 views
11

L'associazione mineraria sembra dare buoni risultati per il recupero dei termini relativi in corpora di testo. Ci sono diversi lavori su questo argomento incluso il noto metodo LSA. Il modo più semplice per creare associazioni è quello di creare una matrice di co-occorrenza di docs X terms e trovare i termini che si verificano più spesso negli stessi documenti. Nei miei progetti precedenti l'ho implementato direttamente in Lucene per iterazione su TermDocs (l'ho ottenuto chiamando lo IndexReader.termDocs(Term)). Ma non vedo nulla di simile in Solr.Qual è il modo più semplice per implementare i termini dell'associazione mining in Solr?

Quindi, le mie esigenze sono:

  1. Per recuperare i termini più associati all'interno particolare settore.
  2. Per recuperare il termine , quello più vicino a quello specificato all'interno di un campo particolare.

lo farò tasso risponde nel seguente modo:

  1. Idealmente mi piacerebbe trovare componente di Solr che copre in modo diretto le esigenze specificate, cioè qualcosa di ottenere direttamente termini associati.
  2. Se ciò non è possibile, sto cercando il modo per ottenere informazioni sulla matrice di occorrenza per il campo specificato.
  3. Se questa non è un'opzione troppo, mi piacerebbe sapere il modo più semplice per 1) ottenere tutti i termini e 2) ottenere IDS (numeri) dei documenti si verificano questi termini in.
+0

Ho cercato su google l'argomento e Sto aspettando la risposta me stesso. A proposito, le capacità di clustering di Solr sono descritte come "un modo per raggruppare risultati/documenti semanticamente correlati". Non abbastanza vicino, giusto? – aitchnyu

+0

Il clustering è una cosa leggermente diversa. Prima di tutto, funziona con i documenti, non con i termini, quindi non è possibile definire i termini del cluster (almeno non riesco a vedere alcun senso in termini di clustering e non conosco un modo semplice per farlo con Solr). Anche se sembra che la cosa opposta sia possibile: è possibile utilizzare l'associazione mining su termini per eseguire il clustering sui documenti. – ffriend

risposta

2

Poiché non ci sono ancora risposte alle mie domande, devo scrivere i miei pensieri e accettarli. Tuttavia, se qualcuno propone una soluzione migliore, accetterò felicemente invece che la mia.

Vado con la matrice di occorrenza, poiché è la parte più importante dell'associazione mineraria. In generale, Solr fornisce tutte le funzioni necessarie per costruire questa matrice in qualche modo, sebbene non siano efficienti come l'accesso diretto con Lucene. Per costruire matrice dobbiamo:

  1. Tutti i termini o almeno i più frequenti, perché termini rare non influenzerà risultato dell'associazione mining per loro natura.
  2. Documenti in cui si verificano questi termini, di nuovo almeno i documenti più importanti.

Entrambe queste attività possono essere eseguite facilmente con i componenti Solr standard.

Per recuperare termini TermsComponent o faceted search possono essere utilizzati. Possiamo ottenere solo termini massimi (di default) o tutti i termini (impostando il numero massimo di termini da prendere, vedere la documentazione di una particolare caratteristica per i dettagli).

Ottenere i documenti con il termine in questione è semplicemente la ricerca di questo termine. Il punto debole qui è che abbiamo bisogno di 1 richiesta per termine, e potrebbero esserci migliaia di termini. Un altro punto debole è che né la ricerca semplice, né quella sfaccettata non forniscono informazioni sul numero di occorrenze del termine corrente nel documento trovato.

Avendo questo, è facile da costruire matrice di co-occorrenza. Per associazione miniera è possibile utilizzare altri software come Weka o scrivere una propria implementazione di, diciamo, Apriori algorithm.

+0

Le ultime versioni di Solr consentono opzioni aggiuntive da implementare? – Saar

3

È possibile esportare un indice Lucene (o Solr) a Mahout e quindi utilizzare Latent Dirichlet Allocation. Se LDA non è abbastanza vicino a LSA per le tue esigenze, puoi semplicemente prendere la matrice di correlazione da Mahout e quindi usare Mahout per prendere la decomposizione del valore singolare.

Non conosco alcun componente LSA per Solr.

+0

Grazie per la risposta, ma in realtà non ho bisogno LSA - Ne ho parlato a dimostrare che questo argomento è molto popolare ed è strano che Solr ancora non ha alcun supporto per tali compiti. Come ho già detto, ho già il codice per recuperare le associazioni direttamente con Lucene, quindi sono interessato a come farlo con Solr. – ffriend

+0

@ffriend: non sono sicuro di cosa stai chiedendo. Solr ha lo stesso formato indice di Lucene, quindi qualsiasi codice che funzioni per Lucene funzionerà con Solr. – Xodarap

+0

ovviamente so che Solr usa Lucene internamente e posso scrivere uno strumento separato per accedere allo stesso indice di Lucene e ottenere quello che voglio. Ma è scomodo: avrò 2 programmi separati - Solr e il mio strumento, installarli in modo diverso, invocarli in modo diverso, ecc. Quello che voglio è un comando Solr o qualcosa del genere per trovare i termini associati. Naturalmente, posso creare RequestHandler personalizzato e ottenere esattamente quello che mi serve (e in realtà questo è quello che ho intenzione di fare se non c'è scelta migliore), ma prima voglio sapere se qualcosa per questo compito è già lì. – ffriend

-1

È possibile ottenere il numero di occorrenze di durata in trovato documento la seguente query:

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 
Problemi correlati