PDA

View Full Version : [C#]Ordinare alcune stringhe in base alla somiglianza con un altra


Mattyfog
07-02-2010, 10:31
Salve a tutti! Credo si tratti di un argomento molto complicato e perciò spero che qualcuno più bravo di me abbia inventato qualche algoritmo o qualcosa di simile per risolvere il mio problema.
Dunque, come molti di voi sapranno, il software per la musica che sto continuando a fare deve poter cercare le informazioni delle canzoni su gracenote (database online contenente queste informazioni).
Il software chiede al sitole informazioni su un brano. Esempio: per chiedere le informazioni su "i gotta feeling" dovrebbe caricare questa pagina: http://www.gracenote.com/search/?query=i_gotta_feeling&search_type=track .
Ora il problema è la pagina contiene molti risultati e il mio software deve sceglierne uno. Già, ma come? Se non ho altre informazioni sulla canzone risolvo scegliendo il primo risultato. Se invece, ad esempio, ho anche le informazioni contenenti il nome dell'artista può sorgere il problema. Già, perchè se il nome dell'artista è corretto posso confrontarlo con i nomi artista della pagina html di gracenote e risolvo, ma se questo è sbagliato e quindi inestistente (magari perchè scritto male come ad esempio back eyed peas al posto di black eyed peas, o perchè manca una parola, o perchè magari un utente ssenza sapere l'inglese ha scritto ledi gaga al psto di lady gaga) io devo confrontarlo con tutti gli altri nomi degli artisti presenti nella pagina html di gracenote. Ma come scelgo quello giusto?

Un'idea un po' sporca, ma neppure tanto, sarebbe quella di cercare su gracenote l'artista in modo tale che se digitato sbagliato gracenote stesso dovrebbe restituire il risultato più simile.

Saluti e grazie a tutti :)

wizard1993
07-02-2010, 11:49
forse è come utilizzare una testana nucleare per pulire casa, ma credo che reti neurali e memorie associative siano quello che cerchi

Mattyfog
07-02-2010, 12:26
:mbe: :stordita: beh forse si ma non sono in grado di usarle...
mmm forsde posso usare la distanza di Jaro-Winkler..

anonimizzato
07-02-2010, 12:38
Ti serve una funzionalità stile "Did you mean" come su Google.

In PHP esiste la funzione levenshtein (http://php.net/manual/en/function.levenshtein.php) per calcolare la "distanza" tra due parole, suppongo esista qualcosa di simile anche per C#.

Mattyfog
07-02-2010, 15:44
sulla rivista io programmo c'è un articolo che spiega il funzionamento della distanza di Jaro-Winkler che viene usata dai correttori ortografici.. Magari potrei riutilizzarla, certo è che visto che non distribuirò questo programma ma che servirà quasi solo a me non voglio fare cose troppo difficili :D

gugoXX
07-02-2010, 17:35
Non puoi fare sia la ricerca per nome che quella per artista, e prendere il primo risultato comune ad entrambe?