PDA

Visualizza la versione completa : [ALGORITMO] Determinazione differenza tra stringhe


menphisx
19-03-2011, 00:46
Mi serirebbe riuscire a trovare un buon algoritmo per calcolare la differenza tra stinghe, in pratica quello che devo fare data una stringa: "Pubblica Amministrazion", devo trovare tutte le stringhe simili, del tipo:
"Pubblica Amministrzione"
"Pubblica Ammnstrazne"
"Pbblica Ammnstrazione"
"Amministrazione Pubblica"
"Ammnstr Pubblica",

cio data la prima stringa, confrontandola con altre, l'algoritmo deve darmi in output solo le stringhe come quelle sopra.
Cio se confonta pubblica amministrazione con pubblica panetteria, non dovrebbe restituire nulla.

Qualche idea?

Marco.

MacApp
19-03-2011, 01:02
Originariamente inviato da menphisx
Qualche idea?

http://it.wikipedia.org/wiki/Espressione_regolare

menphisx
19-03-2011, 01:42
Originariamente inviato da MacApp
http://it.wikipedia.org/wiki/Espressione_regolare

Grazie della risposta, ma davvero non saprei come implementare un'espressione regolare per trovare le stringhe simili. Hai una qualche idea da cui partire?
Piuttosto che l'algoritmo generico e non specifico per una stringa....

Grazie,
Marco.

rsdpzed
19-03-2011, 09:24
questa, che una funzione che google implementa su larga scala e in multilingua, secondo me il risultato di un algoritmo genetico.
Dal post non chiaro se al momento del controllo tu hai sia la stringa esatta che la tringa potenzialmente simile che vuoi verificare, pare di si.
Volendo si puo provare a fare qualcosa di rudimentale:
In base alla lunghezza della stringa totale ti calcoli un range di lunghezze di sottostringhe da controllare significativo, diciamo nel caso specifico 4 - 5.
Suddividi la stringa da controllare in tante sottostringhe da 4 e poi in tante sottostringhe da 5 e le inserisci in una lista di Test.
Cerca per ogni sottostringa della lista se c' un corrispondente nella stringa originale.
Se la media pesata (i test da 5 valgono piu dei test da 4) dei test passati supera un certo target, diciamo 70% sul totale dei test, allora la stringa corrisponde.
Spero sia un buon inizio da cui partire, ovviamente questo presuppone che tu abbia la stringa esatta con cui controllare quella potenzialmente simile.

menphisx
19-03-2011, 14:04
Originariamente inviato da rsdpzed
questa, che una funzione che google implementa su larga scala e in multilingua, secondo me il risultato di un algoritmo genetico.
Dal post non chiaro se al momento del controllo tu hai sia la stringa esatta che la tringa potenzialmente simile che vuoi verificare, pare di si.
Volendo si puo provare a fare qualcosa di rudimentale:
In base alla lunghezza della stringa totale ti calcoli un range di lunghezze di sottostringhe da controllare significativo, diciamo nel caso specifico 4 - 5.
Suddividi la stringa da controllare in tante sottostringhe da 4 e poi in tante sottostringhe da 5 e le inserisci in una lista di Test.
Cerca per ogni sottostringa della lista se c' un corrispondente nella stringa originale.
Se la media pesata (i test da 5 valgono piu dei test da 4) dei test passati supera un certo target, diciamo 70% sul totale dei test, allora la stringa corrisponde.
Spero sia un buon inizio da cui partire, ovviamente questo presuppone che tu abbia la stringa esatta con cui controllare quella potenzialmente simile.

Si diciamo che ho la stringa quasi esatta.
Nel senso che non so' se c' l'ho.
Diciamo che data una stringa x, in un insieme Y, devo trovare tutte quelle simili, e metterla in un sottoinsieme z.
Poi successivamente, data la stringa successiva a x, trovare tutte quelle simili, e metterle in un sottoinsieme z1, poi via z2, z3, z4.... ecc...
Quando ho tutti i sottoinsiemi, semplicemente devo fare delle operazioni di pulizia, cio eliminare tutte le stringhe scorrette e lasciare solo quella corretta, se non c', l'aggiungo io.
Ho capito pi o meno quello che vuoi fare, ma hai un esempio pratico in mente?
Non in un linguaggio specifico non voglio codice pronto, anche perch non mi serve, nella mia situazione devo per forza scrivermi il mio.
Intendo dalla stringa "Pubblica Amministrazione", quali sono i primi step da fare, per trovare nella lista delle stringhe, ammesso che ci siano, le varie stringhe, Pubblica Ammnstrazione, Pubblica Ammnstrzion, Pubblica Ammanstzione, ecc?
Nel mio caso si tratta di un DB, di 1700 stringhe, in cui sicuramente ci sono delle ripetizioni del genere.
L'algoritmo genetico mi interessa da implementare, ma forse un po' lungo, semmai mi interessa anche sapere come google implementa certe cose, non c' documentazione al riguardo?

Marco.

Loading