fuzzywuzzy:计算两个字符串之间的相似度

楔子

fuzzywuzzy是用来计算两个字符串之间的相似度的,它是依据Levenshtein Distance算法来进行计算的

Levenshtein Distance 算法,又叫 Edit Distance 算法,是指两个字符串之间,由一个转成另一个所需的最少编辑操作次数。许可的编辑操作包括将一个字符替换成另一个字符,插入一个字符,删除一个字符。一般来说,编辑距离越小,两个串的相似度越高。

fuzz

from fuzzywuzzy import fuzz

# 调用fuzz.ratio即可计算两个字符串之间的相似度
print(fuzz.ratio("古明地觉", "古明地恋"))  # 75

# 我们看到ratio是完全匹配的,它把字符串的长度也考虑在内了
print(fuzz.ratio("古明地觉", "古明地觉aa"))  # 80

# partial_ratio是非完全匹配,如果一方结束了,那么剩下的就不考虑了
print(fuzz.partial_ratio("古明地觉", "古明地觉也叫小五萝莉"))  # 100

# token_sort_ratio表示忽略顺序匹配,但前提是多个词,以空格进行分隔。所以明显是针对英文的
print(fuzz.ratio("古 明 地 觉", "古 明 地 觉"[:: -1]))  # 25
print(fuzz.token_sort_ratio("古 明 地 觉", "古 明 地 觉"[:: -1]))  # 100

# token_set_ratio表示去重匹配,同样:前提是多个词,以空格进行分隔
print(fuzz.ratio("a a a he", "a he"))  # 67
print(fuzz.token_set_ratio("a a a he", "a he"))  # 100

process

from fuzzywuzzy import process

words = ["hello python", "hello java", "hello golang", "hello php"]
# 会自动和words里面每一个元素进行比较,然后按照相似度从高到低排列
print(process.extract("hello thon", words))
# [(‘hello python‘, 91), (‘hello php‘, 74), (‘hello golang‘, 73), (‘hello java‘, 64)]

# 还可以传入一个limit参数,表示只返回前limit个,默认为5
print(process.extract("hello thon", words, limit=2))  # [(‘hello python‘, 91), (‘hello php‘, 74)]

# 返回分数最高的
print(process.extractOne("hello thon", words))  # (‘hello python‘, 91)

另外使用fuzzywuzzy这个模块的时候,会弹出一个警告

"""
UserWarning: Using slow pure-python SequenceMatcher. Install python-Levenshtein to remove this warning
"""

提示我们可以通过pip?install?python-Levenshtein得到解决,python-Levenshtein是一个用于加速字符串匹配的库,可提供4到10倍的加速。另外这个库在Windows上通过pip安装会失败,如果你本地没有vscode的话,不过我们可以去https://www.lfd.uci.edu/~gohlke/pythonlibs/这个网站上面下载。当然即使没有这个库也是可以的,没有的话fuzzywuzzy底层会使用python的标准库difflib进行匹配,只是会弹出警告罢了。

原文地址:https://www.cnblogs.com/traditional/p/12554215.html

时间: 2024-10-27 08:08:38

fuzzywuzzy:计算两个字符串之间的相似度的相关文章

java计算两个日期之间相隔的天数

1 import java.text.ParseException; 2 import java.text.SimpleDateFormat; 3 import java.util.Calendar; 4 import java.util.Date; 5 6 7 public class date { 8 9 /** 10 * @param args 11 * @throws ParseException 12 */ 13 public static void main(String[] arg

计算两个字符串的相似度---动态规划实现

问题描述:把两个字符串变成相同的基本操作定义如下:1.     修改一个字符(如把 a 变成 b)2.     增加一个字符 (如 abed 变成 abedd)3.     删除一个字符(如 jackbllog 变成 jackblog)针对于 jackbllog到jackblog 只需要删除一个或增加一个 l 就可以把两个字符串变为相同.把这种操作需要的次数定义为两个字符串的距离 L, 则相似度定义为1/(L+1) 即距离加一的倒数.那么jackbllog和jackblog的相似度为 1/1+1

计算两个日期之间相差几天(Date类型与String类型互相转换)

一:计算两个日期之间相差几天 1 /** 2 * 3 */ 4 package com.hlcui.date; 5 6 import java.text.ParseException; 7 import java.text.SimpleDateFormat; 8 import java.util.Calendar; 9 import java.util.Date; 10 11 import org.junit.Test; 12 13 /** 14 * @author Administrator

js实现的计算两个时间之间的时间差

js实现的计算两个时间之间的时间差:在实际应用中,需要计算两个时间点之间的差距,一般来说都是计算当前时间和一个指定时间点之间的差距,并且有时候需要精确到天.小时.分钟和秒,下面就简单介绍一下如何实现此效果.代码如下: <!DOCTYPE html> <html> <head> <meta charset=" utf-8"> <meta name="author" content="http://www.

用VBA计算两个日期之间的工作日(去掉周末两天)

最近公司HR和Finance想算员工的工作天数,想让我帮忙写些VBA,自己从网上找了下代码,自己再改改,以下来自网络. 计算两个日期之间的工作日,用VBA,因量大,最好用数组做 Sub kk() Dim arr, i&, j&, m& arr = Sheet2.Range("b3:f4") For i = 1 To UBound(arr) m = 0 For j = arr(i, 1) To arr(i, 3) If Weekday(j) <> 1

PHP 计算两个时间戳之间相差的时间

//功能:计算两个时间戳之间相差的日时分秒 //$begin_time 开始时间戳 //$end_time 结束时间戳 function timediff($begin_time,$end_time) { if($begin_time < $end_time){ $starttime = $begin_time; $endtime = $end_time; }else{ $starttime = $end_time; $endtime = $begin_time; } //计算天数 $timed

计算两个字符串最大公有子串

*:first-child { margin-top: 0 !important; } body>*:last-child { margin-bottom: 0 !important; } /* BLOCKS =============================================================================*/ p, blockquote, ul, ol, dl, table, pre { margin: 15px 0; } /* HEAD

计算两个时间戳之间相差的时间

代码如下 //功能:计算两个时间戳之间相差的日时分秒 //$begin_time 开始时间戳 //$end_time 结束时间戳 function timediff($begin_time,$end_time) { if($begin_time < $end_time){ $starttime = $begin_time; $endtime = $end_time; }else{ $starttime = $end_time; $endtime = $begin_time; } //计算天数 $

Java 根据给定的日期,计算两个日期之间的时间差

计算两个Date之间的时间差,基本思路为把Date转换为ms(微秒),然后计算两个微秒时间差. 时间的兑换规则如下: 1s秒 = 1000ms毫秒 1min分种 = 60s秒 1hours小时 = 60min分钟 1day天 = 24hours小时 package com.qiyadeng.date; import java.text.SimpleDateFormat; import java.util.Date; public class DateDifferentExample { publ