Função DICECOEFFICIENT( )
Retorna o coeficiente de Dice entre duas cadeias especificadas, que é uma medida de quanto as duas cadeias são similares.
Sintaxe
DICECOEFFICIENT(cadeia1; cadeia2 <;ngrama>)
Parâmetros
Nome | Tipo | Descrição |
---|---|---|
cadeia1 | caractere | A primeira cadeia na comparação. |
cadeia2 | caractere | A segunda cadeia na comparação. |
ngrama opcional |
numérico |
O comprimento do ngrama a ser usado. Especifique um número inteiro, 1 ou maior. O aumento do comprimento do ngrama aumenta o rigor do critério de similaridade entre duas cadeias. Se o comprimento não é especificado, o valor padrão de 2 é usado. Ngramas são subcadeias (blocos de caracteres) sobrepostas resultantes da divisão de cadeias de comparação durante o cálculo do coeficiente de Dice. Para obter informações detalhadas, consulte Observações. |
Saída
Numérico. O valor é o coeficiente de Dice das duas cadeias, que representa a porcentagem do número total de ngramas nas duas cadeias que são idênticos. O intervalo é de 0,0000 a 1,0000, inclusive.
Exemplos
Exemplos básicos
Como o comprimento do ngrama afeta o resultado
Os três exemplos abaixo comparam as duas mesmas cadeias. O grau de similaridade retornado varia em função do comprimento de ngrama especificado.
Retorna 0,9167 (usando o comprimento padrão de ngrama (2), os ngramas nas duas cadeias são 92% idênticos):
DICECOEFFICIENT("125 SW 39TH ST, Suite 100";"Suite 100, 125 SW 39TH ST")
Retorna 1,0000 (usando um comprimento de ngrama de 1, os ngramas nas duas cadeias são 100% idênticos):
DICECOEFFICIENT("125 SW 39TH ST, Suite 100";"Suite 100, 125 SW 39TH ST"; 1)
Retorna 0,8261 (usando um comprimento de ngrama de 3, os ngramas nas duas cadeias são 83% idênticos):
DICECOEFFICIENT("125 SW 39TH ST, Suite 100";"Suite 100, 125 SW 39TH ST"; 3)
Entrada de campo
Retorna o coeficiente de Dice de cada valor no campo Endereço, quando comparado à cadeia "125 SW 39TH ST, Suite 100" (com base no comprimento padrão de ngrama de 2):
DICECOEFFICIENT(Endereço;"125 SW 39TH ST, Suite 100")
Exemplos avançados
Como trabalhar com elementos transpostos
A redução do comprimento do ngrama e a remoção de caracteres não essenciais permite otimizar o DICECOEFFICIENT( ) na pesquisa por elementos transpostos.
Retorna 0,7368 (usando o comprimento padrão de ngrama (2), os ngramas nas duas cadeias são 74% idênticos):
DICECOEFFICIENT("John Smith";"Smith, John")
Retorna 1,0000 (excluindo a vírgula entre o nome e o sobrenome, e usando um comprimento de ngrama de 1, os ngramas nas duas cadeias são 100% idênticos):
DICECOEFFICIENT("John Smith"; EXCLUDE("Smith, John"; ","); 1)
Classificação de valores em relação a "125 SW 39TH ST, Suite 100"
Crie o campo calculado Co_Dice para exibir o coeficiente de Dice entre "125 SW 39TH ST, Suite 100" e cada valor no campo Endereço:
DEFINE FIELD Co_Dice COMPUTED DICECOEFFICIENT(Endereço;"125 SW 39TH ST, Suite 100")
Adicione o campo calculado Co_Dice à exibição e execute uma ordenação rápida do campo em ordem decrescente para ordenar todos os valores do campo Endereço de acordo com sua similaridade com "125 SW 39TH ST, Suite 100".
Isolamento de duplicidades parciais de "125 SW 39TH ST, Suite 100"
Crie um filtro que isola todos os valores do campo Endereço que estão dentro de um grau de similaridade especificado com "125 SW 39TH ST, Suite 100":
SET FILTER TO DICECOEFFICIENT(Endereço;"125 SW 39TH ST; Suite 100") > 0,5
A alteração do número na expressão permite ajustar o grau de similaridade nos valores filtrados.
Observações
Quando usar DICECOEFFICIENT( )
Use a função DICECOEFFICIENT( ) para encontrar valores praticamente idênticos (duplicidades parciais). Você também pode usar DICECOEFFICIENT( ) para encontrar valores com conteúdo idêntico ou quase idêntico com elementos transpostos. Por exemplo:
- números de telefone ou números de previdência social com dígitos transpostos
- versões do mesmo endereço com formatações diferentes
Como funciona?
DICECOEFFICIENT( ) retorna o coeficiente de Dice das duas cadeias avaliadas, que é uma medida do grau de similaridade entre as cadeias em uma escala de 0,0000 a 1,0000. Quanto maior o valor retornado, maior a semelhança das duas cadeias:
- 1,0000 – indica que cada cadeia é composta por um conjunto de caracteres idêntico, embora os caracteres possam estar em ordem diferente ou serem caracteres maiúsculos em um conjunto de caracteres e caracteres minúsculos no outro conjunto de caracteres.
- 0,7500 – significa que os ngramas nas duas cadeias são 75% idênticos.
- 0,0000 – significa que as duas cadeias não têm ngramas compartilhados (explicado abaixo) ou que o comprimento especificado do ngrama usado no cálculo é maior que o comprimento da menor das duas cadeias comparadas.
Dicas de uso
- Filtragem ou ordenação A filtragem ou a ordenação dos valores em um campo com base em seu coeficiente de Dice identifica os valores mais semelhantes à cadeia de comparação.
- Diferenciação de maiúsculas e minúsculas A função não diferencia maiúsculas de minúsculas, portanto "SMITH" é equivalente a "smith."
- Brancos à esquerda e à direita A função elimina automaticamente brancos à esquerda ou à direita, eliminando, portanto, a necessidade de usar as funções TRIM( ) ou ALLTRIM( ) ao especificar um campo como parâmetro.
- Remoção de elementos genéricos As funções OMIT( ) e EXCLUDE( ) podem melhorar a eficácia da função DICECOEFFICIENT( ) removendo elementos genéricos, como "Companhia" ou "Inc." ou caracteres como vírgulas, pontos e E comercial (&) dos valores do campo.
A remoção de elementos e pontuação genéricos concentra a comparação de cadeia DICECOEFFICIENT( ) somente na parte das cadeias onde pode ocorrer uma diferença significativa.
Como o coeficiente de Dice é calculado
O coeficiente de Dice representa a porcentagem do número total de ngramas em duas cadeias que são idênticos.
O coeficiente de Dice é calculado dividindo antes as cadeias sendo comparadas em ngramas. Os ngramas (também denominados qgramas) são subcadeias ou blocos de caracteres sobrepostos, com um comprimento de n. Você pode especificar o n usando o parâmetro ngrama ou aceitar o comprimento padrão de 2.
Dois nomes divididos em ngramas
Aqui estão os nomes "João Silva" e "Silva, João" divididos em ngramas com comprimento de 2 e ngramas com comprimento de 3. Os sublinhados indicam espaços. Os espaços internos e a pontuação são contados como caracteres.
Comprimento do ngrama |
"John Smith" - Ngramas |
"Smith, John D." - ngramas |
---|---|---|
2 |
Jo | oh | hn | n_ | _S | Sm | mi | it | th |
Sm | mi | it | th | h, | ,_ | _J | Jo | oh | hn | n_ | _D | D. |
3 |
Joh | ohn | hn_ | n_S | _Sm | Smi | mit | ith |
Smi | mit | ith | th, | h,_ | ,_J | _Jo | Joh | ohn | hn_ | n_D | _D. |
Fórmula do coeficiente de Dice
Após estabelecer os ngramas para as duas cadeias sendo comparadas, o cálculo é concluído usando a fórmula a seguir:
- 2 x número de ngramas compartilhados / número total de ngramas nas duas cadeias
Ngramas compartilhados são ngramas que aparecem nas duas cadeias. Por exemplo, "ABC" e "BCD" compartilham o ngrama "BC", supondo um comprimento de ngrama de 2 (AB | BC e BC | CD).
Exemplos de cálculo do coeficiente de Dice
A tabela abaixo ilustra o cálculo do coeficiente de Dice para duas cadeias similares, "John Smith" e "Smith, John D.", usando comprimentos de ngrama diferentes.
Observe que à medida que o comprimento do ngrama aumenta para o mesmo par de cadeias, o valor do coeficiente de Dice diminui, indicando menos similaridade. Embora as cadeias sejam as mesmas, o critério de similaridade torna-se mais rigoroso porque a divisão das cadeias em ngramas-maiores significa que sequências mais longas de caracteres devem corresponder para que um ngrama se qualifique como compartilhado.
Outra maneira de pensa sobre esse ponto é que a ponderação da posição relativa dos caracteres aumenta em conjunto com o comprimento ngrama. Em contrapartida, a posição relativa dos caracteres não é considerada quando é usado um ngrama de comprimento 1. A posição relativa é a posição dos caracteres entre si, em vez da posição absoluta em uma cadeia.
Dica
Se você está procurando especificamente uma transposição, use um comprimento de ngrama de 1.
Comprimento do ngrama |
"John Smith" - Ngramas |
"Smith, John D." - ngramas |
Ngramas compartilhados |
Coeficiente de Dice |
---|---|---|---|---|
1 |
J | o | h | n | _ | S | m | i | t | h (10 ngramas) |
S | m | i | t | h | , | _ | J | o | h | n | _ | D | . (14 ngramas) |
10 |
2x10 / (10+14) = 0,8333 |
2 (padrão) |
Jo | oh | hn | n_ | _S | Sm | mi | it | th (9 ngramas) |
Sm | mi | it | th | h, | ,_ | _J | Jo | oh | hn | n_ | _D | D. (13 ngramas) |
8 |
2x8 / (9+13) = 0,7273 |
3 |
Joh | ohn | hn_ | n_S | _Sm | Smi | mit | ith (8 ngramas) |
Smi | mit | ith | th, | h,_ | ,_J | _Jo | Joh | ohn | hn_ | n_D | _D. (12 ngramas) |
6 |
2x6 / (8+12) = 0,6000 |
4 |
John | ohn_ | hn_S | n_Sm | _Smi | Smit | mith (7 ngramas) |
Smit | mith | ith, | th,_ | h,_J | ,_Jo | _Joh | John | ohn_ | hn_D | n_D. (11 ngramas) |
4 |
2x4 / (7+11) = 0,4444 |
DICECOEFFICIENT( ) comparado a ISFUZZYDUP( ) e a LEVDIST( )
Uma das principais diferenças entre a função DICECOEFFICIENT( ) e as funções ISFUZZYDUP( ) e LEVDIST( ), que usam a distância de Levenshtein, é que DICECOEFFICIENT( ) não prioriza ou ignora completamente a posição relativa dos caracteres ou blocos de caracteres nas duas cadeias sendo comparadas. A posição relativa é significativa nas funções baseadas na distância de Levenshtein.
Valores de comparação com transposição
Se você está comparando cadeias como endereços, em que elementos inteiros podem ser transpostos, DICECOEFFICIENT( ) pode ser uma escolha melhor. Por exemplo, o mesmo endereço, com o elemento "Suite" transposto, é identificado como altamente similar por DICECOEFFICIENT( ), mas como altamente diferente por LEVDIST( ):
Par de endereços |
Coeficiente de Dice (ngrama padrão de 2) |
Distância de Levenshtein |
---|---|---|
|
0,9167 |
22 (Quanto maior a distância de Levenshtein, maior a diferença entre duas cadeias) |
Valores de comparação sem transposição
Se a transposição não é um problema, LEVDIST( ) pode oferecer resultados mais úteis. Por exemplo, o mesmo nome de empresa com pontuação diferente é identificado como altamente diferente por DICECOEFFICIENT( ), mas como altamente similar por LEVDIST( ):
Par de nomes de empresa |
Coeficiente de Dice (ngrama padrão de 2) |
Distância de Levenshtein |
---|---|---|
|
0,3750 |
3 |