标签: jaro-winkler

Jaro-Winkler与Levenshtein距离的区别?

我有一个用例,我需要对来自多个文件的数百万条记录进行模糊匹配.我确定了两种算法:Jaro-WinklerLevenshtein编辑距离.

当我开始探索两者时,我无法理解两者之间的确切差异.似乎Levenshtein给出了两个字符串之间的编辑数量,而Jaro-Winkler给出了0.0到1.0之间的匹配分数.我不明白算法.由于我需要使用任何一种算法,我需要知道算法性能的确切差异.

algorithm performance jaro-winkler levenshtein-distance

70
推荐指数
1
解决办法
5万
查看次数

比较相似度算法

我想使用字符串相似性函数来查找我的数据库中的损坏数据.

我遇到了其中几个:

  • 哈罗,
  • 哈罗,温克勒,
  • 莱文斯坦,
  • 欧几里德和
  • Q-克,

我想知道它们之间的区别以及它们最适合的情况?

similarity euclidean-distance jaro-winkler levenshtein-distance

39
推荐指数
1
解决办法
2万
查看次数

C#中的Jaro-Winkler距离算法

如何在C#中实现Jaro-Winkler距离串比较算法?

string comparison distance jaro-winkler

16
推荐指数
1
解决办法
1万
查看次数

优化Jaro-Winkler算法

我从这个网站获取了Jaro-Winkler算法的代码.我需要运行150,000次以获得差异之间的距离.这需要很长时间,因为我在Android移动设备上运行.

它可以更优化吗?

