[Python] Name matching

Karim lemieliste a gmail.com
Ven 2 Mar 2018 07:05:02 CET


Ciao lista, ho bisogno di un suggerimento su un problema che devo risolvere.

Contesto: ho un'applicazione Django che si collega ad un servizio di terze
parti per ottere dei dati di un "business" che l'utente sta integrando. Il
servizio ci da varie informazioni tra cui un dato `industry_type`.

Questo valore `industry_type` e' digitato dall'utente e significa:
descrizione dell'attivita' del business

Ora questo valore `industry_type` lo devo confrontare con una tabella nel
database che puo' essere paragonata alla classificazione delle attivita'
ATECO[1]. La mia tabella ha un codice e una descrizione. Io faccio il match
da `industry_type` alla descrizione sul database e il match piu' probabile
"vince".

Per applicare questo procedimento ho usato l'algoritmo jaro-winkler dal
package "jellyfish"[2], faccio il matching di
tutta la tabella nel database e il miglior match e' cio' che piu' si
avvicina. Ovviamente non funziona un gran che' perche' il si avvicina
significa quanti editing sono necessari per arriva


Ecco un esempio:

*INDUSTRY TYPE*, *DESCRIZIONE TROVATA*
Solar Panels, Solar Panel Installation
Software Consultancy, Software Publishing
Auto Trim, Arts Education
Consulting, Counselling Service - Debt
Advanced Mobile Technology Development, Masonic Lodge Operation
Bridal Boutique, Primary Education
Cafe/Restaurant, Restaurant

Ho circa 5000 industry_type disponibili realmente digitati dall'utente e
purtroppo senza il corrispettivo matching, ma controllando i match generati
dall'algoritmo, il risultato e' bassino, i match sono circa il 15%.

Ora, c'e' modo di migliorare la situazione?

Io stavo pensando di fare due cose:

1) Migliorare il matching cambiando algoritmo o applicandolo scorporando le
parole di industry_type

2) Applicare del "machine learning" anche se mi tocca impararmelo. Pensavo
di salvare gli abbinamenti fatti dall'utente per correggere il falso match
in modo di avere un numero sempre maggiore di associazioni di
`industry_type` al codice attivita'.

Quindi se ad esempio l'industry_type e' "Sport activities" purtroppo non mi
esce "Sporting Club Room" che e' presente come attivita', ma mi esce
tutt'altro.
Se pero' io abbinassi al codice di "Sporting Club Room" l'abbinamento
"sport activities" corretto dall'utente, avrei qualcosa di piu' su cui fare
il matching la volta successiva.

La cosa buffa e' che usando il matching, piu' parole scrivi piu' tendi ad
allontanarti dal match giusto se le parole sono diverse.

Tornando all'esempio di prima:

l'utente ha digitato "Sport" e allora il match mi da correttamente
"Sporting Club Room", ma se l'utente digita "sport activities", l'algoritmo
mi trova: "Podiatrist / Chiropodist" a causa della distanza dell'algoritmo.

Qualcuno di voi ha affrontato questo tipo di situazioni?

Grazie

[1]
http://www.istat.it/it/strumenti/definizioni-e-classificazioni/ateco-2007
[2]
http://jellyfish.readthedocs.io/en/latest/comparison.html#jaro-winkler-distance


-- 
Karim N. Gorjux
-------------- parte successiva --------------
Un allegato HTML รจ stato rimosso...
URL: <http://lists.python.it/pipermail/python/attachments/20180302/e299e947/attachment.html>


Maggiori informazioni sulla lista Python