zoukankan      html  css  js  c++  java
  • Python 字符串相似性的几种度量方法

    字符串的相似性比较应用场合很多,像拼写纠错、文本去重、上下文相似性等。


    评价字符串相似度最常见的办法就是:把一个字符串通过插入、删除或替换这样的编辑操作,变成另外一个字符串,所需要的最少编辑次数,这种就是编辑距离(edit distance)度量方法,也称为Levenshtein距离。海明距离是编辑距离的一种特殊情况,只计算等长情况下替换操作的编辑次数,只能应用于两个等长字符串间的距离度量。


    其他常用的度量方法还有 Jaccard distance、J-W距离(Jaro–Winkler distance)、余弦相似性(cosine similarity)、欧氏距离(Euclidean distance)等。



    python-Levenshtein 使用


    使用 pip install python-Levenshtein 指令安装 Levenshtein


    # -*- coding: utf-8 -*-
    
    import difflib
    # import jieba
    import Levenshtein
    
    str1 = "我的骨骼雪白 也长不出青稞"
    str2 = "雪的日子 我只想到雪中去si"
    
    # 1. difflib
    seq = difflib.SequenceMatcher(None, str1,str2)
    ratio = seq.ratio()
    print 'difflib similarity1: ', ratio
    
    # difflib 去掉列表中不需要比较的字符
    seq = difflib.SequenceMatcher(lambda x: x in ' 我的雪', str1,str2)
    ratio = seq.ratio()
    print 'difflib similarity2: ', ratio
    
    # 2. hamming距离,str1和str2长度必须一致,描述两个等长字串之间对应位置上不同字符的个数
    # sim = Levenshtein.hamming(str1, str2)
    # print 'hamming similarity: ', sim
    
    # 3. 编辑距离,描述由一个字串转化成另一个字串最少的操作次数,在其中的操作包括 插入、删除、替换
    sim = Levenshtein.distance(str1, str2)
    print 'Levenshtein similarity: ', sim
    
    # 4.计算莱文斯坦比
    sim = Levenshtein.ratio(str1, str2)
    print 'Levenshtein.ratio similarity: ', sim
    
    # 5.计算jaro距离
    sim = Levenshtein.jaro(str1, str2 )
    print 'Levenshtein.jaro similarity: ', sim
    
    # 6. Jaro–Winkler距离
    sim = Levenshtein.jaro_winkler(str1 , str2 )
    print 'Levenshtein.jaro_winkler similarity: ', sim
    
    


    输出:

    difflib similarity1:  0.246575342466
    difflib similarity2:  0.0821917808219
    Levenshtein similarity:  33
    Levenshtein.ratio similarity:  0.27397260274
    Levenshtein.jaro similarity:  0.490208958959
    Levenshtein.jaro_winkler similarity:  0.490208958959
  • 相关阅读:
    React在componentDidMount里面发送请求
    React 术语词汇表
    React里受控与非受控组件
    React和Vue等框架什么时候操作DOM
    【LeetCode】79. Word Search
    【LeetCode】91. Decode Ways
    【LeetCode】80. Remove Duplicates from Sorted Array II (2 solutions)
    【LeetCode】1. Two Sum
    【LeetCode】141. Linked List Cycle (2 solutions)
    【LeetCode】120. Triangle (3 solutions)
  • 原文地址:https://www.cnblogs.com/mtcnn/p/9411747.html
Copyright © 2011-2022 走看看