2010-10-31 1 views
9

sto lavorando cercando di catalogare automaticamente brevi articoli e sto cercando di capire come abbinare parole simili - ad esempio, ripiano o la pittura e ridipingerecome avrei potuto fare una partita di ricerca per parole simili

I sto usando l'algoritmo Porter di derivazione, ma aiuta solo in certe situazioni e solo con la fine della parola (entrambi gli esempi sopra non funzionano con esso).

Esiste un algoritmo o elenchi di parole correlate che avrebbe aiutato con qualcosa di simile (al di fuori di fare il mio?)

(sto lavorando in php in modo eventuali soluzioni in quella lingua sarebbe più utile.)

risposta

9

Il Levenshtein Distance è quello che stai cercando.

Per qualsiasi coppia di stringhe, calcola il numero minimo di inserimenti, mutazioni e delezioni che devono verificarsi per passare da una stringa all'altra.

Se la distanza è bassa, le due parole sono simili.

È anche possibile utilizzare l'algoritmo Soundex per determinare se due parole suonano simili.

Consulta anche:
PHP levenshtein function
PHP soundex function

+1

Un particolare problema con Levenshtein in questo tipo di contesto è che devi trovare una buona soglia; restituisce solo il numero di modifiche tra le due parole. C'è una bella differenza tra i due esempi nel post originale: levenshtein ("shelf", "shelf") = 3, levenshtein ("painting", "repaint") = 5. –

+0

come riferimento - Ho trovato http : //stackoverflow.com/questions/634995/implementation-of-levenshtein-distance-for-mysql-fuzzy-search che contiene un collegamento ad alcune versioni di una stored procedure mysql. Anche se, come ha sottolineato Jan, non è ancora chiaro quanto arriverà. Ma vale la pena provare. – Yehosef

+0

Questa è la risposta più vicina - non è l'ideale, ma un buon inizio. L'elenco delle parole di gennaio è più ideale ma non è pratico a questo punto. – Yehosef

4

bene, c'è la madre di tutte le "liste di parole correlate", chiamato WordNet: http://wordnet.princeton.edu/

E 'disponibile gratuitamente soggetto carica ad una licenza piuttosto generoso . C'è un'interfaccia PHP nella sezione "progetti correlati".

Il vantaggio di utilizzare un algoritmo di somiglianza di parole è che conosce anche sinonimi dissimili di parole come "pittura" e "colore". Il rovescio della medaglia è che devi conoscere i synset corretti (dopotutto, una parola può significare cose diverse) oppure puoi ottenere una lista piuttosto carina di sinonimi.

+0

wow - grazie per il link. Penso che solo la comprensione del formato db sarebbe più tempo di quello che ho per il progetto, ma sembra il modo ideale per andare. – Yehosef