问题标签 [jaro-winkler]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
685 浏览

amazon-web-services - 如何匹配 Amazon / CJ / Linkshare 产品

我需要创建一个与亚马逊、佣金连接和链接共享 API 和数据提要的数据库,然后匹配相同的产品以创建产品信息的比较。我的问题与匹配过程有关。我首先通过 SKU/UPC/ASIN 匹配产品,但这表现不佳,因为许多产品不包含此信息。我做了一些研究,发现最流行的技术是:

- 通过 TF-IDF 测量余弦相似度

-测量编辑距离/ levenshtein / Jaro-Winkler

在这项技术中,我使用了余弦相似度和 Jaro-Winkler

我如何进行匹配:

第 1 步:预处理

预处理将字符串转换为正常形式: 小写  过滤停用词(new、by、the ...)  去除空格  用单个空格字符替换所有出现的空格

第 2 步,索引:

在 Solr 核心 [核心 A] 和 CJ/Linkshare [核心 B] 中索引另一个核心中的亚马逊产品。索引的目标是限制字符串比较的次数(通过 TF-IDF 和 Jaro-Winkler)

第三步,匹配:

  1. 我首先从核心 B 中检索产品标题,使用该标题在核心 A 中进行 solr 搜索,然后获取前 30 个结果。
  2. 我通过 TF-IDF 测量我想要匹配的产品(查询)和 solr 搜索检索到的 30 个结果之间的相似性。我保留相似度 > 80% 的产品
  3. 按字母顺序对每个产品中的标记进行排序。然后将转换后的字符串与 Jaro Winkler 距离进行比较,并保持产品的相似度 > 80%(==> 这会在短语之间执行 Jaro Winkler 相似度)
  4. 在这里,我对两个字符串(要匹配的查询和产品)进行标记,并在标记之间进行比较。

但这种技术也表现不佳。示例:产品 1:Hugo Boss 的橙色,3 盎司淡香水喷雾 产品 2:Hugo Boss 的 In Motion Orange 淡香水喷雾 3 盎司

通过这种技术,产品 1 和 2 是相似的,但实际上它们是不同的。

我该如何改进这个算法?这是匹配产品的正确方法吗?如果我训练一个具有令牌权重的分类器(使用 Jaro Winkler)(通过 UPC 从匹配的产品中学习数据)并在最后一步使用这个分类器来匹配产品?

PS:我有不同类别的产品(健康、美容、电子产品、书籍、电影......),数据非常非结构化或不完整。

任何建议都会有所帮助

谢谢

邮件

0 投票
1 回答
1200 浏览

r - R中数字向量的快速Levenshtein距离(和Jaro Winkler)

是否有包含 Levenshtein 距离计数函数的 packagein R 计算数字向量的距离?我发现的都是基于字符串的。我也在寻找一个 Jaro-Winkler 包,它做同样的事情,但 Levenshtein 距离更重要。

0 投票
1 回答
905 浏览

c++ - 用于数字向量的快速 Jaro Winkler C++ 代码

是否有任何库或 C++ 中的函数代码可用于比较 C++ 中的数字向量?

0 投票
4 回答
15174 浏览

string - C# 中的 Jaro-Winkler 距离算法

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

0 投票
1 回答
192 浏览

python - 用最低成本替换单词,Jellyfish python

我有一个完整的拼写正确的单词列表,称为 ref.txt 。我有一个句子列表,我已经设法使用正则表达式从中提取单词。我会用一个例子来详细说明。
假设 ref.txt 包含 - Mumbai , Andheri ,Jacob Circle, Bandra。我有一个句子列表,例如-

没有太多关于水母的文档。

问题是,在使用正则表达式提取单词后,我如何将其与整个列表进行比较.. 由于成本最低,我的算法应该自动为 andhri 建议“andheri”..
如果你有其他想法要实现,请做推荐..谢谢

0 投票
0 回答
683 浏览

r - 内存高效的字符串比较与 R 中的阻塞

我有一个非常大的数据集的记录链接问题(A 文件中有 2000 个条目,B 文件中有约 70.000.000 个条目)并且想要与 R 中的 jarow-winkler 算法进行基于距离的匹配。两个文件是用字符串填充的 data.tables。

为了开发我的方法,我使用了子样本和包“RecordLinkage”。该包的优点是我可以在实际字符串比较之前使用阻塞。用于此的 R 命令是

这样做的最大缺点是为 A 文件中的所有条目和 B 文件中的所有条目创建了一个比较字段,这需要太多内存。有没有办法进行阻塞,并且只为 A 文件中具有最佳 Jarow-Winkler 分数的每个条目保留 n 记录对?

为了让事情更容易理解,我给你一个简短的例子(我没有使用阻塞来简化):

