3.3.1 SequenceMatcher对象

类difflib.SequenceMatcher(isjunk=None, a=‘‘, b=‘‘, autojunk=True)

本函数是构造函数,主要创建任何类型序列的比较对象。

isjunk是关键字参数,主要设置过滤函数,比如想丢掉a和b比较序列里特定的字符,就可以设置相应的函数,比如不要空格和跳格符:lambda x: x in " \t"。

a和b是比较序列。

autojunk是用来设置是否自动垃圾处理启用。它具有自动垃圾启发式,可以将重复超过片段1%或者重复200次的字符作为垃圾来处理。可以通过将autojunk设置为false关闭该功能。

set_seqs(a,b)

设置两个比较的序列。

set_seq1(a)

改变第一个比较序列,第二个比较序列保持不变。

set_seq2(b)

改变第二个比较序列,第一个比较序列保持不变。

find_longest_match(alo, ahi, blo, bhi)

从比较序列a[alo:ahi]和b[blo:bhi]里找到最长相同的交集序列。

如果isjunk没有设置,即是None时,此函数返回(i, j, k)元组,即是a[i:i+k]与b[j:j+k]是相同的序列。

如果isjunk有设置,此函数也返回(i, j, k)元组,不过会跳过丢掉的字符进行比较。

如果此函数返回(alo, blo, 0)表示没有任何相同的序列,此函数返回一个命名的元组Match(a, b, size)。

get_matching_blocks()

此函数返回多个描述a和b序列相同部分的三元组的列表。每一个三元组(i, j, n)是表示a[i: i+n] == b[j: j+n],最后一个三元组例外,它表示为(len(a), len(b), 0)。在三元组里i和j采用单调递增的方式,因此比较相同之后,永远是增加方向进行。

get_opcodes()

此函数每执行一次返回5个元素的元组,元组描述了从a序列变成b序列所经历的步骤。5个元素的元组表示为(tag, i1, i2, j1, j2),其中tag表示动作,i1表示序列a的开始位置,i2表示序列a的结束位置,j1表示序列b的开始位置,j2表示序列b的结束位置。

tag表示的字符串为:

replace 表示a[i1 : i2]将要被b[j1 : j2]替换。

delete  表示a[i1 : i2]将要被删除。

insert  表示b[j1 : j2]将被插入到a[i1 : i1]地方。

equal  表示a[i1 : i2] == b[j1 : j2]相同。

get_grouped_opcodes(n=3)

返回一个列表保存操作组,可以同时返回多个操作组。与get_opcodes()函数区别,就是此函数返回列表,而get_opcodes()只返回一个。

ratio()

返回一个度量两个序列的相似程度,值在[0, 1]之间。当没有调用过 get_matching_blocks() 或 get_opcodes() 时,调用此函数需要比较大的计算量。如果只是想大概计算,可以使用quick_ratio() 或 real_quick_ratio()函数,这样减少一些计算量。

quick_ratio()

返回一个大于ratio()函数返回相似度的值,比ratio()相对要快一些。

real_quick_ratio()

返回一个大于ratio()函数返回相似度的值,比ratio()速度更快一些。

蔡军生 微信号:shenzhencai  深圳

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-10-13 12:24:54

3.3.1 SequenceMatcher对象的相关文章

python difflib.md

difflib 此模块提供了用于比较序列的类和函数.它可以用于例如比较文件,并且可以产生各种格式的差异信息,包括HTML和上下文以及统一差异. difflib 模块包含用于计算和处理序列间差异的工具.它特别适用于比较文本,包括使用几种常见差异格式生成报告的函数. 本节中的示例将在扩散数据中使用这个常见的测试difflib_data.py模块: text1 = """Lorem ipsum dolor sit amet, consectetuer adipiscing elit

python基础速成

一.基础模块 def prt(age,name):#函数定义 print("%s is %d 年龄 old"%(name,age)) if __name__=="__main__":#程序入口 print("Hello World") prt(45,"gaici") 获取输入:使用input()函数 name=input("you name ?") python的文件类型主要分为3类,分别是源代码.字节代码

通过jQuery Ajax使用FormData对象上传文件

转自:http://www.cnblogs.com/labnizejuly/p/5588444.html FormData对象,是可以使用一系列的键值对来模拟一个完整的表单,然后使用XMLHttpRequest发送这个"表单". <form id="uploadForm" enctype="multipart/form-data"> <input id="file" type="file"

对象序列化和反序列--Hibernate的查询和新增极其相似

Hibernate几个关键字持久化,ORM(关系对象映射)(数据库中关系称作是一张表) 应用在项目中,刘一从写的查询代码,每次都挂掉,想要弄出测试数据,自己想着把查询出来的复杂数据弄到文件里自己要是去造那些复杂数据很麻烦public class Object1 { public static void main(String args[]){ HashMap<String, Object> obj=new HashMap<String,Object>(); obj.put(&quo

C#中XML与对象之间的序列化、反序列化

using System; using System.IO; using System.Text; using System.Xml; using System.Xml.Serialization; namespace Xml.Utility { public static class XmlUtil { /// <summary> /// 将一个对象序列化为XML字符串 /// </summary> /// <param name="o">要序列化

菜鸟学python之对象类型及运算

Python 中的变量不需要声明.每个变量在使用前都必须赋值,变量赋值以后该变量才会被创建. 在 Python 中,变量就是变量,它没有类型,我们所说的"类型"是变量所指的内存中对象的类型. 等号(=)用来给变量赋值. 1 变量赋值 1.1 单个变量赋值 >>> name="python" >>> print(name) python 1.2 多个变量赋值 >>> name=names="python&

java 类对象使用

在学习反射机制时,总结一下获得类对象方式: 第一种方式:通过类本身来获得对象 Class<?> classname = this.getClass(); 或者this.class 第二种方式:通过子类的实例获取父类对象 ClassName cn = new ClassName(); UserClass = cn.getClass(); Class<?> SubUserClass = UserClass.getSuperclass(); 第三种方式:通过类名加.class获取对象 C

dbutils封装对象,单列,一行一列(用)

基本用法:查找并封装对象与对象集合 public User findUserByNamePassword(String name,String password){ QueryRunner runner = new QueryRunner(DataSourceUtils.getDataSource()); String sql = "select * from user where name='"+name+"' and password = '"+password

Class类 获取Class对象

阅读API的Class类得知,Class 没有公共构造方法.Class 对象是在加载类时由 Java 虚拟机以及通过调用类加载器中的 defineClass 方法自动构造的 获取Class对象的三种方式(实例采用Person类) 方式1:通过Object类的getObject()方法 Person p = new Person(); Class c = p.getClass(); 方式2: 通过 类名.class 获取到字节码文件对象(任意数据类型都具备一个class静态属性,看上去要比第一种方