[RISOLTO] Trovare stringa che gli assomiglia

di il
8 risposte

[RISOLTO] Trovare stringa che gli assomiglia

Ciao a tutti,
ho un array con una cinquantina di stringhe, e, data una stringa qualsiasi, devo trovare nell'array quale le assomiglia di più.

Ad esempio, nell'array ho: “SAN PIETRO”, “GIULIETTA”, “SCLEDENSE”, “THIENESE”, “VICTORIA”, eccetera, e passandogli, ad esempio queste stringhe (una alla volta) dovrei trovare nell'array quale è la sua corrispondenza.

AN PIETRO
GIULUETTA
GIULETTA
SCALDENSE
THEINESE
VICTORI

Come vedete si capisce quale è l'errore che ha fatto l'utente digitando il nome, ma dovrei fare un confronto nel programma e assegnarlo alla stringa corretta.

Come faccio ??
Dove posso trovare una specie di LIKE ??

Grazie mille
Sergio

8 Risposte

  • Re: [RISOLTO] Trovare stringa che gli assomiglia

    Uhm… dovresti dargli in pasto la treccani… ma, se una ditta si chiama coccinell@dance ti segnala l'errore. In questo caso dovresti gestire e inserire le eccezioni.

    Se un articolo si chiama mart.pneum.elettr. bla bla

    Idem come sopra.

    Ti ritrovi con 1tera di datisettaggio e 1 mb di dati utente.

    Se cerchi duplicati mascherati

    Es. Guanto m vinile e guanti vinile m 

    allora lascia che l'utente usi il cervello: like %gua%m%

    Potresti rimanere sorpreso dal fatto che anche se non è un programmatore è dotato di cervello pensante.

    Ovviamente non lo fai dialogare direttamente in sql

    Es. Trova: #guan#m#

    E lanci la sql con like %guan%m% sostituendo # con %

    Per esempio…

  • Re: [RISOLTO] Trovare stringa che gli assomiglia

    Al limite, mentre digita cerchi il testo (like testo%) e proponi il completamento.

  • Re: [RISOLTO] Trovare stringa che gli assomiglia

    Salve,

    una possibile soluzione potrebbe essere la distanza Levenshtein tra le 2 stringhe… che varia tra 0 e il Math.Max(s1.length,  s2.length)

    dove 
    “SAN PIETRO” e “SAN PIETRO” hanno una distanza = 0
    AN PIETRO” e “SAN PIETRO” hanno una distanza = 1 
    mentre “AN PIETRO” e “SCALDENSE” = 9…

    quindi, “potenzialmente”, se la distanza e' bassa (e qui devi  decidere tu quanto bassa), potresti “presumere” che l'elemento con distanza minore sia quello piu' vicino a quello “vero”

    l'algoritmo e' “semplice” e generabile anche da chatgpt :D

    salutoni romagnoli
    – 
    Andrea

  • Re: [RISOLTO] Trovare stringa che gli assomiglia

    Grazie asql, ora mi informo

    Edit: risolto !! Grazie mille

  • Re: [RISOLTO] Trovare stringa che gli assomiglia

    Uhm… resto scettico. Va bene per trovare duplicati ma non per trovare errori. Vite m3 e vite m2 possono essere visti come errori anche se non lo sono.

  • Re: [RISOLTO] Trovare stringa che gli assomiglia

    @sihsandrea, sono DUE problemi diversi.

    Il primo ha a che fare con la “sintassi” e puo' essere “meccanizzato”. 
    Di algoritmi per calcolare la “distanza tra stringhe” se esistono a “decinaia” ;-)

    Il secondo ha a che fare con la “semantica”, e, diciamo, per estensione, con il “contesto”.

    Qui' e' dove potrebbero entrare in gioco i sistemi “generativi” (volgarmente detti AI): ChartGPT e compagnia bella. 
    Ma in questo caso non e' “meccanica”, MA “probabilita'”. 

    OVVIAMENTE non serve ChatGPT, che e' un modello “generale” (ti scrive anche il codice, SE SAPESSE che cosa vuol dire :-)) ma un modellino piu' limitato.

  • Re: [RISOLTO] Trovare stringa che gli assomiglia

    09/11/2024 - SirJo ha scritto:


    Grazie asql, ora mi informo

    Edit: risolto !! Grazie mille

    comunque, come gia' avrai capito, non e' affatto banale… :)

    considera di aver “scritto” : “AN PIETRO”
    e il tuo “dicitionary” contiente “XN PIETRO”, ”AN PIETRA”, “ZAN PIETRO”, ”SAN PIETRO”

    la distanza Levenshtein e' = 1 per tutti gli elementi, mentre ad esempio la Longest Common Substring (puoi generare anche questa con chatgpt)
    AN PIETRO   - XN PIETRO   : LongestCommonSubstring > N PIETRO  = 8
    AN PIETRO   - AN PIETRA   : LongestCommonSubstring > AN PIETR  = 8
    AN PIETRO   - ZAN PIETRO  : LongestCommonSubstring > AN PIETRO = 9
    AN PIETRO   - SAN PIETRO  : LongestCommonSubstring > AN PIETRO = 9

    quale prendi?? :D

    salutoni romagnoli
    – 
    Andrea

  • Re: [RISOLTO] Trovare stringa che gli assomiglia

    Grazie Andrea del tuo intervento.
    Nel mio array ci sono poco più di una cinquantina di voci, e sono abbastanza diverse una dall'altra, e l'utente sbaglia raramente (per fortuna).
    Ho già fatto tutta una serie di test su un migliaio di voci che l'utente aveva digitato e tutte hanno passato alla grande il test, per cui direi che sono molto ottimista.
    Una volta assegnata la stringa alla voce corretta, c'è comunque anche un valore che devo sommare, e alla fine di ciò ho un totale che deve corrispondere ad un valore che ho prelevato da un altra parte.
    Se i due totali non corrispondono vuol dire che ho assegnato una stringa ad una voce errata dell'array, e quindi scatta un alert

    Grazie mille
    Sergio

Devi accedere o registrarti per scrivere nel forum
8 risposte