
Hmni
Nome difuso combinando com aprendizado de máquina. Execute tarefas comuns de combinação de nomes difusos, incluindo pontuação de similaridade, ligação de registro, desduplicação e normalização.
O HMNI é treinado em um conjunto de dados de nome latino de nome transliterado internacionalmente, onde a precisão tem prioridade.
| Modelo | Precisão | Precisão | Lembrar | F1-score |
|---|
| HMNI-LATIN | 0,9393 | 0,9255 | 0,7548 | 0,8315 |
Para uma introdução à metodologia e pesquisa por trás do HMNI, consulte o meu post no blog.
Requisitos
Python 3.5–3.8
- tensorflow
- Scikit-Learn
- Fuzzywuzzy
- Abydos
- unidecode
Guia de uso rápido
Instalação
Usando PIP via Pypi
Inicialize um objeto Matcher
import hmni
matcher = hmni . Matcher ( model = 'latin' )
Similaridade de par única
matcher . similarity ( 'Alan' , 'Al' )
# 0.6838303319889133
matcher . similarity ( 'Alan' , 'Al' , prob = False )
# 1
matcher . similarity ( 'Alan Turing' , 'Al Turing' , surname_first = False )
# 0.6838303319889133
Record Linkage
import pandas as pd
df1 = pd . DataFrame ({ 'name' : [ 'Al' , 'Mark' , 'James' , 'Harold' ]})
df2 = pd . DataFrame ({ 'name' : [ 'Mark' , 'Alan' , 'James' , 'Harold' ]})
merged = matcher . fuzzymerge ( df1 , df2 , how = 'left' , on = 'name' )Desduplicação de nome e normalização
names_list = [ 'Alan' , 'Al' , 'Al' , 'James' ]
matcher . dedupe ( names_list , keep = 'longest' )
# ['Alan', 'James']
matcher . dedupe ( names_list , keep = 'frequent' )
# ['Al, 'James']
matcher . dedupe ( names_list , keep = 'longest' , replace = True )
# ['Alan, 'Alan', 'Alan', 'James']
Parâmetros Matcher
hmni.matcher ( modelo = 'latim', prefilter = true, allow_alt_surname = true, allow_initials = true, allow_missing_components = true)
- Modelo (STR) - Modelo Estatístico HMNI (latim por padrão)
- PrefilTer (BOOL) - Caso o prefiltro Matcher Candidatos improváveis (true por padrão)
- allow_alt_surname (bool) - Caso o fósforo considere sobrenomes fonéticos , por exemplo, Smith, Schmidt (true por padrão)
- Allow_initials (bool) - Caso o Matcher considerasse nomes com iniciais (true por padrão)
- allow_missing_components (bool) - Se o Matcher considerar nomes com componentes ausentes (true por padrão)
Métodos Matcher
similaridade (name_a, name_b, prob = true, sobrenome_first = false)
- name_a (str) - primeiro nome para comparação
- name_b (str) - segundo nome para comparação
- Prob (bool) - Se o verdadeiro retornar uma probabilidade prevista, senão rótulo de classe binária
- Limiar (Float) - Limite de probabilidade de previsão para correspondência positiva (0,5 por padrão)
- Sobrenome_first (bool) - Se o nome Strings começar com o sobrenome (false por padrão)
fuzzymerge (df1, df2, como = 'interno', on = Nenhum, esquerd_on = nenhum, right_on = nenhum, indicador = false, limite = 1, limite = 0.5, allow_exact_matches = true, sobrenome_first = false)
- DF1 (Pandas Dataframe ou Série nomeada) - First/Left Object To se fundir
- DF2 (Pandas Dataframe ou série nomeada) - Segundo/Right Object para se fundir
- Como (str) - tipo de mesclagem a ser executado
-
inner (padrão): use a interseção de chaves de ambos os quadros, semelhante a uma junção interna do SQL; Preserve a ordem das chaves esquerdas -
left : Use apenas as teclas do quadro esquerdo, semelhantes a uma junção externa esquerda do SQL; preservar a ordem -chave -
right : Use apenas as teclas do quadro direito, semelhantes a uma junção externa direita SQL; preservar a ordem -chave -
outer : use a união de chaves de ambos os quadros, semelhante a uma junção externa completa do SQL; classificar as chaves lexicograficamente
- ON (etiqueta ou lista) - nomes de nível de coluna ou índice para participar. Estes devem ser encontrados em ambos os quadros de dados
- esquerd_on (etiqueta ou lista) - nomes de nível de coluna ou índice para participar no DataFrame esquerdo
- Right_on (etiqueta ou lista) - Nomes de níveis de coluna ou índice para participar no DataFrame certo
- Indicador (bool) - Se true, adiciona uma coluna para a saída de dados de dados chamada "_merge" com informações sobre a fonte de cada linha (false por padrão)
- LIMIT (INT) - Número superior de correspondências de nome a serem consideradas (1 por padrão)
- Limiar (Float) - Limite de probabilidade de previsão para correspondência positiva (0,5 por padrão)
- Allow_exact_matches (bool) - Se true permitir a fusão no nome exato corresponder, caso contrário, não considere correspondências exatas (true por padrão)
- Sobrenome_first (bool) - Se o nome Strings começar com o sobrenome (false por padrão)
Dedupe (nomes, limiar = 0,5, mantenha = 'mais longo', reverso = true, limite = 3, substituir = false, sobrenome_first = false)
- Nomes (lista) - Lista de nomes para deduzir
- Limiar (Float) - Limite de probabilidade de previsão para correspondência positiva (0,5 por padrão)
- Keep (STR) - Especifica o método para manter um dos nomes alternativos múltiplos
-
longest (padrão): mantém o nome mais longo -
frequent : mantém o nome mais frequente na lista de nomes
- reverso (bool) - se true classificar corresponder a ordem descendente, outra ascensão (true por padrão)
- LIMIT (INT) - Número superior de correspondências de nome a serem consideradas (3 por padrão)
- Substitua (Bool) - Se True Return Normalized Name List, caso contrário, retorne a lista de nomes deduplicados (false por padrão)
- Sobrenome_first (bool) - Se o nome Strings começar com o sobrenome (false por padrão)
atribui_similaridade (name_a, name_b, pontuação)
- name_a (str) - primeiro nome para atribuição de pontuação de similaridade
- name_b (str) - segundo nome para atribuição de pontuação de similaridade
- Pontuação (Float) - Pontuação de similaridade atribuída para par de nomes
Contribuindo
Solicitações de tração são bem -vindas. Para os desenvolvedores que desejam construir um modelo usando sistemas de escrita em latim ou não latinos (chinês, cirílico, árabe), os notebooks Jupyter são compartilhados na pasta dev para criar modelos usando métodos semelhantes.
Licença
Mit