问题标签 [sequencematcher]

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 投票
3 回答
914 浏览

python - 确定文档与 Python 的不同之处

我一直在使用 Python difflib库来查找 2 个文档的不同之处。Differ().compare() 方法执行此操作,但它非常慢 - 与diff命令相比,大型 HTML 文档至少慢 100 倍。

如何有效地确定 2 个文档在 Python 中的不同之处?(理想情况下,我关注的是位置而不是实际的文本,这就是 SequenceMatcher().get_opcodes() 返回的内容。)

0 投票
2 回答
587 浏览

python - SequenceMatcher 用于多个输入,而不仅仅是两个?

想知道解决这个特定问题的最佳方法以及是否有任何库(最好是 python,但如果需要我可以灵活)。

我有一个文件,每行都有一个字符串。我想在每行中找到最长的常见模式及其位置。我知道我可以使用 SequenceMatcher 来比较第一行和第二行、第一行和第三行,等等,然后关联结果,但是如果有什么已经做到了呢?

理想情况下,这些匹配会出现在每行的任何位置,但对于初学者来说,我可以接受它们存在于每行的相同偏移处并从那里开始。像压缩库这样具有良好 API 来访问其字符串表的东西可能是理想的,但到目前为止我还没有找到任何符合该描述的东西。

例如这些行:

我希望看到 0-1 和 10-12 在同一位置的所有行中匹配,并且 line1[4,5] 匹配 line2[5,6] 匹配 line3[7,8]。

谢谢,

0 投票
2 回答
96 浏览

python - SequenceMatcher:只记录一次不匹配?

SequenceMatcher用来在一组文本中查找一组单词。我遇到的问题是我需要在找不到匹配项时进行记录,但每个文本一次。如果我尝试使用 if 语句,每次与另一个单词的比较失败时都会给我一个结果。

我也试过了re.matchre.find我遇到了同样的问题。上面的代码是我正在做的一个简单版本。我也是 Python 新手。非常感谢你!

0 投票
2 回答
3033 浏览

python - 使 difflib 的 SequenceMatcher 忽略“垃圾”字符

我有很多字符串要匹配相似度(每个字符串平均为 30 个字符)。我发现difflib's SequenceMatcher这项任务非常适合,因为它很简单并且结果很好。hellboy但如果我比较hell-boy喜欢这个

我希望这样的话能得到 100% 的匹配,即ratio of 1.0. 我知道上面函数中指定的垃圾字符不用于比较,而是用于查找最长的连续匹配子序列。有什么方法可以SequenceMatcher忽略一些“垃圾”字符以进行比较

0 投票
1 回答
2242 浏览

python - Difflib 的 SequenceMatcher - 自定义相等

我一直在尝试使用 SequenceMatcher 创建嵌套或递归效果。

最终目标是比较两个序列,它们都可能包含不同类型的实例。

例如,序列可以是:

通常,SequenceMatcher 只会将 [1] 识别为 l1 和 l2 的公共子序列。

我希望 SequnceMatcher 对 string instances 应用两次,以便"Foo"and 和 and"Fo"被认为是相等的,"Bar"并且"Bak"最长的公共子序列的长度为 3 [1, Foo/Fo, Bar/Bak]。也就是说,我希望 SequenceMatcher在比较 string members 时更加宽容

我尝试做的是为内置 str 类编写一个包装器:

编辑:也许更优雅的方式是:

通过这样做,以下是可能的:

所以,显然它正在工作,但我对覆盖散列函数有一种不好的感觉。什么时候使用哈希?它还能从哪里回来咬我?

SequenceMatcher 的文档说明如下:

这是一个灵活的类,用于比较任何类型的序列对,只要序列元素是可散列的。

根据定义,可散列元素需要满足以下要求:

比较相等的可散列对象必须具有相同的散列值

另外,我还需要覆盖cmp吗?

我很想听听我想到的其他解决方案。

谢谢。

0 投票
1 回答
821 浏览

python - Python:在 difflib 中传递 SequenceMatcher 一个“autojunk=False”标志会产生错误

我正在尝试使用 Python 的 difflib 包中的 SequenceMatcher 方法来识别字符串相似性。不过,我遇到了这种方法的奇怪行为,我相信我的问题可能与包的“垃圾”过滤器有关,这里有详细描述的问题。我只想说我认为我可以通过difflib 文档中描述的方式将 autojunk 标志传递给我的 SequenceMatcher 来解决我的问题:

但这会产生以下错误消息:

有谁知道我如何将 autojunk=False 标志传递给 SequenceMatcher?对于其他人可以提供的任何建议,我将不胜感激。

0 投票
1 回答
293 浏览

python - 方法 set_seq1 和 set_seq2 的工作,difflib python

我检查了 difflib 的文档,我对difflib.SequenceMatcher.ratio()实际工作方式感到困惑。考虑一下:

s = 0.9411764705882353
我想知道它是如何计算的。通过实际查看一个字符串与其他字符串的偏差来比较 2 个字符串。对于 2 个字符串ab文档说:

差异被计算为“我们需要对'a'做什么才能将其更改为'b'?”

还有类似的东西:

对于 b 中的 x,b2j[x] 是 x 出现的索引列表(进入 b);垃圾元素不出现

请解释上面的s示例。

0 投票
1 回答
435 浏览

python - difflib.SequenceMatcher 不返回唯一比率

我正在尝试比较 2 个街道网络,当我运行此代码时,它返回 0.253529 的比率...我需要它来比较每一行以获得唯一值,以便我可以查询不匹配的街道。我该怎么做才能让它返回每行唯一的比率值?

# 执行CalculateField arcpy.CalculateField_management(inFeatures, fieldName, expression, "PYTHON_9.3")

0 投票
1 回答
48 浏览

python - 以编程方式确定翻译后的名称是否等效

我正在尝试查看两个翻译后的名称是否相同。有时翻译的名称排序会有所不同。例如:

“欧玉成”和“欧玉成”是同一个人。有没有办法检测到这样的事情,这样这样的ratio名字会更高?类似于以下结果:

0 投票
1 回答
601 浏览

java - 如何将所有匹配的部分获取到正则表达式模式

我必须分 3 个阶段解析字符串。只有第一阶段有效,在 2 和 3 阶段 matcher.groupCount() 返回 0 - 这意味着它什么也没找到。我正在在线测试仪中测试我的正则表达式,这很好。但在这里它不起作用。所以问题是我可能错过了什么或者正则表达式有错误?

执行后 firstList 应该只包含一个值(在这种情况下):“requiredPartForFirstPattern”(可以是任何字符或任何字符序列)。

现在我正在迭代 firstList 中的所有值并使用 2 模式检查它们:

firstList 中的所有值都将具有以下形式:“[someText1],[someText2],[someText3]”。

执行后 secondList 应该包含以下值(在这种情况下):“someText1”、“someText2”、“someText3”。

最后是第三阶段。我迭代 secondList 中的所有值并用 3 模式检查它们。secondList 中的所有值都将具有以下形式:“'someValue1','someValue2'”。

执行后 secondList 应该包含这个值(在这种情况下):“someValue1”,“someValue2”。

我的 parseContent 方法: