之前笔者写过一篇文章关于如何做搜索,但那篇文章的角度是从文本相似度角度写的。那种方式是目前发展的趋势,但是真正的搜索特别是网页搜索不可能在大范围的文本之间两两算相似度的。那样搜索引擎的效率会变得特别低下。本文将从字符串模糊匹配的角度介绍一下搜索引擎。

一般的搜索,要分为两个步骤:搜索和排序。搜索的方法有很多,为了高效一般进行字符串或关键词匹配,而用户提供的一些关键词可能不是数据库中保存的,例如使用倒排的方法很难找到Head节点,此处需要使用模糊匹配的方式。这里简单列举一下Learning-to-Rank排序的方法:BM25算法、TF-IDF算相似度、SVD奇异值分解(主题模型)得到向量表示算相似度、再就是之前介绍的文本相似度计算的方法。如果是网页的排序,可能会涉及到网址质量好坏需要使用PageRank排序算法等。

本文主要从模糊匹配的角度,简单介绍下搜索。主要解决的问题类似,“刘得华演过的电影”与“刘德华演过的电影”表示的是同一个意思。

1. 编辑距离

首先给大家介绍一下编辑距离,编辑距离就是用于衡量两个字符串之间的差异。具体描述为:string1通过多少次最少操作(增添字符、删除字符、替换字符)得到string2,最少操作的次数就定义为编辑距离。例如句子刘得华演过的电影”与“刘德华演过的电影”只需要一次替换“得”为“德”,所以二者之间的距离为1。如果两个字符串S1和S2,长度分别为i,j。那么二者之间的距离D(i,j)可以表示为:

(1)min(i,j)==0,即S1,S2中存在空字符串

D(i,j)=max(i,j)

(2)min(i,j) != 0,

去掉S1或S2的最后一个字符进行比较,分别得到距离

D(i,j-1), D(i-1,j),D(i-1,j-1)

由动态规划的思想可以得到:

D(i,j) = min{D(i,j-1), D(i-1,j),D(i-1,j-1)+sigma(i,j)} 其中sigma(i,j)取值为0或 1,1表示S1和S2最后一个字符不相同,0表示相同。具体实现如下:

intLevenshteinDistance(constchar*s,intlen_s,constchar*t,intlen_t){intcost;if(len_s==)returnlen_t;if(len_t==)returnlen_s;if(s[len_s-1]==t[len_t-1])cost=;elsecost=1;returnminimum(LevenshteinDistance(s,len_s-1,t,len_t)+1,LevenshteinDistance(s,len_s,t,len_t-1)+1,LevenshteinDistance(s,len_s-1,t,len_t-1)+cost);}

2. fuzzywuzzy

Python提供fuzzywuzzy模块,不仅可用于计算两个字符串之间的相似度,而且还提供排序接口能从大量候选集中找到最相似的句子。

(1)安装

需要安装python-Levenshtein库用于计算上述讲解的编辑距离。

pip install python-Levenshtein

pip install fuzzywuzzy

(2)接口说明

两个模块:fuzz, process,fuzz主要用于两字符串之间匹配,process主要用于搜索排序。

fuzz.ratio(s1,s2)直接计算s2和s2之间的相似度,返回值为0-100,100表示完全相同;

fuzz.partial_ratio(S1,S2)部分匹配,如果S1是S2的子串依然返回100;

fuzz.token_sort_ratio(S1,S2)只比较S1,S2单词是否相同,不考虑词语之间的顺序;

fuzz.token_set_ratio(S1,S2)相比fuzz.token_sort_ratio不考虑词语出现的次数;

process.extract(S1, ListS,limit=n),表示从列表ListS中找出Top n与S1最相似的句子;

process.extractOne(S1,ListS),返回最相似的一个

(3)使用

运行结果:

说明str1和str2之间相似度是对称的。

