2010-02-02 6 views
6

Uno dei nostri siti più grandi ha una sezione in cui gli utenti possono inviare domande al proprietario del sito web che vengono valutate personalmente dal suo staff. Quando la stessa domanda appare molto spesso, possono aggiungere questa domanda particolare alle Faq.Come costruire un motore "domande correlate"?

Per evitare che ricevano dozzine di domande simili al giorno, vorremmo fornire una funzione simile alle "Domande correlate" su questo sito (overflow dello stack).

Quali sono i modi per creare questo tipo di funzionalità? So che dovrei in qualche modo valutare la domanda e confrontarla con le domande nella faq ma come funziona questo confronto? Le parole chiave sono state estratte e, in caso affermativo, come?

Potrebbe essere utile menzionare questo sito è costruito sullo stack LAMP quindi queste sono le tecnologie disponibili.

Grazie!

+0

possibile duplicato del [Domande correlate di StackOverflow] (http://stackoverflow.com/questions/393505/stackoverflows-related-questions) –

risposta

3

Non so come funziona Stack Overflow, ma suppongo che utilizzi i tag per trovare domande correlate. Ad esempio, su questa domanda le prime domande correlate hanno tutte il tag recommendation-engine. Direi che le corrispondenze su tag più rari contano più di partite su tag comuni.

Si potrebbe anche voler guardare term frequency–inverse document frequency.

+2

E probabilmente la dimensione dell'intersezione tra i set di tag. – jensgram

4

Se si voleva costruire qualcosa di simile se stessi da zero, devi usare qualcosa chiamato TF/IDF: Frequenza frequenza/Frequenza documento inversa. Ciò significa, per semplificarlo enormemente, trovare le parole nella query che non sono comuni nel corpus nel suo insieme e trovare i documenti che contengono tali parole.

In altre parole, se qualcuno inserisce una domanda con le parole "Voglio comprare un elefante", quindi delle parole nella query, la parola "elefante" è probabilmente la parola meno comune nel corpo. "Buy" è probabilmente il prossimo. Pertanto, i documenti vengono classificati (nel tuo caso, domande precedenti) in base a quanto contengono la parola "elefante" e quindi quanto contengono la parola "comprare". Le parole "I", "to" e "an" sono probabilmente in una lista di stop, quindi li ignori del tutto. Classifichi ogni documento (domanda precedente, nel tuo caso) per quante parole corrispondenti ci sono (ponderazione in base alla frequenza inversa del documento - cioè peso elevato per parole non comuni) e mostra le prime.

L'ho semplificato eccessivamente, e avresti bisogno di leggere su questo per farlo bene, ma non è davvero terribilmente complicato da implementare in modo semplice. La pagina di Wikipedia potrebbe essere un buon punto di partenza:

http://en.wikipedia.org/wiki/Tf%E2%80%93idf

1

Dato che si sta lavorando in uno stack LAMP, allora si dovrebbe essere in grado di fare buon uso di MySQL's Fulltext search functions. Credo che funzioni sui principi di TF-IDF e dovrei semplificare la creazione delle "domande correlate" che desideri.

1

C'è un ottimo libro di O'Reilly - Programming Collective Intelligence - che copre scoperte di gruppo, consigli e altri argomenti simili. Dalla memoria gli esempi sono in Perl, ma ho trovato facile capire che provengono da uno sfondo PHP e in poche ore ho costruito qualcosa di simile a quello che stai cercando.

Yahoo ha un webservice parola chiave estrattore a http://developer.yahoo.com/search/content/V1/termExtraction.html

+0

I campioni che sto guardando nell'anteprima di O'reilly di * P.C.I. * sono in Python. – isomorphismes