Calcolo della similarità di Jaro tra due stringhe
MARTHA e MARHTA ottengono 0,9444444444444445, vicinissimo a 1 anche se due lettere si sono scambiate di posto. Jaro premia i caratteri comuni in un ordine compatibile invece di contare le modifiche, cosa utile per nomi e codici brevi. Gratis nel suo browser.
- Gratis
- Funziona nel suo browser
- Senza registrazione
- I suoi dati restano sul dispositivo
Esegui gratis nel browser
Esempio risolto
- Primo
- MARTHA
- Secondo
- MARHTA
- Similarità
- 0,9444444444
La similarità di Jaro misura quanto due stringhe si assomigliano cercando caratteri uguali entro una distanza limitata e verificando se mantengono un ordine compatibile. Il risultato varia da zero, quando non esistono corrispondenze valide, a uno per stringhe identiche. È particolarmente utile per nomi brevi, etichette, identificatori e altri valori nei quali una piccola sostituzione o trasposizione non dovrebbe escludere automaticamente una possibile corrispondenza.
Comprendere che cosa rappresenta il punteggio Jaro
La similarità di Jaro è una misura basata sui caratteri e pensata per il confronto approssimativo. Non conta quante inserzioni, eliminazioni o sostituzioni servirebbero per trasformare un valore nell’altro. Individua invece i caratteri uguali che si trovano entro una finestra determinata dalla lunghezza della stringa maggiore.
Combina quindi tre proporzioni: la parte corrispondente della prima stringa, quella della seconda e la quota dei caratteri abbinati che conserva un ordine compatibile. Un risultato pari a uno indica stringhe identiche secondo questa procedura, mentre zero significa che nessun carattere ha soddisfatto le condizioni. I valori intermedi esprimono diversi gradi di somiglianza, ma lo strumento non stabilisce se un certo punteggio debba essere considerato una corrispondenza.
Lei deve scegliere la soglia in base al costo dei falsi positivi e dei falsi negativi. Nomi, codici compatti ed etichette brevi spesso traggono vantaggio da Jaro, perché il metodo premia i caratteri condivisi e il loro ordine senza considerare ogni piccolo spostamento come un’operazione di modifica completamente separata.
Preparare le stringhe e interpretare i confronti in modo coerente
Il confronto è esatto e distingue maiuscole e minuscole. Lettere con una diversa capitalizzazione sono caratteri differenti; anche spazi e punteggiatura partecipano al calcolo. L’implementazione confronta punti di codice Unicode, quindi molti emoji supplementari vengono trattati come un solo elemento anziché come due unità UTF-16.
Tuttavia non applica la normalizzazione Unicode: un carattere precomposto può risultare diverso da una lettera di base seguita da un segno combinante, anche quando l’aspetto è identico. Prepari entrambe le stringhe nello stesso modo prima della richiesta se il Suo processo deve uniformare maiuscole, spazi, accenti o forme Unicode. Lasciare tali decisioni fuori dal calcolatore rende esplicito il comportamento ed evita modifiche nascoste agli identificatori da preservare letteralmente.
Due stringhe vuote restituiscono uno perché sono identiche; una stringa vuota e una non vuota restituiscono zero. Per confronti su molti record, applichi una sola politica di pre-elaborazione a tutta la raccolta e la documenti insieme alla soglia scelta.
Usare il punteggio con cautela nei flussi di confronto
Un punteggio Jaro funziona meglio come indizio all’interno di un processo di collegamento, non come prova che due record descrivano la stessa entità. Inizi con coppie etichettate e rappresentative dei Suoi dati, ne calcoli i punteggi e osservi dove si sovrappongono corrispondenze vere e false. Potrà così definire una soglia o una fascia di revisione adatta alle conseguenze di una decisione errata.
Per clienti o fornitori, combini il punteggio testuale con campi indipendenti, come un identificatore interno stabile, una parte verificata dell’indirizzo o una data. Il metodo è simmetrico: invertire la prima e la seconda stringa produce lo stesso risultato, caratteristica utile per ordinare candidati ed eliminare duplicati. Valuta prossimità e ordine dei caratteri, ma non comprende significato, sinonimi, traslitterazione o fonetica.
Per testi lunghi o confronti semantici è più indicata un’altra tecnica.
Casi d'uso
Ordinare possibili nomi duplicati
Assegni un punteggio a coppie di clienti, fornitori o contatti prima di sottoporre i casi ambigui a revisione umana.
Confrontare brevi etichette di catalogo
Individui prodotti o categorie che differiscono soltanto per un piccolo refuso o una trasposizione locale.
Verificare regole di confronto approssimativo
Produca punteggi deterministici per esempi etichettati mentre seleziona una soglia adatta alla Sua applicazione.
Domande frequenti
Quale intervallo utilizza il risultato?
La similarità è compresa tra zero e uno. Uno rappresenta stringhe identiche, mentre zero indica l’assenza di caratteri corrispondenti validi.
Il confronto distingue maiuscole e minuscole?
Sì. Converta entrambe le stringhe alla stessa capitalizzazione prima dell’invio se la Sua politica deve ignorare tale differenza.
Accenti o punteggiatura vengono rimossi?
No. Ogni punto di codice Unicode partecipa esattamente come fornito, inclusi spazi, segni e caratteri accentati.
La similarità di Jaro equivale a Jaro-Winkler?
No. Jaro-Winkler aggiunge una correzione basata sul prefisso. Questa capacità restituisce soltanto la similarità di Jaro non corretta.
Quale punteggio dovrebbe valere come corrispondenza?
Non esiste una soglia universale. La scelga con dati etichettati rappresentativi e valuti una fascia di revisione per le coppie incerte.
Strumenti correlati
Per sviluppatori — accesso via API
Tutto quello che vedi in questa pagina è disponibile anche via API. Questa sezione è per i team che vogliono integrarlo nei propri sistemi; chi non ne ha bisogno può semplicemente usare lo strumento qui sopra.
Endpoint
Autenticazione con Bearer token: un POST mette in coda l'attività e il risultato arriva via webhook o link firmato.
Chiamala dal tuo stack
curl -X POST https://api.kit.forhosting.com/str/jaro-similarity \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"first":"MARTHA","second":"MARHTA"}'const res = await fetch("https://api.kit.forhosting.com/str/jaro-similarity", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"first": "MARTHA",
"second": "MARHTA"
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/str/jaro-similarity",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"first": "MARTHA",
"second": "MARHTA"
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/str/jaro-similarity", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"first":"MARTHA","second":"MARHTA"}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"first":"MARTHA","second":"MARHTA"}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/str/jaro-similarity", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)Esempio di richiesta
{
"first": "MARTHA",
"second": "MARHTA"
}Esempio di risposta
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "str.jaro_similarity",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}L'API è asincrona: ricevi subito un task_id e puoi fare polling fino a 1 richiesta al secondo.
Prezzi
Prezzo pubblicato, senza token né crediti. Se l'attività fallisce, non paghi.
Errori
| HTTP | Codice | Significato |
|---|---|---|
401 | unauthorized | Chiave API mancante o non valida: controlla l'header Authorization. |
402 | insufficient_balance | Credito esaurito: ricarica per continuare a eseguire attività. |
404 | unknown_type | Tipo di attività sconosciuto: controlla il campo type della richiesta. |
429 | rate_limited | Troppe richieste in poco tempo: rallenta e riprova tra qualche secondo. |
Domande tecniche
Quanto costa un confronto tramite API?
Ogni richiesta API costa $0.002.