我的问题不是“test”中包含“a”和“b”的副本,而是“test$pairs”的长度。在上面的示例中,“test$pairs”存储了所有可能的记录组合的比较分数。因此“test$pairs”中有 4*4=16 个条目。我想做的是只存储具有最佳比较分数的 a 文件中每个元素的 n 个组合。因此,当我设置 n=2 时,我只得到 4(来自文件的记录)* 2(具有最佳比较分数的记录对)= 8

在上面的示例中,这种差异可能很小,但对于大数据集至关重要。

先感谢您!

0 投票
1 回答
71169 浏览

performance - Jaro-Winkler 和 Levenshtein 距离之间的区别?

我想对来自多个文件的数百万条记录进行模糊匹配。我为此确定了两种算法:Jaro-WinklerLevenshtein编辑距离。

我无法理解两者之间的区别。似乎Levenshtein给出了两个字符串之间的编辑次数,而Jaro-Winkler提供了 0.0 到 1.0 之间的标准化分数。

我的问题:

  1. 两种算法的根本区别是什么?

  2. 两种算法之间的性能差异是什么?

0 投票
0 回答
185 浏览

r - 应用 Jaro 字符串相似度算法时如何处理常见字符串中的重复字符

在应用 Jaro 字符串相似度算法时,我正在努力定义两个字符串之间的公共字符串。

说我们有

BY Jaro 相似度,半长为floor(11/2) - 1 = 4,由算法定义,s1[i] = s2[j]算作共同的,如果abs(i-j)<=4

那么映射矩阵是

所以:

现在我遇到一个常见的字符字符串长度不相等的情况,如何处理?

如果在 R 'stringdist' 包中应用 'stringdist' 函数,将获得以下结果:

这似乎是:

1/3*(8/9+8/11+(8-2)/8) [1] 0.7887205

上面的结果表明 stringdist 计数的公共字符串长度为 8。根据这个事实,如果我按摩char_ins1_canfound_ins2为 'rojohnde',应该有 6 个转置,这应该产生 1/3*(8/9+8/11+(8- 3)/8) 如果我按摩char_ins1_canfound_ins2为 'rojhndoe',应该有 2 个换位,这应该产生 1/3*(8/9+8/11+(8-1)/8)

Rstringdist函数如何处理上述情况?

百万感谢!

0 投票
1 回答
124 浏览

algorithm - 用于 Web 表单的 Winkler 算法

从网络表单客户端向我发送许多变量,例如姓名、姓氏、身份证、地址等。有时用户向我发送姓名,例如;

使用 Winkler 算法,我想将所有记录与数据库记录进行比较。

  1. 猫王将被比作“猫王”
  2. 亚伦将被比作“亚伦”
  3. 普雷斯利将与普雷斯利相提并论

然后温克勒会给我一个值。对于第一种和第二种情况,它将返回超过 90 的值。而且它的 okey。当谈到像这样的名字时

第一个案例点将小于 90。这是不可接受的。但是当我与中间名进行比较并获得所有三个的平均值时。积分将再次提高到 90 以上。我想接受它。

使用 winkler 算法是一种好的和正确的做法吗?或者我应该选择另一种算法来做到这一点。

0 投票
0 回答
232 浏览

string - JARO_WINKLER 匹配日期作为字符串

因此,我曾经使用 jaro_winkler 和其他方法来匹配客户提供给我们的信息,并使用这些 pcts 在我们的数据库中找到客户,因为我们没有像其他大多数地方那样真正拥有的密钥,例如 SSN、SIN、 CPF 之类的东西,我们不能向客户询问此信息,所以...问题是,我试图使用与我过去相同的 jaro_winkler 函数,但现在,让客户能够输入 1 个错字他们的出生日期,但是,现在是坏的部分,取决于对错误错字的处理,它会不断改变结果,一旦客户输入错误的错字,我就计算出 0.96 作为预期结果......但是,你可以见下文,取决于我在哪里更改错字,它不断给我不同的结果。

将年份的最后一个错字从 60 更改为 61

SELECT UTL_MATCH.jaro_winkler ('12/10/1961','12/10/1960') FROM DUAL;

它给了我预期的准确评分,即 0.96

但是使用不同的一天,也有一个错字,如下所示

SELECT UTL_MATCH.jaro_winkler ('11/10/1960','12/10/1960') FROM DUAL;

pct 下降很多并达到 0.873333333333333

我已经尝试结合关于 1 个错误错字的许多不同类型的更改,结果每次都会更改,这取决于我的数据集、处理方式等等,所以,我想知道是否有办法设置匹配更多〜静态〜也许,只是比较整个刺痛并根据整个刺痛给我结果,而不是基于处置和其他

Plues,我尝试使用不同类型的掩码,如 YYYYMMDD 等,到目前为止没有任何效果..