public class Jaro {
    /**
     * gets the similarity of the two strings using Jaro distance.
     *
     * @param string1 the first input string
     * @param string2 the second input string
     * @return a value between 0-1 of the similarity
     */
    public float getSimilarity(final String string1, final String string2) {

        //get half the length of the string rounded up - (this is the distance used for acceptable transpositions)
        final int halflen = ((Math.min(string1.length(), string2.length())) / 2) …
Run Code Online (Sandbox Code Playgroud)

java algorithm optimization jaro-winkler

13
推荐指数
1
解决办法
1万
查看次数

字符串之间的缩写相似度

我的项目中有一个用例,我需要将key-string 与很多字符串进行相似性比较。如果这个值大于某个阈值,我认为这些字符串与我的“相似” key,并根据该列表,我进行一些进一步的计算/处理。

我一直在探索模糊匹配字符串相似性的东西,它使用edit distance基于“levenshtein、jaro 和 jaro-winkler”相似性的算法。

尽管它们工作得很好,但如果一个字符串是另一个字符串的“缩写”,我希望获得更高的相似度分数。有没有我可以使用的算法/实现。

笔记:

language: python3 
packages explored: fuzzywuzzy, jaro-winkler
Run Code Online (Sandbox Code Playgroud)

例子:

using jaro_winkler similarity:

>>> jaro.jaro_winkler_metric("wtw", "willis tower watson")
0.7473684210526316
>>> jaro.jaro_winkler_metric("wtw", "willistowerwatson")
0.7529411764705883

using levenshtein similarity:

>>> fuzz.ratio("wtw", "willis tower watson")
27
>>> fuzz.ratio("wtw", "willistowerwatson")
30
>>> fuzz.partial_ratio("wtw", "willistowerwatson")
67
>>> fuzz.QRatio("wtw", "willistowerwatson")
30
Run Code Online (Sandbox Code Playgroud)

在这种情况下,如果可能的话,我希望分数更高(>90%)。我也可以接受很少的误报,因为它们不会对我的进一步计算造成太多问题。但是,如果我们匹配 s1 和 s2,使得 s1 完全包含在 s2 中(反之亦然),那么它们的相似度得分应该会高得多。

编辑:我的用例的更多示例

对我来说,空格是多余的。这意味着,wtw被视为“willistowerwatson”和“willis tower watson”的缩写。

另外,stove是“STack OVERflow”或“STandardOVErview”的有效缩写

一种简单的算法是从较小字符串的第一个字符开始,看看它是否存在于较大字符串中。然后检查第二个字符,依此类推,直到条件满足第一个字符串完全包含在第二个字符串中。这对我来说是 100% 匹配。

诸如“willistowerwatson”之类的进一步示例wtwx可以给出例如 80% …

python edit-distance similarity jaro-winkler

7
推荐指数
1
解决办法
1016
查看次数

水母vs pyjarowinkler

我正在尝试使用jarowinkler相似距离来查看两个字符串是否相似。我尝试使用这两个库来比较单词“ carol”和“ elephant”。它们不相似。

import jellyfish
from pyjarowinkler import distance

jellyfish.jaro_winkler('Carol','elephant') 
Run Code Online (Sandbox Code Playgroud)

返回0.4416666

distance.get_jaro_distance('Carol','elephant')
Run Code Online (Sandbox Code Playgroud)

我得到0.0,这对我来说更有意义。两个库之间是否有错误?

谢谢

python jaro-winkler

6
推荐指数
1
解决办法
2513
查看次数

.NET中的Jaro-Winkler距离算法

在.NET中是否有任何LGPL或商业友好许可的Jaro-Winkler距离实现?

.net c# jaro-winkler

5
推荐指数
1
解决办法
4451
查看次数

什么字符串距离算法最适合测量打字准确度?

我正在尝试编写一个函数来检测用户输入特定短语/句子/单词/单词的准确程度.我的目标是构建一个应用程序来训练用户对某些短语的打字准确性.

我最初的直觉是使用基本的levenshtein距离算法(主要是因为这是我认识的唯一算法).

但经过一番研究后,我发现Jaro-Winkler是一个稍微有趣的算法,因为它考虑了换位.

我甚至找到了一个链接,讨论了这些算法之间的差异:

Jaro-Winkler与Levenshtein距离的区别?

阅读完所有这些内容后,除了各自的维基百科帖子外,对于哪种算法最符合我的目标,我仍然有点无能为力.

algorithm nlp jaro-winkler levenshtein-distance

5
推荐指数
1
解决办法
1223
查看次数

使用pdist的Python中的字符串距离矩阵

如何计算Python中字符串的Jaro Winkler距离矩阵?

我有大量手工输入的字符串(名称和记录号),我试图在列表中找到重复项,包括可能在拼写上有轻微变化的重复项.一到类似的问题的回答使用SciPy的的pdist功能与定制距离函数建议.我试图用Levenshtein包中的jaro_winkler函数实现这个解决方案.这个问题是jaro_winkler函数需要字符串输入,而pdict函数似乎需要2D数组输入.

例:

import numpy as np
from scipy.spatial.distance import pdist
from Levenshtein import jaro_winkler

fname = np.array(['Bob','Carl','Kristen','Calr', 'Doug']).reshape(-1,1)
dm = pdist(fname, jaro_winkler)
dm = squareform(dm)
Run Code Online (Sandbox Code Playgroud)

预期输出 - 这样的事情:

          Bob  Carl   Kristen  Calr  Doug
Bob       1.0   -        -       -     -
Carl      0.0   1.0      -       -     -
Kristen   0.0   0.46    1.0      -     -
Calr      0.0   0.93    0.46    1.0    -
Doug      0.53  0.0     0.0     0.0   1.0
Run Code Online (Sandbox Code Playgroud)

实际错误:

jaro_winkler expected two Strings or two Unicodes
Run Code Online (Sandbox Code Playgroud)

我假设这是因为jaro_winkler函数看到的是ndarray而不是字符串,我不知道如何在pdist函数的上下文中将函数输入转换为字符串.

有没有人建议允许这个工作?提前致谢!

python string jaro-winkler pdist

4
推荐指数
1
解决办法
2237
查看次数

如何在 R 数据库中将相似的字符串分组在一起

我的小标题只有 1 列,称为“标题”。

> dat
# A tibble: 13 x 1
   title                                          
   <chr>                                          
 1 lymphoedema clinic                             
 2 zostavax shingles vaccine                      
 3 xray operator                                  
 4 workplace mental health wellbeing workshop     
 5 zostavax recall toolkit                        
 6 xray meetint                                   
 7 workplace mental health and wellbeing          
 8 lymphoedema early intervenstion                
 9 lymphoedema expo                               
10 lymphoedema for breast care nurses             
11 xray meeting and case studies                  
12 xray online examination                        
13 xray operator in service paediatric extremities
Run Code Online (Sandbox Code Playgroud)

我希望找到类似的记录并将它们分组在一起(同时保留它们的索引):

> dat
# A tibble: 13 x …
Run Code Online (Sandbox Code Playgroud)

r jaro-winkler record-linkage

4
推荐指数
1
解决办法
1920
查看次数

SAS中的Jaro-Winkler字符串比较功能

SAS中是否有Jaro-Winkler字符串比较的实现?

看起来Link King有Jaro-Winkler,但我更喜欢自己调用这个功能的灵活性.

谢谢!

sas jaro-winkler

2
推荐指数
1
解决办法
4262
查看次数

1
推荐指数
1
解决办法
3155
查看次数

将 Jaro-Winkler 距离应用于数据帧

我有两列的数据框。第一个是正确的字符串,第二个是损坏的。我想应用 Jaro-Winkler 距离并将其存储在新的第三列中。

import pandas as pd
from pyjarowinkler.distance import get_jaro_distance

df = pd.DataFrame(
        {"Correct" : ['Hello' , 'bread' , 'situation'],
         "Corrupt" : ['Hlloe' , 'braed' , 'sitatuion']},
        index = [1, 2, 3])
Run Code Online (Sandbox Code Playgroud)

python jaro-winkler dataframe pandas

1
推荐指数
1
解决办法
3687
查看次数