Python 比较文本相似性的方法(difflib,Levenshtein)

yipeiwu_com5年前Python基础

最近工作需要用到序列匹配,检测相似性,不过有点复杂的是输入长度是不固定的,举例为:

input_and_output = [1, 2, '你好', 世界', 12.34, 45.6, -21, '中国', '美丽']

其中,需要从input_and_output 中选取不固定长度的一段作为输入,且顺序不定,然后去与总体进行比较,找出最符合的,开始是对汉字进行数值化编码,不过后来由于出现汉字越来越多,遂放弃该方法,转向别的方式,查找资料发现了两个python包广被推荐,从下面来看各有优缺点,记录之~

1、difflib

import difflib #python 自带库,不需额外安装

In [49]: test1
Out[49]: ['你好', '我是谁']

In [50]: test2
Out[50]: ['你好啊', '我谁']

In [51]: test3
Out[51]: [12, 'nihao']

In [52]: test4
Out[52]: ['你好', 'woshi']

In [53]: difflib.SequenceMatcher(a=test1, b=test2).quick_ratio()
Out[53]: 0.0

In [54]: difflib.SequenceMatcher(a=test1, b=test4).ratio()
Out[54]: 0.5

2、Levenshtein

#pip install python-Levenshtein

import Levenshtein


In [56]: Levenshtein.distance(','.join(test1), ','.join(test2))
Out[56]: 2

In [57]: Levenshtein.distance(','.join(test1), ','.join(test4))
Out[57]: 5

简单来说,difflib使用时不一定为字符串,但匹配时只有单个元素完全匹配才计入,

而Levenshtein则需要输入为字符串,匹配时是整体匹配(也可能跟把所有元素集中成一个字符串有关,具体待继续使用再摸索)

以上这篇Python 比较文本相似性的方法(difflib,Levenshtein)就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持【听图阁-专注于Python设计】。

相关文章

一篇文章彻底搞懂Python中可迭代(Iterable)、迭代器(Iterator)与生成器(Generator)的概念

前言 在Python中可迭代(Iterable)、迭代器(Iterator)和生成器(Generator)这几个概念是经常用到的,初学时对这几个概念也是经常混淆,现在是时候把这几个概念搞...

在Django admin中编辑ManyToManyField的实现方法

如何定义多对多关系 Django 本身自带了一个很强大的ORM,支持自定义model并将其映射到数据库的表中 model中可以定义各种类型的数据,比较直观的比如整形, 字符型,也可以定义...

windows下安装Python和pip终极图文教程

windows下安装Python和pip终极图文教程

本文希望提供傻瓜式的教程,能够令读者成功安装Python和pip。   第一步,我们先来安装Python,博主选择的版本是最新的3.4.2版本。windows下面的Python安装一般是...

Python反射的用法实例分析

本文实例讲述了Python反射的用法。分享给大家供大家参考,具体如下: 在做程序开发中,我们常常会遇到这样的需求:需要执行对象里的某个方法,或需要调用对象中的某个变量,但是由于种种原因我...

python 列表输出重复值以及对应的角标方法

如下所示: a = [99,1,2,1,3,4] # 集合存储重复数据 b=set() for i in a: if a.count(i)>1: b.update(...