精华内容
下载资源
问答
  • Python实现模糊匹配

    2018-10-17 22:41:45
    Python实现字符串的模糊匹配,‘?’代表一个字符, ‘*’代表任意多个字符。给一段明确字符比如avdjnd 以及模糊字符比如*dj?dji?ejj,判断二者是否匹配。若能匹配输出”Yes”, 否则输出“No”
  • Python列表模糊匹配

    2020-03-26 13:55:09
    Python列表模糊匹配
    a = ['123','666','355']
    b = ['2','5']
    for i in range(len(b)):
        for j in range(len(a)):
            if a[j].find(b[i]) == -1:
                continue	#如果找不到符合b列表中的字符串,继续
            print(a[j])		#如果能找到则,打印,继续循环
    
    展开全文
  • Python模糊匹配搜索

    千次阅读 2020-11-19 15:36:15
    利用python库:fuzzywuzzy及difflib,两个库均可实现词粒度的模糊匹配,同时可设定模糊阈值,实现关键词的提取、地址匹配、语法检查等 2. fuzzywuzzy pip install fuzzywuzzy from fuzzywuzzy import process ...

    1. 概述

    利用python库:fuzzywuzzydifflib,两个库均可实现词粒度的模糊匹配,同时可设定模糊阈值,实现关键词的提取、地址匹配、语法检查等

    2. fuzzywuzzy

    pip install fuzzywuzzy
    
    from fuzzywuzzy import process
    from fuzzywuzzy import fuzz

    2.1 fuzzy模块

    (1)模糊匹配方法

    1. ratio()——简单匹配,使用纯Levenshtein Distance进行匹配。
    2. partial_ratio()——非完全匹配,基于最佳的子串(substrings)进行匹配
    3. token_set_ratio——忽略顺序匹配,对字符串进行标记(tokenizes)并在匹配之前按字母顺序对它们进行排序 
    4. token_set_ratio——去重子集匹配,对字符串进行标记(tokenizes)并比较交集和余数 

    (2)实例

    • ratio() 简单匹配
    fuzz.ratio("河南省", "河南省")
    >>> 100
    
    fuzz.ratio("河南", "河南省")
    >>> 80
    • partial_ratio() 非完全匹配

     

    fuzz.partial_ratio("河南省", "河南省")
    >>> 100
    
    fuzz.partial_ratio("河南", "河南省")
    >>> 100
    • token_set_ratio() 忽略顺序匹配

     

    fuzz.ratio("西藏 自治区", "自治区 西藏")
    >>> 50
    fuzz.ratio('I love YOU','YOU LOVE I')
    >>> 30
    
    fuzz.token_sort_ratio("西藏 自治区", "自治区 西藏") 
    >>> 100
    fuzz.token_sort_ratio('I love YOU','YOU LOVE I') 
    >>> 100
    • token_set_ratio() 去重子集匹配
    fuzz.ratio("西藏 西藏 自治区", "自治区 西藏")
    >>> 40
    
    fuzz.token_sort_ratio("西藏 西藏 自治区", "自治区 西藏")
    >>> 80
    
    fuzz.token_set_ratio("西藏 西藏 自治区", "自治区 西藏")
    >>> 100

    2.2 process模块

    (1) extract提取多条数据

    类似于爬虫中select,返回的是列表,其中会包含很多匹配的数据

    choices = ["河南省", "郑州市", "湖北省", "武汉市"]
    process.extract("郑州", choices, limit=2)
    >>> [('郑州市', 90), ('河南省', 0)]
    # extract之后的数据类型是列表,即使limit=1,最后还是列表,注意和下面extractOne的区别
    

    (2)extractOne提取一条数据

    提取匹配度最大的结果,返回 元组 类型, 还有就是匹配度最大的结果不一定是我们想要的数据,可以通过下面的示例和两个实战应用体会一下

    process.extractOne("郑州", choices)
    >>> ('郑州市', 90)
    
    process.extractOne("北京", choices)
    >>> ('湖北省', 45)

    3. difflib

    Difflib作为python的标准库,difflib模块提供的类和方法用来进行序列的差异化比较,它能够比对文件并生成差异结果文本或者html格式的差异化比较页面,而且支持输出可读性比较强的HTML文档

    (0)get_close_matches(word, possibilities, n=3, cutoff=0.6)

    import difflib
    config_list = ['中国工商银行','中国农业银行','建设银行','中国人民银行','招商证券','中国农业发展银行']
    query_word = '农行'
    
    res = difflib.get_close_matches(query_word, config_list, 1, cutoff=0.5)
    print(res)
    >>>['中国农业银行']

    扩展——文件比较

    (1)difflib.Differ

    此类比较的是文本行的差异并且产生适合人类阅读的差异结果或者增量结果,结果中各部分的表示如下:

    (2)difflib.HtmlDiff

    make_file(fromlines, tolines [, fromdesc][, todesc][, context][, numlines])
    
    make_table(fromlines, tolines [, fromdesc][, todesc][, context][, numlines])
    

     此类可以被用来创建HTML表格 (或者说包含表格的html文件) ,两边对应展示或者行对行的展示比对差异结果。以上两个方法都可以用来生成包含一个内容为比对结果的表格的html文件,并且部分内容会高亮显示。

    (3)context_diff

    difflib.context_diff(a, b[, fromfile][, tofile][, fromfiledate][, tofiledate][, n][, lineterm])
    

    比较a与b(字符串列表),并且返回一个差异文本行的生成器

    >>> s1 = ['bacon\n', 'eggs\n', 'ham\n', 'guido\n']
    >>> s2 = ['python\n', 'eggy\n', 'hamster\n', 'guido\n']
    >>> for line in context_diff(s1, s2, fromfile='before.py', tofile='after.py'):
    ...     sys.stdout.write(line)  
    *** before.py
    --- after.py
    ***************
    *** 1,4 ****
    ! bacon
    ! eggs
    ! ham
      guido
    --- 1,4 ----
    ! python
    ! eggy
    ! hamster
      guido

    (4) 比对两个文件,然后生成一个展示差异结果的HTML文件

    import difflib
    hd = difflib.HtmlDiff()
    file1 = ''
    with open('xxx1.py','r') as load:
        file1 = load.readlines()
        load.close()
    
    file2 = ''
    with open('xxx2', 'r') as mem:
        file2 = mem.readlines()
        mem.close()
    
    with open('htmlout.html','a+') as fo:
        fo.write(hd.make_file(file1,file2))
        fo.close()

    总结:difflib多用于文本的差异比较,用于模糊匹配精度还是不太准的,一般词的模糊匹配可用fuzzywuzzy

    参考链接

    1. python difflib模块讲解示例

    2.【python】字符串模糊匹配及在实战中的应用(FuzzyWuzzy库)

    3. FuzzyWuzzy:Python中的模糊字符串匹配

    展开全文
  • python实现模糊匹配

    万次阅读 2018-10-17 22:39:30
    题目:模糊匹配, ‘?’代表一个字符, *代表任意多个字符。给一段明确字符比如avdjnd 以及模糊字符比如*dj?dji?ejj,判断二者是否匹配。若能匹配输出”Yes”, 否则输出“No” (为了方便阅读,代码里面输出Ture or ...

    题目:模糊匹配, ‘?’代表一个字符, *代表任意多个字符。给一段明确字符比如avdjnd 以及模糊字符比如*dj?dji?ejj,判断二者是否匹配。若能匹配输出”Yes”, 否则输出“No”
    (为了方便阅读,代码里面输出Ture or False)

    解题的思路:通过明确终止条件通过递归的方式求解
    终止的条件:
    (1) Str为空 以及 pattern为空或者pattern元素只有[*], 输出True (yes) 例如:“” | “*****”
    (2) Str为空、pattern为非空或者str为空pattern元素不只有【*】,输出False 例如:“”|“abc” “” “a*”
    (3) Str为非空 以及pattern为空 输出False.例如:“abc” |“”
    下面分类第一个是否是否为*,第二个是否为*分类讨论。
    第一个字符为*, 那么str和pattern分别后移
    第一个字符不为*
    判断第二个字符是否为*,如果是根据第一个字符是否相等分为两种情况
    第一个字符相等(包括pattern为?):str同时移到一个位置,递归
    第一个字符不相等:让str后移一位,递归
    代码,下载

    展开全文
  • 模糊匹配指定路径下,且包含特定字符的文件名 只查找最后修改时间为1小时内的文件 import os import time import datetime def transTime(file_time): now = datetime.datetime.now() #过期时间为1小时,可根据...

    需求:

    1. 模糊匹配指定路径下,且包含特定字符的文件名
    2. 只查找最后修改时间为1小时内的文件
    import os
    import time
    import datetime
    
    def transTime(file_time):
        now = datetime.datetime.now()
        #过期时间为1小时,可根据实际情况修改
        deltaH = datetime.timedelta(seconds=3600)
        f = datetime.datetime.fromtimestamp(os.path.getmtime(file_time))
        if f > (now - deltaH):
            return True
        else:
            return False
    
    def find_file(dir, name):
        pass_name = []
        for i in [x for x in os.listdir(dir) if os.path.isfile(os.path.join(dir, x)) and name in os.path.splitext(x)[0]]:
            # print(os.path.join(dir, i))
            check_file = os.path.join(dir, i)
            if (transTime(check_file)):
                pass_name.append(check_file)
    
        for i in [x for x in os.listdir(dir) if os.path.isdir(os.path.join(dir, x))]:
            if os.listdir(os.path.join(dir, i)):
                # 防止因为权限问题报错
                try:
                    find_file(os.path.join(dir, i), name)
                except:
                    pass
        return pass_name
    
    def main():
    	#脚本查找的路径,绝对路径
        path=r"/Users/uuu/Desktop/222"
        #模糊匹配条件'lib',可根据实际修改
        file_yxb = find_file(path, 'lib')
        print(file_yxb)
    
    if __name__ == "__main__":
    	main()
    
    展开全文
  • I'm working in python 2.7 and I have a numpy array with all of the data. Any help would be appreciated, as I have never used fuzzy matching before. I have considered fuzzy matching through a for-loop...
  • python 模糊匹配

    千次阅读 2017-09-25 16:21:55
    python 模糊匹配
  • python fuzzywuzzy 模糊匹配,计算相似度 from fuzzywuzzy import fuzz from fuzzywuzzy import process 1:简单匹配 a = fuzz.ratio('this is a shot','this is a shat') Out[37]: 93 2:非完全匹配 b = fuzz....
  • a = ['123','666','355'] b = ['2','5'] for i in range(len(b)): for j in range(len(a)): if a[j].find(b[i]) == -1: continue print(a[j])
  • I am trying to implement a data structure which allows rapid look-ups based on keys.The python dict is great when my look-ups involve an equality(e.g. key == somevalue translates to datadict[somevalue...
  • Python字符串模糊匹配库FuzzyWuzzy 在计算机科学中,字符串模糊匹配(fuzzy string matching)是一种近似地(而不是精确地)查找与模式匹配的字符串的技术。换句话说,字符串模糊匹配是一种搜索,即使用户拼错...
  • #!/usr/bin/env pythong#_*_ coding:utf-8 _*_import re#data = [‘tantianran phone 118‘,‘tanyongxing phone 110‘,‘tansufen phone 119‘,‘dengwenyi phone 118‘,‘dengwenqing phone 520‘,‘laowang phone...
  • I'm checking if there are similar results (fuzzy match) in 4 same dataframe columns, and I have the following code, as an example. When I apply it to the real 40.000 rows x 4 columns dataset, keeps ru...
  • I'm checking if there are similar results (fuzzy match) in 4 same dataframe columns, and I have the following code, as an example. When I apply it to the real 40.000 rows x 4 columns dataset, keeps ru...
  • fuzzywuzzy库是Python中的模糊匹配库,它依据 Levenshtein Distance 算法 计算两个序列之间的差异。 Levenshtein Distance 算法,又叫 Edit Distance 算法,是指两个字符串之间,由一个转成另...
  • 本文将从字符串模糊匹配的角度介绍一下搜索引擎。一般的搜索,要分为两个步骤:搜索和排序。搜索的方法有很多,为了高效一般进行字符串或关键词匹配,而用户提供的一些关键词可能不是数据库中保存的,例如使用倒...
  • I have a pandas dataframe called "df_combo" which contains columns "worker_id", "url_entrance", "company_name". I am trying to produce an output column that would tell me if the URLs in "url_entrance...
  • 工作需要写了一个python小函数,用fuzzywuzzy模糊匹配技巧解决人工数据和标准数据的匹配问题。基本原理是先精确匹配,如果没有,采用模糊匹配遍历目标空间,选取打分最大的提交用户检查,最后输出结果。 分享给大家...
  • 例子:如果你打算操作某个跟目录下 包含‘test’串的文件, 那么这篇文章对你或许有用 import glob path = "/Users/name/...temDir = glob.glob(path)#模糊匹配,该目录下的文件,结果是各个文件路径组成的列表 ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 20,602
精华内容 8,240
关键字:

python如何进行模糊匹配

python 订阅