模糊匹配_模糊匹配 读音 - CSDN
精华内容
参与话题
  • 字符串模糊匹配

    千次阅读 2017-11-09 16:37:51
    1, python库(difflib,可以对string,list进行匹配) import difflib s1 = [ 1, 2, 3, 5, 6, 4 ] s2 = [ 2, 3, 5, 4, 6, 1 ] matcher = difflib.SequenceMatcher(None, s1, s2) print(matcher.ratio()) 结果为0...


    1, python库(difflib,可以对string,list进行匹配)

    import difflib
    s1 = [ 1, 2, 3, 5, 6, 4 ]
    s2 = [ 2, 3, 5, 4, 6, 1 ]
    matcher = difflib.SequenceMatcher(None, s1, s2)
    print(matcher.ratio())
    

    结果为0.6666666666666666,也就是说按顺序进行模糊匹配,最大可以匹配到的字符个数为4个,4/6=0.6666666666666666


    2,python库(Levenshtein,对string进行比对)

    pip install  python-Levenshtein


    import Levenshtein
    s1="123564"
    s2="235461"
    err_ratio= Levenshtein.distance(s1,s2)/len(s1)
    acc_ratio=1-err_ratio
    print(acc_ratio)
    

    输出结果为0.5


    3,python (fuzzywuzzy),https://github.com/seatgeek/fuzzywuzzy

    pip install fuzzywuzzy

    from fuzzywuzzy import fuzz
    from fuzzywuzzy import process
    s1="123564"
    s2="235461"
    fuzz.ratio(s1,s2)
    

    输出结果为67,和difflib效果一样,对字符串比较准确

    s1 = [ 1, 2, 3, 5, 6, 4 ]
    s2 = [ 2, 3, 5, 4, 6, 1 ]
    fuzz.ratio(s1,s2)
    

    输出结果为78,对list效果变差


    展开全文
  • 模糊匹配

    千次阅读 2016-12-02 10:36:08
    LIKE,SOUNDEX

    2016.12.1

    九.模糊匹配

    9.1 LIKE与通配符%

    SELECT

    Columnlist

    FROM table

    WHERE columnlist LIKE ‘%value%’

    百分号%用作通配符,表示任意的字符,它也可以表示0个字符的一个列表,%放在value前面表示value前面可以有任意多个字符的短语,%放在后面表示value后面可以有任意多个字符组成的短语。

    ORACLE中,当判断与直接量匹配时,区分大小写,即:VALUEvalue是不同的。一般先使用UPPER/LOWER函数将数据转换成与直接量相同的大写或者小写。

    SELECT

    Columnlist

    FROM table

    WHERE UPPER(columnlist) LIKE ‘%VALUE%’;

    如果只想查找包含value但是又不是以value开头或者结尾的情况时,只需要在百分号与value之间加空格。

    SELECT

    Columnlist

    FROM table

    WHERE UPPER(columnlist) LIKE ‘% VALUE %’;

    9.2通配符_,[characterlist],[^characterlist]

    _通配符替代一个字符。后面两个通配符在MYSQLORACLE中不存在。

    SELECT

    Columnlist

    FROM table

    WHERE columnlist LIKE ‘_value’

    这个语句会从列中查询出以value结尾的但只有6个字符组成的记录行。

    SELECT

    Columnlist

    FROM table

    WHERE columnlist LIKE ‘[cmk]value’

    查询出以value结尾,但是总共由6个字符组成且第一个字符必须是c,m,k中的一个。

    SELECT

    Columnlist

    FROM table

    WHERE columnlist LIKE ‘[^cmk]value’

    查询出以value结尾,但是总共由6个字符组成且第一个字符是除c,m,k之外的一个。

    9.3 按照读音匹配

    SELECT

    SOUNDEX(‘Smith’)

    SOUNDEX(‘Smythe’)

    SOUNDEX函数会返回由4个字符组成的代码。第一个字符总是短语的第一个字符。如上面就会返回S。另外3个字符是根据短语的读音经过计算得到。

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

    万次阅读 2018-10-17 22:44:22
    题目:模糊匹配, ‘?’代表一个字符, *代表任意多个字符。给一段明确字符比如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后移一位,递归
    代码,下载

    展开全文
  • 解决模糊字符串匹配的算法经典算法:基于动态生成矩阵的方法,其时间复杂度为 O(mn) 对该算法的改进: 1.位向量方法 -bpm算法,时间复杂度为 O( n[m/ w] )。 2.过滤方法,它们的平均执行时间一般快于 O(n)。 背景...

    背景知识

    这里写图片描述

    BPM算法(适用于m<w的模式串)

    1.预处理。

    这里写图片描述

    1)初始化位向量,每个位都置为0;

    public void initVector(){
            size = CHAR_SIZE*p.length();
            bitArray = new int[(size-1)/BIT_LENGTH+1];
            //将位向量全部清零
            for(int i=0;i<n;++i){
                P = i/BIT_LENGTH;   
                Q = i%BIT_LENGTH;
                bitArray[P] |= 1<<(31-Q);
        }
    }

    2)对字符集的每一个字符计算其二进制模式表示

        /********************/
    for(int i=0;i<26;++i){
                for(int j=0;j<p.length();++j){
                    if(p.toLowerCase().charAt(j)-'a'==i){
                        //将第index位置为1
                        System.out.println("i="+i+"j="+j);
                        int index = i*p.length()+j;
                        set(index);
                    }
                }
            }
        /********************/  
        public void set(int i){
            P = i/BIT_LENGTH;   
            Q = i%BIT_LENGTH;
            bitArray[P] |= 1<<(BIT_LENGTH-Q-1);
        }
    在匹配算法实现中,chk数组将取代pat.  存储chk数组共需要 m*|∑|个二进制位空间大小,但是实际上除了在pat中出现的字符,别的对应的值为全零,这个算法需O(m+|∑|)的时间花费。
    

    2.结合Horspool算法和chk数组实现模糊匹配。初始化跳转数组。
    这里写图片描述

    //初始化跳转数组
    
            int[] bmbc = new int[CHAR_SIZE];
            for(int i=0;i<CHAR_SIZE;++i){
                bmbc[i] = p.length();
                boolean flag = false;
                for(int j=0;j<4;++j){
                    if(get(i*4+j)==1){
                        System.out.println("true");                 
                        flag=true;
                        break;
                    }
                }
                //i代表的字符出现在模式串中
                if(flag==true){
                    for(int j=0;j<p.length()-1;++j){
                        int index = i*4+j;
                        P = index/BIT_LENGTH;
                        Q = index%BIT_LENGTH;
                        //i所对应的字符出现在模式串的第j位
                        if(get((bitArray[P]&(1<<(BIT_LENGTH-1-Q))),Q)==1){
                            bmbc[i]=p.length()-j-1;
                        }
                    }
                }
            }
            return bmbc;
        }

    3.匹配检索部分。发现文本串中所有匹配模式串的部分。

    public void bpm(){
            int[] bmbc = PreBmbc();         
            int j = 0;
            int m = p.length();
            int n = t.length();
            while(j<=n-m){
                char ch = t.charAt(j+m-1);
                //从右向左比较,相等则循环其中的为二进制与运算。
                //判断  text[j+i]是否等于pi 
                int i = 0;
                for(i = m-1;i>=0;--i){
    
                    int index =charToInt(t.charAt(j+i))*4;          
                    System.out.println(t.charAt(j+i)+":"+index/4);
                    int P1 = index / BIT_LENGTH;
                    int Q1 = index % BIT_LENGTH;
                    int temp=bitArray[P1]&(1<<(BIT_LENGTH-Q1-i-1));
                    int result=get(temp,Q1+i);
                    if(result!=1)       
                    {
                        break;
                    }
    
                }               
                    //发现匹配,报告位置
                    if(i<0){
                        System.out.println("匹配位置为:"+j);
                    }
                    //设置右移参数,继续检索下一匹配
                    j+=bmbc[ch-'a'];
            }
        }
    
    展开全文
  • 这个还从一次的华为机试的题目说起,题目大概如下
  • grep之‘精准匹配’和‘模糊匹配

    千次阅读 2019-09-02 17:22:57
    如果直接用grep命令,不加任何参数,会把所有匹配的行都检索出来,可以说是模糊匹配: [root@localhost tmp]# more 2.txt |grep node node nodes 如果grep加了-w参数,就会实现精准匹配,多了字符的行就不会被查询...
  • Jquery 模糊匹配ID

    万次阅读 2014-12-02 13:07:05
    [att*=value] 模糊匹配 [att!=value] 不能是这个值 [att$=value] 结尾是这个值 [att^=value] 开头是这个值 [att1][att2][att3]... 匹配多个属性条件中的一个 ===========================
  • js 模糊匹配

    万次阅读 2018-10-30 16:35:26
    对于模糊查询,一般都是传关键字给后端,由后端来做。但是有时候一些轻量级的列表前端来做可以减少ajax请求,在一定程度上提高用户体验。废话不多说,直接上代码。 //字符串方法indexOf var len = list.length; ...
  • python 模糊匹配

    千次阅读 2019-04-26 21:50:30
    # 模糊匹配List def fuzzyMatch(): value = '西西' list = ['大海西西的','大家西西','打架','西都好快','西西大化'] tempList = [] pattern = '.*' + value + '.*' for s in list: obj = re.findall(pattern,...
  • 其实是G查询关键词过程中匹配的一点大概的算法框架,G的模糊匹配大家都知道,比如你输入64什么的,G会自动列出你心里可能要找到东西,如下图:那这个算法是怎么实现的呢,用到了一种高级数据结构--字典树,或者说是...
  • grep 全词匹配和模糊匹配

    万次阅读 2017-09-18 14:50:19
    grep实际使用中,根据常需求不同,常需要进行精准或者默默匹配。 模糊匹配 $ grep "abc" # 结果为abcd, abcde, abc等 精确匹配 $ grep -w "abc" # 结果为abc
  • vlookup模糊查找(非精确查找) 总结 1. vlookup精确查找 VLOOKUP(lookup_value,table_array,col_index_num,range_lookup) 参数 简单说明 输入数据类型 lookup_value 要查找的值 数值、...
  • redis-redisTemplate 模糊匹配keys

    万次阅读 2018-04-02 17:30:41
    做项目遇到的问题模糊匹配//匹配img开头的key,直接使用正则无效redis中模糊匹配 redisTemplate.keys("img"+"*");//img.* //"img."+"*" 
  • ElasticSearch 模糊匹配查询

    万次阅读 2017-06-05 17:12:17
    目前的需求输入:王?... 针对性别,因只有男女,可直接进行匹配 地址为汉字,可作为if条件最后的一节,放到查询语句中; 年龄需要进行判断,存在数字的,或者存在“-”符号的,要进行日期加减,找出1
  • RequestMapping可以实现模糊匹配路径

    千次阅读 2018-08-19 22:04:58
    再补充一点,RequestMapping可以实现模糊匹配路径,比如:  ?:匹配一个字符  *:匹配任意字符  **:匹配多层路径  /springmvc/**/lastTest 就可以匹配/springmvc/suiyi1/suiyi2/suiyi3/lastTest路径...
  • nginx location url 模糊匹配

    千次阅读 2017-03-02 18:56:52
    匹配以v1开始,且跳过任意字符串,且后面包含xxx的url路径,nginx的location配置方法如下:    location ~ ^/v1/.*/xxx.* { //此处省略 }  
  • 数据集合: 模糊查询前缀开始字符j GET /mydb/_search ...用来匹配1个任意字符,*用来匹配零个或者多个字符 GET /mydb/_search { "query": { "wildcard": { "postcode"
  • 1. like最基本的实现模糊匹配的语句,但一次只能匹配一种候选模式(like "%content%"),若要对多个候选进行模糊匹配,则需要写多次like,然后以or连接,但是当候选数目过多时,则该种方式明显不适用;2....
  • Python列表模糊匹配列表

    千次阅读 2018-12-06 15:08:49
    B列表模糊匹配A列表 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]) 执行结果: ...
  • SQL两个字段之间模糊匹配

    千次阅读 2018-12-12 19:56:26
    UPDATE park_gaode_test a ,park_gaode b set a.lat = b.location WHERE a.pid like CONCAT('%',b.pid,'%')
1 2 3 4 5 ... 20
收藏数 111,169
精华内容 44,467
关键字:

模糊匹配