两种实现模糊匹配的方法--python

这篇具有很好参考价值的文章主要介绍了两种实现模糊匹配的方法--python。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

以下举例以同一个excel中, sheet2的词语去匹配sheet1中词语找模糊匹配结果来举例
导入数据,读取excel中sheet1(被匹配的目标词库),sheet2(需要进行匹配的词)

import pandas as pd
import jieba
#需要进行匹配的词
attendee =  pd.read_excel('路径/testnn.xlsx',sheet_name='Sheet2')
#被匹配的目标词库
account =  pd.read_excel('路径/testnn.xlsx',sheet_name='Sheet1')
attendee = attendee.values
account = account.values
#print(attendee)
#print(account)

结果:python模糊匹配,Python,python,开发语言,pandas

…………………………………………………………

一、分词匹配

把需要匹配的词语和目标词语做分词,对比分词匹配度判定关联关系

1、导入jieba分词包,对目标词和待匹配词进行分词,并将其导入至新字典中

#需要进行匹配的词的分词结果字典
Sheet2 = {}
for i in attendee:
    HCO=[]
    temp = jieba.cut(i[0], cut_all=False)
    for a in temp:
        HCO.append(a)
    Sheet2[i[0]] = HCO
#print(Sheet2)
#被匹配的目标词库的分词结果字典
Sheet1 = {}
for i in account:
     HCO = []
     temp = jieba.cut(i[0], cut_all=False)
     for a in temp:
         HCO.append(a)
     Sheet1[i[0]] = HCO
#print(Sheet1)

结果:
python模糊匹配,Python,python,开发语言,pandas
2、遍历分词后结果字典,对比相同的关键词并记录匹配情况

for i in Sheet1:
    a = i
    if i in Sheet2:
        #如果名称完全相同则返回名称
        resultstr = i
    #如果名称不完全相同,对比分词后的词语
    for j in Sheet2:
        b = j
        #需要进行匹配的词的分词数量
        origin_num = 0  
        #两分词结果中匹配成功的分词词语数量
        match_num = 0
        #存储需要进行匹配的词的分词结果
        origin_l=[]
        for k in Sheet1[i] :
            # xxxx代表分词结果中需要人工判定排除的异常词
            if k != 'xxxx':
                c = k
                origin_l.append(k)
                origin_num = origin_num +1
                target_l = []
                target_num = 0
                for h in Sheet2[j] :
                    # xxxx代表分词结果中需要人工判定排除的异常词
                    if h != 'xxxx':
                        d = h
                        target_num = target_num +1
                        target_l.append(h)
                        if c == d:
                            match_num = match_num + 1
        #选取符合条件的结果输出,每条词语对应一条结果
        if match_num > origin_num - match_num:
            data = {'origin_str': a, 'target_str': b, 'origin_l': origin_l, 'target_l': target_l,'origin_num': origin_num, 'target_num':target_num, 'match_num':match_num}
            print(data)

结果概览:
python模糊匹配,Python,python,开发语言,pandas
整体代码

import pandas as pd
import jieba
#需要进行匹配的词
attendee =  pd.read_excel('路径/testnn.xlsx',sheet_name='Sheet2')
#被匹配的目标词库
account =  pd.read_excel('路径/testnn.xlsx',sheet_name='Sheet1')
attendee = attendee.values
account = account.values
#print(attendee)
#print(account)

Sheet2 = {}
for i in attendee:
    HCO=[]
    temp = jieba.cut(i[0], cut_all=False)
    for a in temp:
        HCO.append(a)
    Sheet2[i[0]] = HCO
#print(Sheet2)
#被匹配的目标词库的分词结果字典
Sheet1 = {}
for i in account:
     HCO = []
     temp = jieba.cut(i[0], cut_all=False)
     for a in temp:
         HCO.append(a)
     Sheet1[i[0]] = HCO
#print(Sheet1)
for i in Sheet1:
    a = i
    if i in Sheet2:
        #如果名称完全相同则返回名称
        resultstr = i
    #如果名称不完全相同,对比分词后的词语
    for j in Sheet2:
        b = j
        #需要进行匹配的词的分词数量
        origin_num = 0
        #两分词结果中匹配成功的分词词语数量
        match_num = 0
        #存储需要进行匹配的词的分词结果
        origin_l=[]
        for k in Sheet1[i] :
            # xxxx代表分词结果中需要人工判定排除的异常词
            if k != 'xxxx':
                c = k
                origin_l.append(k)
                origin_num = origin_num +1
                target_l = []
                target_num = 0
                for h in Sheet2[j] :
                    # xxxx代表分词结果中需要人工判定排除的异常词
                    if h != 'xxxx':
                        d = h
                        target_num = target_num +1
                        target_l.append(h)
                        if c == d:
                            match_num = match_num + 1
        #选取符合条件的结果输出
        if match_num > origin_num - match_num:
            data = {'origin_str': a, 'target_str': b, 'origin_l': origin_l, 'target_l': target_l,'origin_num': origin_num, 'target_num':target_num, 'match_num':match_num}
            print(data)

二、距离匹配

调用fuzzywuzzy包中直接进行判断,采用距离匹配方式
两个字符串之间,由一个转成另一个所需的最少编辑操作次数。
编辑操作包括:将一个字符替换成另一个字符,插入字符,删除字符。
一般来说,编辑距离越小,两个串的相似度越大
整体代码

import pandas as pd
import jieba
from fuzzywuzzy import fuzz
from fuzzywuzzy import process

attendee =  pd.read_excel('路径/testnn.xlsx',sheet_name='Sheet2')
account =  pd.read_excel('路径/testnn.xlsx',sheet_name='Sheet1')
attendee = attendee.values
account = account.values