python模糊查询_python实现字符串模糊匹配相关推荐

  1. php mysql 模糊查询_PHP如何实现模糊查询(图文代码)

    本篇文章给大家带来的内容是关于PHP如何实现模糊查询(图文代码),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助. 简介从本质上揭密PHP模糊查询技术 功能根据输入的关键字查找相关用户 ...

  2. mysql里面模糊查询sql_总结Mysql 模糊查询的几种方式

    总结下开发过程中用过模糊查询功能所用的一些东西,还有就是在建表时一定要考虑完善在建表,否则后期数据量大了在改表会非常的麻烦,请不要为了能够尽快用表而匆匆创建.在这也是给自己一个警醒,以后不再犯. #s ...

  3. python数据库模糊查询_python中数据库like模糊查询方式

    python中数据库like模糊查询方式 在Python中%是一个格式化字符,所以如果需要使用%则需要写成%%. 将在Python中执行的sql语句改为: sql = "SELECT * F ...

  4. python mysql模糊查询_python中的mysql数据库like模糊查询

    近期工作在使用python语言开发项目,工作中遇到了一个python连接mysql的like查询. 因为%在python中三个特殊的符号,如%s.%d分别代表了字符串占位符和数字占位符. 大家知道.m ...

  5. python数据库模糊查询_Python操作mongodb数据库进行模糊查询操作示例

    本文实例讲述了Python操作mongodb数据库进行模糊查询操作.分享给大家供大家参考,具体如下: # -*- coding: utf-8 -*- import pymongo import re ...

  6. SQL 模糊查询条件的四种匹配模式

    执行数据库查询时,有完整查询和模糊查询之分. 一般模糊语句格式如下: SELECT 字段 FROM 表 WHERE 某字段 LIKE 条件; 其中,关于条件,SQL提供了四种匹配模式: 1.%:表示零 ...

  7. python模糊查询mongodb_Python札记 -- MongoDB模糊查询

    最近在使用MongoDB的时候,遇到了使用多个关键词进行模糊查询的场景.竹风使用的是mongoengine库. 查了各种资料,最后总结出比较好用的方法.先上代码,后面进行详细说明.如下: 1 #!/u ...

  8. python字典查询_python查询字典

    广告关闭 腾讯云11.11云上盛惠 ,精选热门产品助力上云,云服务器首年88元起,买的越多返的越多,最高返5000元! 开发准备cas 的 python sdk 包含了用于访问和操作 cas 的所有 ...

  9. cad模糊查询符号_万能模糊查询SQL

    ****************************************************************** * 功能:万能模糊查询SQL * 时间:2015/1/30 16: ...

最新文章

  1. 面试现场:小伙伴美团一面的分享和分析「含解答」
  2. Mysql一些重要配置参数的学习与整理(一)
  3. 数据库---增删改查
  4. android:自己实现能播放网络视频url的播放器
  5. git push -u origin master和git push 远程主机名 本地分支名:远程分支名作用
  6. C++ coredump原因总结(转载)
  7. PHP和原生JS实现九型人格在线测试(144题)
  8. html页眉页脚独立,页眉页脚怎么单独设置
  9. 怎样使用 iOS 7 的 AVSpeechSynthesizer 制作有声书(1)
  10. iOS生成推送push证书,push.p12文件
  11. ngx_http_core_module模块提供的变量
  12. 苹果apple账号授权登录第三方APP
  13. 小米2s Android pie,Android 9.0 Pie正式版发布,小米MIX 2S率先升级,国内第一款!
  14. 哪个106短信服务平台好?这4点要参考!
  15. java读取Excel指定格式的数据
  16. AcWing 4411. 三仙归洞 (简单模拟)
  17. java左侧栏怎么打开_eclipse左侧项目栏不见了怎么解决
  18. prfpset文件怎么导入pr?pr预设如何导入?
  19. 【报告分享】2021年一季度楼市总结-58安居客房产研究院(附下载)
  20. ls与ls -l区别

热门文章

  1. ABAP日期函数应用
  2. java 句柄池_深入理解JVM之Java对象的创建、内存布局、访问定位详解
  3. linux怎么运行ing,Linux命令笔记ing
  4. 一加3t刷机后还卡_一加8T/8/8Pro 氢OS11刷入面具magisk完美root权限超简单教程
  5. a as as big rat_你知道填空中as的这个变态用法吗?
  6. 读取word对应页码_毕业论文怎样自动生成目录及从任意页开始排页码
  7. hdfs user 连接_通过API访问HDFS
  8. Python 读取和输出到txt
  9. Python 各种读取保存tif,tiff,png,jpg,mat等格式图像方法大集合
  10. Python: 大型数组运算