概述
背景:
通过爬虫获取了大量的商品信息,由于爬到的商品类别是商家自定义的,现在要统一管理,把商家类别映射成自定义类别
思路:
匹配商家类别和自定义类别中每个名称的相似度,相似度大于某个阀值的,最大的自定义类别字符串则为映射目标
一、Levenshtein
使用python的Levenshtein来处理相似度
1、安装
pip install python-Levenshtein
sourceCode:https://github.com/ztane/python-Levenshtein/
2、使用
使用方法很简单,用 Levenshtein.distance 就行,直接上代码:
#!/usr/bin/python
import Levenshtein
baseCat = ['Womens Clothing & Accessories','Mens Clothing & Accessories'...]
needCampareStr = ['Masturbators','Palette','Mens Watch']
for cS in needCampareStr:
dStr = ''
distance = 999
for bS in baseCat:
cbDis = Levenshtein.distance(cS,bS)
if distance > cbDis:
distance = cbDis
dStr = bS
print('['+cS+'] --------> ['+dStr+']')
当然,很明显出来的结果不是想要的,出现了比如以下结果
[Palette] --------> [Pants]
[Lip Kits] --------> [Jumpsuits]
这是因为 Levenshtein 只是用文本距离来计算文本的相似度,并没有结合语意,比如
Palette 应该是对应 Painting 比较正确,但是单纯从字符串距离看,是Pants更接近
[Palette] ——–> [Pants] 4
[Palette] ——–> [Painting] 5
二、spaCy
因此需要换个思路,考虑语义,换用 spaCy 来尝试处理
1、安装
pip install -U spacy
2、下载英文模型
python -m spacy download en_core_web_lg
3、使用
import spacy
nlp = spacy.load('en_core_web_lg') # make sure to use larger model!
baseToken = ["Womens Clothing & Accessories"...]
checkToken = nlp("Palette")
maxMatch = 0
maxMatchStr = ''
for tokenStr in baseToken:
token = nlp(tokenStr)
match = token.similarity(checkToken)
print(tokenStr,'----->' ,match)
if match>maxMatch:
maxMatch = match
maxMatchStr = tokenStr
print ('['+maxMatchStr+']---->['+str(maxMatch)+']')
最后
以上就是风趣水蜜桃为你收集整理的字符串相似度匹配算法python_Python – 处理字符串相似度的全部内容,希望文章能够帮你解决字符串相似度匹配算法python_Python – 处理字符串相似度所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复