查重

使用 Levenshtein 寻找彼此相似的字符串对

不羁的心 提交于 2020-03-01 03:33:46
我们爬来了一些数据,接下来以豆瓣畅销书为例。 爬虫爬来的数据有 ['艾伦•图灵传','深入理解计算机系统(原书第2版)','C++ Primer 中文版(第 5 版)','深入理解计算机系统','Web性能权威指南'] 而我们系统中原有的数据有 ['艾伦·图灵传','深入理解计算机系统(原书第2版)','C++ Primer 中文版(第 4 版)','深入理解计算机系统'] 做前端的同志可能一眼就看出来了,两个数组中有三个元素是因为全半角的缘故,是不能全词匹配的,而前两本书事实上是同一本书。而《深入理解计算机系统》是可以全词匹配到的,《Web性能权威指南》一书是可以直接添加到数据库的。 解决方案一: 这个任务大可以交给编辑去做,但是时间复杂度为 N^2,连程序都吃不消跑,更别提让编辑做了。 解决方案二: 去除所有的标点符号,或者将所有全角符号转化为半角。 去掉所有空格。 然后进行全词匹配,这样做有些鲁莽,但是速度一点也不慢。 解决方案三: 我想到了用 jieba 进行中文分词, import jieba book = '艾伦·图灵传' word = jieba.cut(book) words = list(word) # words = ['艾伦', '·', '图灵', '传'] 对于每本书我们都可以进行这样一个分词操作,并可以考虑将标点符号去除。