问题标签 [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 投票
2 回答
10499 浏览

python - Python 的 SequenceMatcher 是如何工作的?

我对SequenceMatcher根据参数的顺序返回的两个不同答案感到有些困惑。为什么会这样?

例子

SequenceMatcher 不可交换:

0 投票
5 回答
3699 浏览

python - 比较一个csv的两列并在另一个csv中输出字符串相似率

我对python编程很陌生。我正在尝试获取一个包含两列字符串值的 csv 文件,并希望比较两列之间字符串的相似度。然后我想取值并将比率输出到另一个文件中。

csv 可能如下所示:

我希望输出文件为每一行显示第 1 列中的字符串与第 2 列的相似程度。我正在使用 difflib 输出比率分数。

这是我到目前为止的代码:

我得到错误:

我觉得我没有正确导入列列表并针对 sequencematcher 函数运行它。

0 投票
2 回答
1636 浏览

python - difflib.SequenceMatcher isjunk 参数不考虑?

在 python difflib 库中,SequenceMatcher 类的行为是否异常,或者我是否误读了假定的行为?

为什么 isjunk 论点在这种情况下似乎没有任何区别?

我的理解是,如果省略空格,则比率应为1。

0 投票
0 回答
117 浏览

python - 使用 SequenceMatcher 进行列表对齐的自定义项

我正在使用 SequenceMatcher 来对齐两个列表。每个列表的项目是元组或整数。要求是,对于包含特定整数的元组被认为是相等的。例如:

为此,我决定重写元组的相等方法:

这是我的示例数据:

使用 SequenceMatcher,我预计比率将为 1.0(等于)。但结果如下:

但是当我尝试使用 '==' 运算符比较列表时,结果是相等的:

谁能指出出了什么问题?谢谢。

0 投票
0 回答
512 浏览

python - 近似名称匹配以合并两个数据框python

我正在使用两个数据框(df1 和 df2),我想根据名称匹配将 df2 合并到 df1 中,但两者之间的名称不完全匹配(例如:'JS Smith' 可能是“JS Smith ( Jr)") 和 df1 中的名称位于由“|”分隔的列表中 用于各种名称变体。

此外,我在 df2 中还有 1 列包含稍微不同的名称,如果原始列中没有匹配项,我想回退到这些名称。

最后,如果 df1 中有一个唯一匹配项,我只想从 df2 中引入数据,并且我不想覆盖之前引入的条目。

以下是 dfs 的示例:

df1(其中 N1 表示名称变量列表中的第一个名称)

df2

我想先在“Name Type 2”上进行匹配假设匹配是:

  1. 名称 0.1 -> N1|N2 中的名称之一(df1 的第 1 行)
  2. 名称 2.1 -> N1|N2|N3|N4 中的名称之一(df1 的第 0 行)
  3. 名称 1.1 -> 不匹配 df1 中的任何名称,然后我会检查与 N1|N2|N3 匹配的名称 1(df1 的第 2 行)

生成的新 df 如下所示:

我目前的做法是:

  1. 遍历 df2 中的每一行并使用搜索 df1df1[df1['Name Variants'].contains('Name0.1')
  2. 如果存在唯一匹配项(在 df1 中找到 1 行)并且“匹配”未标记为“真”,那么我会提取数据
  3. 如果有多个匹配项,我不会提取数据
  4. 如果没有匹配项,我使用相同的方法搜索“名称 0”并再次运行相同的逻辑(1 个匹配项,当前没有合并数据等)

我的问题是:

  1. 考虑到这是非常耗时的
  2. 我不匹配,因为我可以给出最初描述的轻微拼写差异

这是我当前方法的代码:

0 投票
1 回答
241 浏览

python - 如何删除python中多个字符串之间的无效字符?

我正在使用西班牙语OCR 进行一个项目。相机在一行文本中捕捉不同的帧。文本行包含以下内容:

Este texto, es una prueba del dispositivo lector para no viidentes。

经过一些操作后,我得到了这样的字符串:

我想加入字符串,以便我可以在最终字符串中获取扫描行的文本,如下所示:

一开始我尝试SequenceMatcher在两个字符串之间使用,但它没有效果:

结果包含无效字符,例如|or !

之间s2s3

等等我在 Windows 7 上使用 python 2.7。

0 投票
1 回答
1218 浏览

python - 在两组名称之间找到最接近的近似匹配

我有两组名称,我想找到两者之间最接近的匹配项,如果没有找到“足够接近”的匹配项,我想将名称与其自身匹配。

我目前的方法是创建一个包含所有可能组合的数据框,并使用 .apply 或列表来迭代并通过 SequenceMatcher(导入为 sm)计算相似度。

问题是我在两个列表中都有几千个名字,这导致了难以处理的运行时间。

理想情况下,我的匹配标准是 sm 比率 >= 0.85,第一个名字在第二个名字中作为一个整体出现。如果不满足这些条件,则名称应与其自身匹配。

我想实现的最后一步是用这些匹配的名称替换原始系列。

这是我当前方法的代码,如果不清楚,请告诉我如何帮助澄清:

0 投票
0 回答
541 浏览

r - R中的序列聚类

我正在尝试编写一个简单的 R 序列聚类/分组/简化解决方案。我是一个初学者,有一段时间没有使用 R,所以请原谅简单和愚蠢的问题/解决方案。任务取自 SAP,它们代表 P2P 流程的执行。

概述:

输入:经过一些建议,我认为输入数据应该涵盖单词而不是它们的 id(我们不想比较数字而是简化单词序列)

选项 1:SAP P2P 中的步骤序列,例如:

我的数据集包含大约 700 个序列(测试 100),它们既短(5 步)又长(甚至超过 50)。

问题是我(在结果解释期间)不想比较所有,即 700 个序列,但我想以某种方式区分相似的序列。通常,特别是对于长序列,在 20 步之后会发现差异,例如:

Seq1: PR > PO > GR > IR > GR > IR > GR > IR > 付款

Seq2: PR > PO > GR > IR > IR > GR > GR > IR > 付款

最后,它应该会导致发现流程执行中的低效率。我的问题是,你对我如何接近那个问题之王有什么建议吗?阅读您的评论后,我认为聚类方法不是正确的方法。我真的不在乎我们是否应该使用集群或其他东西,重要的是简化流程。

我将不胜感激任何提示,建议等。

测试数据(> 用作分隔符)。

0 投票
2 回答
707 浏览

python - 带有句子的 Difflib 序列匹配器

我有以下数据框

我想查找左边的单词/句子和右边的句子,如果最大前两个单词匹配(例如'potato la'并省略'best'),那么它会给出一个分数。

我已经使用了两种不同的方法:

我在互联网上找到的。

第二个工作正常,除了它试图匹配整个短语。如何将第一列中的单词与第二列中的句子匹配,以便最终给我一个“是”它们在句子中(或部分)或“不”它们不是。

0 投票
1 回答
2047 浏览

python - Python 3.6 SequenceMatcher().get_matching_blocks() 是如何工作的?

我正在尝试使用SequenceMatcher.ratio()来获取两个字符串的相似性:"86418648""86488648"

返回的比率是0.5,这比我预期的要低得多,因为两个字符串中只有一个字符不同。

似乎该比率是根据匹配块计算的。所以我尝试运行SequenceMatcher.get_matching_blocks()

但我预计结果是:

谁能帮忙解释为什么它与前 3 个数字不匹配"864"