difflib.SequenceMatcher isjunk 参数未考虑?

2024-04-11

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

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

difflib.SequenceMatcher(None, "AA", "A A").ratio() return 0.8

difflib.SequenceMatcher(lambda x: x in ' ', "AA", "A A").ratio() returns 0.8

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


发生这种情况是因为ratio函数在计算比率时使用总序列的长度,但它不使用过滤元素isjunk。因此,只要匹配块中的匹配数结果相同(有或没有isjunk),比率测量将是相同的。

我假设序列没有被过滤isjunk因为性能原因。

def ratio(self):   
    """Return a measure of the sequences' similarity (float in [0,1]).

    Where T is the total number of elements in both sequences, and
    M is the number of matches, this is 2.0*M / T.
    """

    matches = sum(triple[-1] for triple in self.get_matching_blocks())
    return _calculate_ratio(matches, len(self.a) + len(self.b))

self.a and self.b是传递给 SequenceMatcher 对象的字符串(序列)(示例中的“AA”和“A A”)。这isjunk功能lambda x: x in ' '仅用于确定匹配块。您的示例非常简单,因此两次调用的结果比率和匹配块是相同的。

difflib.SequenceMatcher(None, "AA", "A A").get_matching_blocks()
[Match(a=0, b=0, size=1), Match(a=1, b=2, size=1), Match(a=2, b=3, size=0)]

difflib.SequenceMatcher(lambda x: x == ' ', "AA", "A A").get_matching_blocks()
[Match(a=0, b=0, size=1), Match(a=1, b=2, size=1), Match(a=2, b=3, size=0)]

相同的匹配块,比例为: M = 2, T = 6 => ratio = 2.0 * 2 / 6

现在考虑下面的例子:

difflib.SequenceMatcher(None, "AA ", "A A").get_matching_blocks()
[Match(a=1, b=0, size=2), Match(a=3, b=3, size=0)]

difflib.SequenceMatcher(lambda x: x == ' ', "AA ", "A A").get_matching_blocks()
[Match(a=0, b=0, size=1), Match(a=1, b=2, size=1), Match(a=3, b=3, size=0)]

现在匹配的块不同,但比率将相同,因为匹配的数量仍然相等:

When isjunk is None: M = 2, T = 6 => ratio = 2.0 * 2 / 6

When isjunk is lambda x: x == ' ': M = 1 + 1, T = 6 => ratio = 2.0 * 2 / 6

最后,不同数量的比赛:

difflib.SequenceMatcher(None, "AA ", "A A ").get_matching_blocks()
[Match(a=1, b=0, size=2), Match(a=3, b=4, size=0)]

difflib.SequenceMatcher(lambda x: x == ' ', "AA ", "A A ").get_matching_blocks()
[Match(a=0, b=0, size=1), Match(a=1, b=2, size=2), Match(a=3, b=4, size=0)]

比赛场数不同

When isjunk is None: M = 2, T = 7 => ratio = 2.0 * 2 / 7

When isjunk is lambda x: x == ' ': M = 1 + 2, T = 6 => ratio = 2.0 * 3 / 7

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