Sheet2 = {}
for i in attendee:
    HCO=[]
    temp = jieba.cut(i[0], cut_all=False)
    for a in temp:
        HCO.append(a)
    Sheet2[i[0]] = HCO
print(Sheet2)
Sheet1 = {}
for i in account:
     HCO = []
     temp = jieba.cut(i[0], cut_all=False)
     for a in temp:
         HCO.append(a)
     Sheet1[i[0]] = HCO
print(Sheet1)
target_l = []
data = []
n = 0
for j in Sheet2:
    target_l.append(j)
for i in Sheet1:
    n = n+1
    target= {'搜索公司':i,'目标公司': process.extractOne( i, target_l )[0],'目标权重': process.extractOne( i, target_l )[1]}
    data.append(target)
    print (data)
df1 = pd.DataFrame(data)
print(df1)

writer = pd.ExcelWriter('路径/testmm.xlsx')
df1.to_excel(writer, 'Final')
writer.save()
writer.close()

结果概览:
python模糊匹配,Python,python,开发语言,pandas文章来源地址https://www.toymoban.com/news/detail-650976.html

到了这里,关于两种实现模糊匹配的方法--python的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 折半查找(二分查找)的两种方法及实现 Python

    概念: 在计算机科学中,折半查找,也称二分查找,是一种在有序数组中查找某一特定元素的搜索算法。 搜索过程从数组的中间元素开始,如果中间元素正好是要查找的元素,则搜索过程结束;如果某一特定元素大于或者小于中间元素,则在数组大于或小于中间元素的那一

    2024年02月09日
    浏览(39)
  • 【python】虚拟屏幕实现selenium截图的两种方法介绍

    可以使用虚拟屏幕的方式,在虚拟屏幕上运行浏览器并进行截图操作,这样就不会影响当前屏幕的展示。 具体实现可以使用Xvfb和pyvirtualdisplay库。Xvfb是虚拟X11服务器,可以在内存中创建一个虚拟屏幕,而pyvirtualdisplay是一个Python库,可以在Python代码中启动和控制Xvfb。 以下是一

    2024年01月22日
    浏览(36)
  • Python数据分析实战-格式化字符串的两种方法(附源码和实现效果)

    实现功能 格式化字符串的两种方法 实现代码 实现效果 本人读研期间发表5篇SCI数据挖掘相关论文,现在某研究院从事数据挖掘相关科研工作,对数据挖掘有一定认知和理解,会结合自身科研实践经历不定期分享关于python机器学习、深度学习、数据挖掘基础知识与案例。 致力

    2024年02月13日
    浏览(46)
  • 图像处理(1):用Python实现彩色图像转为灰度图像的两种方法以及批量将图片转为灰度图

    用Python实现彩色图像转为灰度图像的两种方法介绍 这篇文章给大家主要介绍使用 Python 将彩色图像转为灰度图像的两种方法,以及用 Python 批量将图片转为灰度图的方法,供大家参考: 使用Python中的cv2库,它自带彩色转灰度的方法,并且代码非常简单。 先读取一张彩色图片,然

    2024年02月11日
    浏览(43)
  • 【OpenCV Python实现图像增强:高斯模糊和运动模糊】

    【OpenCV Python实现图像增强:高斯模糊和运动模糊】 图像处理是计算机视觉领域的重要分支,它在各个领域都有广泛的应用。图像增强是其中的一个重要技术,可以帮助我们提升图像的质量和清晰度。本文将介绍如何使用Python和OpenCV库来实现两种常见的图像增强方法:高斯模

    2024年02月12日
    浏览(44)
  • es多字段模糊匹配wildcardQuery,java实现

    es 版本:7.10.1 spring-cloud版本:2.3.5.RELEASE spring-boot-starter-data-elasticsearch 版本 2.3.12.RELEASE spring-data-elasticsearch 版本 4.0.9.RELEASE es查询,需求:title或者content任意一个字段能匹配到即可 使用dsl查询语句如下,构建一个query ,should只要一个匹配即可 运行结果,可以查出数据

    2024年02月11日
    浏览(37)
  • python实现模糊洗衣机

    使用python设计并实现一个洗衣机模糊推理系统实验。 已知人的操作经验是: 污泥越多,油脂越多,洗涤时间越长 污泥适中,油脂适中,洗涤时间适中 污泥越少,油脂越少,洗涤时间越短 洗衣机的模糊控制规则如表1所示: 表1 洗衣机的模糊控制规则表 污泥油脂 NG(无油脂)

    2024年02月07日
    浏览(46)
  • python图像的模板匹配方法

    在 Python 中,可以使用 OpenCV 库来实现图像模板匹配。 首先,需要准备好要用来匹配的模板图像和待匹配的大图像。然后,可以使用 OpenCV 库中的 matchTemplate 函数来进行模板匹配。这个函数需要传入待匹配的大图像和模板图像,并返回一个结果图像,其中包含了匹配的结果。

    2024年02月15日
    浏览(31)
  • Python实现高斯模糊算法(含完整源码)

    Python实现高斯模糊算法(含完整源码) 在图像处理中,高斯模糊是一种常用的模糊滤镜算法,其主要原理是通过对图像进行卷积操作来减少噪点和细节,从而得到更加平滑的图像效果。在Python语言中,我们可以通过NumPy和OpenCV等第三方库来实现高斯模糊算法。 下面是基于Nu

    2024年02月14日
    浏览(48)
  • python实现模糊综合评价法(FCE)

    1 基本概念 综合评价是指按预定的目的确定研究对象的属性 (指标 ) 并将这种属性变为客观定量的计值或主观效用的行为 。 评价特指多属性对象的综合评价 。属性是关于目的的框架结构是对研究对象本质特征的概括 。 指标是关于研究对象属性的测度是对对象属性的具体化

    2023年04月14日
    浏览(39)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包