2009-05-21 12 views
26

Le domande correlate che appaiono dopo aver inserito il titolo e quelle che si trovano nella barra a destra quando si visualizza una domanda sembrano suggerire domande molto appropriate.Stack Overflow Algoritmo domande correlate

Stack Overflow esegue solo una ricerca SQL e non utilizza algoritmi speciali, ha detto Spolsky in un discorso.

Quali algoritmi esistono per dare buone risposte in questo caso. Come si fa la ricerca del database in questo caso? Rendi il titolo ricercabile e cerca tra le parole chiave o cerca sui tag e quelle domande con molti voti in cima?

risposta

7

le questioni relative barra laterale sarà la costruzione sui Tags per ogni domanda (probabilmente da classifica loro sulla base di tag si sovrappongono, in modo da 5 tag in comune> 4 tag in comune ecc).

Il resto si baserà sull'euristica e sugli algoritmi adatti all'elaborazione del linguaggio naturale. Normalmente non sono molto utili nella lingua generale, ma la maggior parte di essi sono MOLTO buoni quando il vocabolario è ridotto a una singola area tecnica come la programmazione.

+0

non sia probabilmente l'unica cosa coinvolta; dato che la domanda in cima a questa domanda non ha tag in comune con questa domanda :) :) –

+1

La domanda principale (Esiste un algoritmo che ti dice ...) ha il tag nlp, la stessa di questa domanda e altri due tag. Quello sotto che ha nlp e altri 4 tag. # 3 ha nlp, 4 altri tag e meno upvotes rispetto al # 2. C'è qualcos'altro, dato che # 4 ha nlp, 3 altri tag e più upvotes rispetto al # 3, quindi probabilmente qualche elaborazione sul titolo :) – workmad3

6

Dai un'occhiata a Porter per un algoritmo stemming se stai cercando di entrare in algoritmi "correlati".

Uno Stemmer per l'inglese, per esempio, dovrebbe identificare la stringa "gatti" (e possibilmente "felino", "catty", ecc), come basato sulla radice "del gatto", e "Stemmer "," stemming "," derivato "come basato su" radice ". Un algoritmo di derivazione riduce le parole "pesca", "pescato", "pesce" e "pescatore" alla radice della parola, "pesce".

Dopo aver elaborato un documento e averlo eseguito su di esso, è possibile indicizzare le parole relative allo stelo per conteggio e confrontarle con altri documenti. Questo è l'approccio più basilare per affrontare questo problema.

curare anche di ignorare stop words come "il", "an", "di", ecc

-1

Utilizzare la funzionalità di ricerca full-text di SQL Server.

0

Tali problemi vengono risolti creando un "sacco di parole" delle parole con stemma. Questo è fondamentalmente un vettore di conteggio delle parole. Queste parole sono pre-elaborate (con stemmed) e ponderate con la probabilità che si verifichino in una frase ("il" ha una probabilità maggiore di "probabilità" e dovrebbe quindi essere ponderato di meno). Quindi puoi percepire questo sacchetto di parole come un vettore nello spazio euclideo o come un campione di una densità di probabilità.

È possibile applicare algoritmi come ricerca adiacente più vicina o hashing semantico. Quest'ultimo sembra essere SOTA (vedi http://www.cs.toronto.edu/~rsalakhu/papers/semantic_final.pdf).

18

Se ascolti il ​​numero Stack Overflow podcast 32 (sfortunatamente la trascrizione non ha molto in) puoi sentire Jeff Atwood dire un po 'su come lo fa.

Sembra che l'algoritmo è qualcosa di simile:

  • Prendete la questione
  • Rimuovere le parole più comuni in lingua inglese (da una lista ha ottenuto da Google)
  • presentare una ricerca a testo integrale per il server SQL 2008 testo completo motore di ricerca

Maggiori dettagli circa la ricerca a testo integrale può essere trovato qui: http://msdn.microsoft.com/en-us/library/ms142571.aspx

Questo potrebbe essere obsoleto - si trattava di passare a una ricerca di testo completo migliore/più veloce come Lucene e ricordo vagamente Jeff che diceva nel podcast che ciò era stato fatto.