difflib.SequenceMatcher isjunk 参数未考虑? 的相关文章

  • 如何从网站中抓取动态内容?

    所以我使用 scrapy 从亚马逊图书部分抓取数据 但不知何故我知道它有一些动态数据 我想知道如何从网站中提取动态数据 到目前为止我已经尝试过以下方法 import scrapy from items import AmazonsItem
  • 如何获取右侧数据框中不在左侧数据框中的数据

    我有两个数据帧 我正在尝试输出其中一个数据帧中的数据 而不是另一个数据帧中的数据 我可以使用第一个数据帧中的数据 但不能使用第二个数据帧中的数据 only new old merge new outer on Employee ID Ben
  • Python3 类型错误:replace() 参数 1 必须是 str,而不是 int

    我已经尝试了几天让这段代码在 MacOS 上运行 但没有成功 你能看一下我错过了什么吗 运行 python 3 6 我已经上传了整个代码 多谢 usr bin env python3 from future import print fun
  • 用定点迭代求解该方程

    我怎样才能解这个方程 x3 x 1 0 使用定点迭代 有没有定点迭代我可以在网上找到代码 尤其是Python 吗 Using scipy optimize fixed point http docs scipy org doc scipy
  • 从内存中发送图像

    我正在尝试为 Discord 机器人实现一个系统 该系统可以动态修改图像并将其发送给机器人用户 为此 我决定使用 Pillow PIL 库 因为它对于我的目的来说似乎简单明了 这是我的工作代码的示例 它加载一个示例图像 作为测试修改 在其上
  • 使用正则表达式检查整个字符串

    我正在尝试检查字符串是否是数字 因此正则表达式 d 似乎不错 然而 由于某种原因 该正则表达式也适合 78 46 92 168 8000 这是我不想要的 一些代码 class Foo rex re compile d def bar sel
  • python matplotlib 使用按钮事件添加和删除图形中的文本

    我试图在调用button press event 时将文本添加到鼠标指针位置的图形中 并在调用button release event 时将其删除 我已成功添加文本 但无法将其删除 这是我使用的代码的一部分 def onclick even
  • Tkinter:通过多处理启动进程会创建不需要的新窗口

    我计划围绕数值模拟编写一个小型 GUI 这就是我现在使用 Tkinter 的原因 模拟应在单独的进程中从 GUI 启动 为了玩一下 我定义了一个函数 random process 来生成成对的 randn 数字 这应该是一个真正的模拟过程
  • 创建 df 以生成给定格式的 json

    我正在尝试生成一个 df 来生成下面的 json Json数据 name flare children name K1 children name Exact size 4 name synonyms size 14 name K2 chi
  • 将 Selenium 与 PyCharm CE 结合使用

    我正在尝试将 Selenium 与 PyCharm CE 一起使用 我已经使用 pip install Selenium 安装了 Selenium 并且可以通过终端使用它 但是当我尝试将它与 PyCharm 一起使用时 出现导入错误 Imp
  • 我无法设置顶级标题

    我想为 TopLevel 设置标题 但 TopLevel 显示 Root 的标题 我认为我的下一个脚本与 TkInter 文档中的示例相对应 但给了我不好的结果 你能解释一下 为什么我的设置master title 顶部 in 应用程序顶部
  • 如何在 PyTorch 中对子集使用不同的数据增强

    如何针对不同的情况使用不同的数据增强 转换 Subset在 PyTorch 中吗 例如 train test torch utils data random split dataset 80000 2000 train and test将具
  • Pandas 使用什么规则来生成视图和副本?

    我对 Pandas 在决定数据帧中的选择是原始数据帧的副本或原始数据帧的视图时使用的规则感到困惑 例如 如果我有 df pd DataFrame np random randn 8 8 columns list ABCDEFGH index
  • Google App Engine self.redirect() POST 方法

    在 GAE Python 中 使用 webApp 框架 调用 self redirect some url 通过 GET 方法将用户重定向到该 URL 是否也可以通过带有一些参数的 POST 方法进行 重定向 如果可以的话 怎样做 Than
  • 使用条件在 pandas 数据框中生成新列

    我有一个 pandas 数据框 如下所示 portion used 0 1 1 0 1 2 0 3 2 3 0 0 3 4 0 8 我想根据以下内容创建一个新专栏used列 以便df看起来像这样 portion used alert 0 1
  • 出于安全目的,您是否有理由不执行自己的算法来打乱 ID?

    我计划实现我自己的非常简单的 哈希 公式 为具有多个用户的应用程序添加一层安全性 我目前的计划如下 用户创建一个帐户 此时后端会生成一个 ID ID 通过公式运行 假设 ID 57 8926 36 7 或同样随机的东西 然后 我将新的用户
  • 使用枚举名称而不是值对 Pydantic 字段进行编码

    我有一个枚举类 class Group enum Enum user 0 manager 1 admin 2 我有一个 pydantic 模型 class User BaseModel id int username str group G
  • 访问 Scrapy 内的 django 模型

    是否可以在 Scrapy 管道内访问我的 django 模型 以便我可以将抓取的数据直接保存到我的模型中 我见过this https scrapy readthedocs org en latest topics djangoitem ht
  • 在Python中通过sys.stdout写入unicode字符串

    暂时假设一个人无法使用print 从而享受自动编码检测的好处 所以这给我们留下了sys stdout 然而 sys stdout太蠢了不做任何合理的编码 http bugs python org issue4947 现在人们阅读 Pytho
  • 如何在Python中显示坐标网格线的变换?

    假设我有常规的笛卡尔坐标系 x y 并且我考虑一个矩形网格区域 D 分成小方块 我想看看域 D 如何在 Python 中的坐标变换 T x y gt u x y v x y 下映射 我正在寻找这样的东西 See here https mat

