问题标签 [fuzzy-comparison]

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 回答
461 浏览

java - (模糊)不仅通过像素的颜色值来比较屏幕截图

我想比较软件不同站点的屏幕截图(稳定版和发布版)(手动检查的太多了)。屏幕截图将在不同的自动化硒验收测试中创建。

现在我想以一种有用的方式比较(比较并创建差异图像)屏幕截图。目前,屏幕截图将逐个像素(像素的颜色)进行比较。对于模糊性,我计算了颜色的 Delta-E(实验室空间和欧几里得距离)。

计算距离的算法有 AE、FUZZ、MAE、MEPP、MSE、NCC、PAE、PHASH、PSNR、RMSE 和 Perceptual Diff。不知道每个细节,但都是基于像素的颜色?还有什么...

然后还有其他距离度量,例如欧几里得距离和曼哈顿距离。但这些也是基于颜色的。

谁能告诉我提到的哪个最适合屏幕截图比较?还是有更好的方法?例如,区分不同的元素会很好(如果按钮丢失,那么输入字段稍微移动会更糟糕)。或者考虑所有元素都移动了 1px。然后图像就完全不同了。

我认为最大的问题是,截图没有语义。有没有人对我的要求有好的想法?也许与 DOM、计算样式、模板匹配或边缘检测的组合是可能的?经验?

PS 我知道 PhantomCSS、Wraith 等框架。但我检查的代码最多。他们使用 ImageMagick 或进行简单的基于像素的比较。

0 投票
3 回答
2085 浏览

sas - Merging on closest value in SAS

Is there a way in SAS to do a fuzzy left merge based on a numeric field? Say I have the two tables below and want to merge on the closest value possible.

Dataset A:

Dataset B:

The result should be:

Please note that rounding isn't an option here because of the 5.1 case.

0 投票
1 回答
304 浏览

string - 没有重复约束的 Argmax numpy - 模糊字符串匹配

我有两个字符串列表,一个叫l1另一个l2。我有兴趣为 中的每个字符串找到l1最匹配的字符串l2(但不是相反,即我只关心 中的字符串l1)。我知道没有完美的匹配。我使用 jaro-winkler 分数来计算每个字符串的相似度,使用 jellyfish 模块。

为了做到这一点,我创建了一个包含所有 jaro-winkler 分数的矩阵,然后找到 maxtrix 中每个点的最大值。但是,问题是有时字符串 froml2可能是多个字符串 from 的最佳匹配,l1我想防止这种情况发生。

有没有办法优化 argmax 方法,使得最大索引位置只能出现在结果矩阵中一次?

举个例子,拖车列表和后续代码如下:

在上面的示例中,请注意'topazchino51077'from与 froml2的字符串匹配两次l1。这正是我希望防止的。来自 l2 的字符串应该与最佳匹配进行匹配。

0 投票
1 回答
483 浏览

arabic - tFuzzyMatch 显然不适用于阿拉伯文本字符串

我在 talend open studio for data integration v5.5.1 创建了一份工作。

我试图在两个客户名称列之间找到匹配项,一个是查找,另一个包含脏数据。

当客户名称为英文时,作业按预期运行。但是,对于阿拉伯名称,无论我使用的底层匹配算法(levenschtein、metaphone、双变音素)如何,即使对于 levenschtein 算法 min 1 max 50 的边界松散,也只能找到完全匹配。

我怀疑这与字符编码有关。我应该如何进行?我可以在 Talend 中使用 unicode 甚至 UTF-8 解释进行操作吗?

我正在通过 tFileInputExcel 使用 excel 数据源

0 投票
0 回答
900 浏览

talend - 在 Talend 中优化 FuzzyMatch

我正在使用 Talend 检查数据质量,比较两个数据库中人员的姓名。一个数据库将具有正确的名称,而另一个数据库将具有损坏的名称。我要做的是比较两个名称并从损坏的名称中找到正确的名称。

我正在使用 tFuzzyMatch 组件来匹配名称。

名称正确的数据库有 212000 条记录。

名称不正确的数据库有 50000 条记录。

tFuzzyMatch 需要花费大量时间来为每个损坏的名称查找正确的名称。

谁能帮我优化 tFuzzyMatch 以减少执行时间?

我的工作是这样的:

在此处输入图像描述

请看一下模糊匹配查找。它有 3124340 行。

我想加快模糊匹配查找。

0 投票
1 回答
2232 浏览

ssis - SSIS 中的模糊查找未输出预期的结果

为了简单起见,假设我有一个Client带字段的表:

  • 客户编号
  • 密码
  • 地区

