问题标签 [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.
regex - 模糊正则表达式
我正在寻找一种使用正则表达式进行模糊匹配的方法。我想使用 Perl,但如果有人可以推荐任何方法来做这将是有帮助的。
例如,我想匹配单词“New York”上的一个字符串,前面有一个 2 位数字。困难在于文本来自PDF的OCR,所以我想做一个模糊匹配。我想匹配:
和其他“近距离”匹配(在 Levenshtein 距离的意义上),但不是:
显然,我需要指定匹配的允许距离(“模糊度”)。
据我了解,我不能使用String::Approx
Perl 模块来执行此操作,因为我需要在匹配项中包含一个正则表达式(以匹配前面的数字)。
另外,我应该注意,这是我真正想要匹配的一个非常简化的例子,所以我不是在寻找一种蛮力的方法。
编辑添加:
好吧,我的第一个例子太简单了。我的意思不是让人们沉迷于前面的数字——对这个不好的例子感到抱歉。这是一个更好的例子。考虑这个字符串:
ASSIGNOR, BY MESHS ASSIGN1IBNTS, TO ALUSCHALME&S MANOTAC/rURINGCOMPANY, A COBPOBATlOH OF DELAY/ABE.
这实际上说的是:
ASSIGNOR, BY MESNE ASSIGNMENTS, TO ALLIS-CHALMERS MANUFACTURING COMPANY, A CORPORATION OF DELAWARE
我需要做的是提取短语“ALUSCHALME&S MANOTAC/rURINGCOMPANY”和“DELAY/ABE”。(我意识到这可能看起来很疯狂。但我是一个乐观主义者。)一般来说,模式看起来像这样:
/Assignor(, by mesne assignments,)? to (company name), a corporation of (state)/i
其中匹配是模糊的。
compare - 语言特定怪癖的 Damerau-Levenshtein 距离
对于说荷兰语的人来说,两个字符“ij”被认为是一个很容易与“y”交换的字母。
对于我正在从事的项目,我希望有一个Damerau-Levenshtein 距离的变体,它将“ij”和“y”之间的距离计算为 1,而不是当前值 2。
我自己一直在尝试,但失败了。我的问题是我不知道如何处理两个文本长度不同的事实。有没有人有关于如何解决这个问题的建议/代码片段?
谢谢。
python - Ruby 上的 difflib
在 Ruby 上是否有类似于 Python 的difflib的库?
特别是,我需要一个具有类似于difflib.get_close_matches的方法。有什么建议吗?
python - 改进 Python 中的模糊匹配算法
任务:获取两个文本文件并输出 100% 匹配和 75% 匹配。
解决方案:
问题:这行得通,但是结果不是很好。下面是一个匹配的例子:
我不能将 Diff 中的最低百分比提高太多,因为我需要能够将 Univ 与 University 相匹配。另外,我不能只确保第一个单词匹配,因为某些字符串以“The”开头,并且需要与排除“The”的字符串匹配。任何人都可以指出我的方向,它会抛出技术上 75% 相似但对人类根本不相似的匹配吗?algorithm - 模糊匹配/分块算法
背景:我有想要与所述视频同步的视频剪辑和音轨。
从视频剪辑中,我将提取参考音轨。我还有另一个要与参考轨道同步的轨道。不同步来自编辑,它改变了每个过场动画的间隔。
我需要操纵目标轨道看起来像(在这种情况下听起来像)ref
轨道。这相当于在正确的位置添加或删除静音。这可以手动完成,但会非常乏味。所以我希望能够以编程方式确定这些位置。
例子:
输出:
我的想法是,从头开始:
这里的主要问题是声音匹配和指纹识别是模糊且相对昂贵的操作。
理想情况下,我希望他们尽可能少。想法?
python - 补偿调查中的“差异”
这个标题很棘手。
我正在尝试解决一个场景,假设向 XXXXX 人发送了一项调查,询问他们最喜欢的足球俱乐部是什么。从回复来看,很明显,虽然很多人是同一家具乐部的最爱,但他们都以不同的方式“表达”了这一点。例如,
对于曼联来说,一些变化包括......
- 曼U
- 曼联。
- 曼联。
- 曼彻斯特大学
- 曼联
显然,所有人都是同一个俱乐部,但是,如果使用一种简单的技术,只是试图获得一个提取字符串匹配,每个都会是一个单独的结果。
现在,如果我们进一步使情况复杂化,假设由于不同俱乐部(例如曼城,如M. City,曼城等)的庞大数量,再次困扰着这个问题,不可能手动“进入”这些差异并使用它来创建自定义过滤器,以便转换所有 Man U -> Manchester United, Man Utd。> 曼联等。但相反,我们希望自动执行此过滤器,以寻找最可能的匹配并相应地转换数据。
我正在尝试在 Python 中执行此操作(来自 .cvs 文件),但是欢迎任何概述解决此问题的好方法的伪答案。
编辑:一些附加信息 这不是一套俱乐部列表,我们的想法是“聚集”我们一起拥有的俱乐部。假设没有拼写错误。没有假定多少俱乐部的长度并且调查列表很长。足够长,它不保证手动执行此操作(1000 次查询)
python - 这个字符串匹配方法在python中有没有实现?
我正在尝试使用近似字符串匹配来确定我的数据存储中的哪些条目几乎是重复的。
在python中是否有以下方法的实现,或者我需要尝试自己动手?
谢谢 :)
...
蛮力方法是计算 T 的所有子串到 P 的编辑距离,然后选择具有最小距离的子串。但是,该算法的运行时间为 O(n3 m)
一个更好的解决方案[3][4],利用动态规划,使用问题的另一种表述:对于文本 T 中的每个位置 j 和模式 P 中的每个位置 i,计算第 i 个字符之间的最小编辑距离模式 Pi 和 T 的任何子串 Tj',j 在位置 j 处结束。
将其应用于许多字符串的最有效方法是什么?
algorithm - 多列信息的模糊记录匹配
我有一个有点高水平的问题,所以我会尽量具体。
我正在进行大量研究,涉及将不同的数据集与引用同一实体(通常是公司或金融证券)的标题信息相结合。这种记录链接通常涉及标题信息,其中名称是唯一常见的主要标识符,但通常可以使用一些辅助信息(例如城市和州、操作日期、相对大小等)。这些匹配通常是一对多的,但也可能是一对一的,甚至是多对多的。我通常是手动完成这种匹配,或者对已清理的子字符串进行非常基本的文本比较。我偶尔会使用一个简单的匹配算法,比如 Levenshtein 距离测量,但我没有从中得到太多,部分原因是我没有一个好的正式的应用方法。
我的猜测是,这是一个相当普遍的问题,并且必须已经开发了一些正式的流程来完成此类事情。我已经阅读了一些关于该主题的学术论文,这些论文涉及给定方法的理论适用性,但我还没有找到任何好的资源来介绍配方或至少是一个实用的框架。
我的问题如下:
有谁知道实现多维模糊记录匹配的良好来源,例如书籍或网站或已发表的文章或工作论文?
我更喜欢有实际例子和明确方法的东西。
该方法可以是迭代的,在中间阶段进行人工检查以进行改进。
(编辑)链接数据用于统计分析。因此,一点点噪音是可以的,但是对于更少的“不正确匹配”而不是更少的“不正确的不匹配”有强烈的偏好。
如果他们在 Python 中,那就太棒了,但不是必需的。
最后一件事,如果重要的话,是我不太关心计算效率。我没有动态实现这一点,我通常处理几千条记录。
java - Java中的模糊字符串搜索,包括单词交换
我是一名 Java 初学者,正在尝试编写一个将输入与预定义字符串列表匹配的程序。我看过 Levenshtein 距离,但我遇到了这样的问题:
如果我有诸如“牛肉片”之类的输入,我希望它与“牛肉片”相匹配。问题在于,根据 Levenshtein 距离,“牛肉片”更接近于“金枪鱼片”之类的东西,这当然是错误的。
我应该为此使用像 Lucene 这样的东西吗?是否有人在 Java 类中使用 Lucene 方法?
谢谢!
arrays - 排序/组合相关数组
必须有一些算法可以使这比我正在做的更容易......
我有两个数组,每个数组有两列。两者中的一列是时间戳,另一列是测量值。
需要做的是把它变成一个单一的数组:时间戳,测量1,测量2
问题是时间戳通常不会完全匹配。一个数组可能在一段时间内完全丢失了一个值,或者时间戳可能会偏离很小的量(微不足道,可以将两个测量值分配给相同的时间戳)。
是否有一些众所周知的方法来进行这种模糊合并操作?一个简单的公共领域功能??