随机推荐

  • 还有一个“此 DAG 在网络服务器 DagBag 对象中不可用”

    这似乎是一个相当普遍的问题 我有一个 DAG 我不仅可以手动触发它airflow trigger dag 但它甚至按照其时间表执行 但拒绝显示在 UI 中 我已经多次重新启动网络服务器和调度程序 按 刷新 十亿次 然后运行它airflow
  • 如何获取上一个或最后一个项目?

    如何获取最后一个或上一个或未选择的项目 然后获取新项目JComboBox 我假设这适用于允许您向其添加项目侦听器的所有对象 String items item 1 item 2 item 3 item 4 JComboBox combo n
  • 带有超链接 ActiveDocument.Range 和 Format 的正则表达式

    托比亚斯的回答似乎就是门票 只是想补充一点 我刚刚意识到量词在字符类中毫无意义 还注意到同事的电子邮件通常在数字前面和美元符号后面有一个空格 因此下面是一些更好的正则表达式 对于美元金额 RegExp Pattern s d d 2 从中得
  • 在 ActionScript 中移动数组中的对象,产生体育场波浪效果

    我想移动数组中的所有对象 产生体育场波浪效果 我想根据舞台上的 y 值移动对象 我所有的方块大小都是 50x50 我想将它们向上移动然后向下移动 下面是我的代码 import fl transitions Tween import fl t
  • 无法在项目“Runner.xcodeproj”中找到名为“RunnerTests”的目标

    我的 HP 笔记本电脑上有 hackintosh 我正在尝试在 iOS 模拟器上运行 flutter 应用程序 但它给了我这个错误 Unable to find a target named RunnerTests in project R
  • 在 Jenkins 声明式管道的参数中定义凭证参数?

    我目前使用 Jenkins 声明式管道进行参数化构建 pipeline agent any parameters booleanParam name cleanDB defaultValue false description should
  • 跟进 R# 警告:可能的“System.InvalidOperationException”

    我有以下表达式 其中a AnswerId属于类型long ReSharper 警告可能出现InvalidOperationException在选择功能中 有没有这种情况真的可能发生的情况 极端情况也很好 long ids answers W
  • 模棱两可的出现“只是”

    我是一个绝对的初学者 使用 emacs 浏览 LYAH 我当前的设置 Ubuntu 12 04 LTS 使用体验 初学者 GNU Emacs 23 Use Experience beginner 能够在 haskell 主要模式下工作 发现
  • 使用 SUM 计算运行总计的 T-SQL

    我有一个简单的表 其中包含一些虚拟数据设置 例如 id user value 1 John 2 2 Ted 1 3 John 4 4 Ted 2 我可以通过执行以下 sql MSSQL 2008 语句来选择运行总计 SELECT a id
  • 在 SQL 中仅选择列中重复值的第一行

    我有一个表 其中有一列可能在突发中具有相同的值 像这样 id Col1 1 6050000 2 6050000 3 6050000 4 6060000 5 6060000 6 6060000 7 6060000 8 6060000 9
  • 为什么 C# 中线程安全事件调用的这种“常见”习惯用法完全有效? [复制]

    这个问题在这里已经有答案了 我正在阅读有效的 C 我遇到了以下模式来改进事件调用行为并使其线程安全 public class EventSource private EventHandler
  • Oauth2有没有Php客户端? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 是否有适用于 PHP 的 OAuth 用户库 理想情况下可用于 Google 的 API Google 使用 OAuth2 提供了自己的
  • Java:对文本文件行进行排序

    我正在使用 eclipse 并且尝试对大约 40 行的文本文件进行排序 如下所示 1 Terminator 1984 Schwarzenegger 2 Avatar 2009 Worthington 3 Avengers 2012 Down
  • 使用或不使用协议验证 URL

    您好 我想验证以下网址 因此只要存在 TLD 如 com net org 等 无论是否包含 http www 部分 它们都会通过 有效的 URL 应该是 http www domain com http domain com https w
  • ANDROID:将屏幕分成 2 个相等的部分,并有 2 个列表视图

    我正在尝试将 2 个列表视图放入我的布局中 问题是我事先不知道每个列表视图的大小 第一个列表视图可以有几个项目 0 1 2 最多大约 10 个 第二个列表视图可以有许多项目 最多 100 个 我尝试将两个列表视图的权重设置为 1 但它不起作
  • 将超类中的 @Sql 与子类中的 @Sql 合并

    我有一个带有注释的抽象类 Sql executionPhase ExecutionPhase BEFORE TEST METHOD scripts someScript 我有一个继承自抽象类的测试类 子类也注释为 Sql execution
  • Cron python脚本不执行[重复]

    这个问题在这里已经有答案了 我读过一些关于此的文章 但我无法在其中找到帮助 我有一个使用 smtplib 发送邮件的 python 脚本 从命令行调用时它会起作用 I have usr bin python作为第一行 并且可以使用以下命令运
  • 市政数据集? [关闭]

    Closed 这个问题是无关 help closed questions 目前不接受答案 我正在寻找一些数据来创建查找表 具体来说 美国每个州的所有县以及每个县的所有城市 我在哪里可以找到这样的市政数据集 编辑 我正在查看 census g
  • 为什么 subprocess.Popen 不起作用

    我尝试了很多事情 但由于某种原因我无法让事情发挥作用 我正在尝试使用 Python 脚本运行 MS VS 的 dumpbin 实用程序 这是我尝试过的 以及对我不起作用的 1 tempFile open C Windows temp tem
  • difflib.SequenceMatcher isjunk 参数未考虑?

    在 python difflib 库中 SequenceMatcher 类的行为是否异常 或者我是否误读了假定的行为 为什么 isjunk 论点在这种情况下似乎没有任何区别 difflib SequenceMatcher None AA A