Region我有一个带有字段的查找表:

  • ID
  • 邮政编码
  • 地区

Client表有一行:

该区域有 2 行:

我正在尝试使用 SSIS 模糊查找来清理一些数据。

我使用客户端作为源,查找作为参考。当每次查找输出的最大匹配数为 1 时,结果为123,3075,THOMASTOWN, 1,3074,THOMASTOWN. 在这种情况下,SSIS 更喜欢 region 的值而不是 pcode 的值。但是当我将此选项增加到更高(2、4 或 100)时,所有结果行都与前一个相同。

我希望当我增加数字时,查找表的另一行显示为匹配项之一,因为该行与客户端行具有相同的区域代码。

令我惊讶的是,当我第一次将选项从 2 增加到 4 时,我在模糊查找输出的 4 行中的 2 行中看到了预期结果(另一个查找记录作为匹配项),但从那以后它再也没有发生过,并且根据 Max number of matches 选项的不同值,我总是看到完全相同的记录。

谁能向我解释这里发生了什么以及我做错了什么?

0 投票
1 回答
1291 浏览

neo4j - 如何在 Neo4j 密码中进行三元组/模糊匹配?

我使用的是具有 show_trgam() 和similarity() 的postgreSQL。我是 neo4j 的新手,想对两个字符串进行模糊比较。如果比较能返回一个分数,那就太好了。

任何回应表示赞赏。

0 投票
7 回答
34433 浏览

r - 如何匹配来自两个数据集的模糊匹配字符串?

我一直在研究一种基于不完美字符串(例如公司名称)连接两个数据集的方法。过去我必须匹配两个非常脏的列表,一个列表包含姓名和财务信息,另一个列表包含姓名和地址。两者都没有可匹配的唯一 ID!假设已经进行了清洁,并且可能存在错字和插入。

到目前为止,AGREP 是我发现的最接近的工具。我可以在 AGREP 包中使用 levenshtein 距离,它测量两个字符串之间的删除、插入和替换的数量。AGREP 将返回距离最小(最相似)的字符串。

但是,我一直无法将此命令从单个值应用到整个数据帧。我粗略地使用了一个 for 循环来重复 AGREP 函数,但必须有一个更简单的方法。

请参阅以下代码:

0 投票
1 回答
174 浏览

algorithm - 我可以使用哪些算法来生成简单的人类可读的容错字符串?

人类会犯错误。当您要求他们提供一些唯一生成的标识某些实体的 ID 时。例如: Order A: has id ABC1234 Order B: has id BCD1235 他们可以打错字,他们可以提供字符串例如:A123, B123, 1 2 3, "Order id B 12/3" 那么对于自动系统来说这是一个挑战识别原始ID。我的问题是是否有任何已知的算法/技术。生成一个

- 唯一的人类可读 ID(不是 sha 或 md5) - 具有容错能力。你可以从一个字符子集仍然解码原始ID。-不区分大小写

容错的一个直观示例是二维码,当二维码的某些部分损坏时,您仍然可以阅读消息。

目标是避免使用诸如 ex 之类的工具/算法。弹性搜索,列文斯坦,即使客户打错字也增加解码原始ID的机会,并减少提供其他一些“原始ID”的机会。

0 投票
1 回答
254 浏览

python - 完全不熟悉 Python 的商科学生想要一个用于字符串模糊匹配的脚本

我是一名刚开始学习Python的商科学生。我的教授让我对两个文件进行模糊匹配:美国专利信息和从证券交易所网站下载的公司信息。我的任务是比较美国专利文件中出现的公司名称(文件 1 的第 1 栏)和证券交易所网站上的公司名称(文件 2 的第 1 栏)。据我所知,(1)第一步是将列出的所有字母文件 1 和文件 2 更改为小写;(2) 从文件 2 中选择每个名称,并将其与文件 1 中的所有名称匹配,并返回 15 个最接近的匹配项。(3) 重复步骤 2,遍历所有名称为文件 2。 (4) 每一次匹配,都有一个相似度。我想我会使用 SequenceMatcher() 对象。我刚刚学习如何从我的 csv 文件中导入数据(我有 2 个文件),见下文

抱歉我的愚蠢问题,但我太新了,无法用我自己的数据替换字符串(“abcde”、“abcde”,如下所示)数据。我不知道如何将导入的数据更改为小写。而且我什至不知道如何设置 15 个最接近的匹配标准。我的教授告诉我这是一项容易的任务,但我真的感到很失败。感谢您的阅读!希望有人能给我一些指示。我没那么傻:)