精华内容
下载资源
问答
  • #-*- coding: utf-8 -*-"""基于gensim模块的...将待比较的文档转换为向量(词袋表示方法)5.建立语料库6.初始化模型7.创建索引8.相似度计算并返回相似度最大的文本"""from gensim importcorpora, models, similariti...

    #-*- coding: utf-8 -*-

    """基于gensim模块的中文句子相似度计算

    思路如下:

    1.文本预处理:中文分词,去除停用词

    2.计算词频

    3.创建字典(单词与编号之间的映射)

    4.将待比较的文档转换为向量(词袋表示方法)

    5.建立语料库

    6.初始化模型

    7.创建索引

    8.相似度计算并返回相似度最大的文本"""

    from gensim importcorpora, models, similaritiesimportloggingfrom collections importdefaultdictimportjieba#设置日志

    logging.basicConfig(format='%(asctime)s : %(levelname)s : %(message)s', level=logging.INFO)#准备数据:现有8条文本数据,将8条文本数据放入到list中

    documents = ["1)键盘是用于操作设备运行的一种指令和数据输入装置,也指经过系统安排操作一台机器或设备的一组功能键(如打字机、电脑键盘)","2)鼠标称呼应该是“鼠标器”,英文名“Mouse”,鼠标的使用是为了使计算机的操作更加简便快捷,来代替键盘那繁琐的指令。","3)中央处理器(CPU,Central Processing Unit)是一块超大规模的集成电路,是一台计算机的运算核心(Core)和控制核心( Control Unit)。","4)硬盘是电脑主要的存储媒介之一,由一个或者多个铝制或者玻璃制的碟片组成。碟片外覆盖有铁磁性材料。","5)内存(Memory)也被称为内存储器,其作用是用于暂时存放CPU中的运算数据,以及与硬盘等外部存储器交换的数据。","6)显示器(display)通常也被称为监视器。显示器是属于电脑的I/O设备,即输入输出设备。它是一种将一定的电子文件通过特定的传输设备显示到屏幕上再反射到人眼的显示工具。","7)显卡(Video card,Graphics card)全称显示接口卡,又称显示适配器,是计算机最基本配置、最重要的配件之一。","8)cache高速缓冲存储器一种特殊的存储器子系统,其中复制了频繁使用的数据以利于快速访问。"]#待比较的文档

    new_doc = "内存又称主存,是CPU能直接寻址的存储空间,由半导体器件制成。"

    #1.文本预处理:中文分词,去除停用词

    print('1.文本预处理:中文分词,去除停用词')#获取停用词

    stopwords =set()

    file= open("stopwords.txt", 'r', encoding='UTF-8')for line infile:

    stopwords.add(line.strip())

    file.close()#将分词、去停用词后的文本数据存储在list类型的texts中

    texts =[]for line indocuments:

    words= ' '.join(jieba.cut(line)).split(' ') #利用jieba工具进行中文分词

    text =[]#过滤停用词,只保留不属于停用词的词语

    for word inwords:if word not instopwords:

    text.append(word)

    texts.append(text)for line intexts:print(line)#待比较的文档也进行预处理(同上)

    words = ' '.join(jieba.cut(new_doc)).split(' ')

    new_text=[]for word inwords:if word not instopwords:

    new_text.append(word)print(new_text)#2.计算词频

    print('2.计算词频')

    frequency= defaultdict(int) #构建一个字典对象#遍历分词后的结果集,计算每个词出现的频率

    for text intexts:for word intext:

    frequency[word]+= 1

    #选择频率大于1的词(根据实际需求确定)

    texts = [[word for word in text if frequency[word] > 1] for text intexts]for line intexts:print(line)#3.创建字典(单词与编号之间的映射)

    print('3.创建字典(单词与编号之间的映射)')

    dictionary=corpora.Dictionary(texts)print(dictionary)#打印字典,key为单词,value为单词的编号

    print(dictionary.token2id)#4.将待比较的文档转换为向量(词袋表示方法)

    print('4.将待比较的文档转换为向量(词袋表示方法)')#使用doc2bow方法对每个不同单词的词频进行了统计,并将单词转换为其编号,然后以稀疏向量的形式返回结果

    new_vec =dictionary.doc2bow(new_text)print(new_vec)#5.建立语料库

    print('5.建立语料库')#将每一篇文档转换为向量

    corpus = [dictionary.doc2bow(text) for text intexts]print(corpus)#6.初始化模型

    print('6.初始化模型')#初始化一个tfidf模型,可以用它来转换向量(词袋整数计数),表示方法为新的表示方法(Tfidf 实数权重)

    tfidf =models.TfidfModel(corpus)#将整个语料库转为tfidf表示方法

    corpus_tfidf =tfidf[corpus]for doc incorpus_tfidf:print(doc)#7.创建索引

    print('7.创建索引')#使用上一步得到的带有tfidf值的语料库建立索引

    index =similarities.MatrixSimilarity(corpus_tfidf)#8.相似度计算并返回相似度最大的文本

    print('# 8.相似度计算并返回相似度最大的文本')

    new_vec_tfidf= tfidf[new_vec] #将待比较文档转换为tfidf表示方法

    print(new_vec_tfidf)#计算要比较的文档与语料库中每篇文档的相似度

    sims =index[new_vec_tfidf]print(sims)

    sims_list=sims.tolist()#print(sims_list.index(max(sims_list))) # 返回最大值

    print("最相似的文本为:", documents[sims_list.index(max(sims_list))]) #返回相似度最大的文本

    if __name__ == "__main__":pass

    展开全文
  • python比较字符串相似度

    万次阅读 2018-12-15 17:55:28
    比较两个字符串的模块是difflib.SequenceMatcher,使用起来很简单: import difflibdef string_similar(s1, s2): return difflib.SequenceMatcher(None, s1, s2).quick_ratio() print string_similar('爱尔眼科沪...

    python自带比较相似度的模块,difflib。比较两个字符串的模块是difflib.SequenceMatcher,使用起来很简单:

    import difflib
    def string_similar(s1, s2):
        return difflib.SequenceMatcher(None, s1, s2).quick_ratio()
    
    print string_similar('爱尔眼科沪滨医院', '沪滨爱尔眼科医院')
    
    print string_similar('安定区妇幼保健站', '定西市安定区妇幼保健站')
    
    print string_similar('广州市医院', '广东省中医院')

     

    运行结果:

    1.0

    0.842105263158

    0.606060606061

    最主要的是,python原生的模块的效率都比较好。其中None的位置是一个函数,用来去掉自己不想算在内的元素。比如我想把空格排除在外:

    seq = difflib.SequenceMatcher(lambda x:x=" ", a, b)
    
    ratio = seq.ratio()

     

     

    准备做一个小功能,需要计算字符串的相似度,提前做点功课。

    算法

    字符串相似度的算法以及有很多资料了。最常见的理解就是:把一个字符串通过插入、删除或替换这样的编辑操作,变成另外一个字符串ÿ

    展开全文
  • import difflib import ...python-Levenshtein 包的名字和import的时候名字不一样 使用Levenshtein.ratio()函数即可 我常使用比较字符串近似值,根据字符串相同或者不同的程度,用来简单分析或者归类字符串或者数据。

    import difflib

    import Levenshtein

    r=difflib.SequenceMatcher(None, '拉克', '拉克哈尼').ratio()

    print (r) #0.6666666666666666

    r=difflib.SequenceMatcher(None, '拉克', '拉克哈尼').quick_ratio()

    print (r) #0.6666666666666666

    r=difflib.SequenceMatcher(None, '拉克', '拉克哈尼').real_quick_ratio()

    print (r) #0.6666666666666666

    #SequenceMatcher中也可以放数组,更多SequenceMatcher的参数请看官方文档

    t=['拉克','哈尼']

    t1=['哈尼','拉克']

    r=difflib.SequenceMatcher(None, t, t1).ratio()

    print (r) #0.5

    r= Levenshtein.ratio('拉克', '拉克哈尼')

    print (r) #0.6666666666666666

    这里解释一下difflib关于

    difflib 的 3个api

    ratio

    quick_ratio

    real_quick_ratio

    官方文档在这里因为是英文的我直接贴出来翻译过的

    ratio()

    将序列相似度的度量值作为范围0,1中的浮点数返回。

    其中T是两个序列中元素的总数,M是匹配数,这是2.0 * M / T.注意,如果序列相同,则为1.0;如果它们没有共同之处,则为0.0。

    如果get_matching_blocks()或get_opcodes()尚未被调用,则计算起来会很昂贵,在这种情况下,您可能首先尝试使用quick_ratio()或real_quick_ratio()来获得上限。

    quick_ratio()

    相对较快地返回ratio()的上限

    real_quick_ratio()

    很快返回ratio()的上限。

    尽管quick_ratio()和real_quick_ratio()总是至少与ratio()一样大,但由于不同的近似级别,返回匹配与总字符比率的三种方法可能会给出不同的结果:

    这里我常用 ratio() 和 quick_ratio()

    关于Levenshtein

    使用pip或者在Anaconda安装时注意它的包的名字是 python-Levenshtein

    包的名字和import的时候名字不一样

    使用Levenshtein.ratio()函数即可

    我常使用比较字符串近似值,根据字符串相同或者不同的程度,用来简单分析或者归类字符串或者数据。

    展开全文
  • 字符串相似度应用场景:拼写纠错、文本去重、上下文相似性、不同来源数据对比等。评价字符串相似度最常见的办法就是:把一个字符串通过插入、删除或替换这样的编辑操作,变成另外一个字符串,所需要的最少编辑次数,...

    字符串相似度应用场景:拼写纠错、文本去重、上下文相似性、不同来源数据对比等。

    评价字符串相似度最常见的办法就是:把一个字符串通过插入、删除或替换这样的编辑操作,变成另外一个字符串,所需要的最少编辑次数,这种就是编辑距离(edit distance)度量方法,也称为Levenshtein距离。

    方法1、difflib模块

    1 # 优点:python自带模块,效率比较高

    2 def similar_diff_ratio(str1, str2):

    3 return difflib.SequenceMatcher(None, str1, str2).ratio()

    4

    5 # quick_ratio()比ratio()计算效率更高,计算结果一致

    6 def similar_diff_qk_ratio(str1, str2):

    7 return difflib.SequenceMatcher(None, str1, str2).quick_ratio()

    8

    9 # None参数是一个函数,用来去掉不需要比较的字符。比如,列表lst_str表示计算相似度时不需要比较的字符

    10 def similar_diff_ratio_filter(lst_str, str1, str2):

    11 return difflib.SequenceMatcher(lambda x: x in lst_str, str1, str2).ratio()

    12

    13 print(similar_diff_ratio("临安区中小企业创业基地", "临安区电子商务科技园"))

    14 print(similar_diff_qk_ratio("临安区中小企业创业基地", "临安区电子商务科技园"))

    15 # 有一点疑问,将不需要比较的字符加入后,相似度计算结果没变化,欢迎大佬留言解惑,谢谢!

    16 lst_str = ['临安区', '创业', '为什么', '忽略', '某些字符之后', '相似度还是一致']

    17 print(similar_diff_ratio_filter(lst_str, "临安区中小企业创业基地", "临安区电子商务科技园"))

    0.2857142857142857

    0.2857142857142857

    0.2857142857142857

    方法2、通过在长度较短的字符串末尾补充空格,将2个字符串处理成等长,然后从左至右比较同位置字符串

    1 def similar_left(str1, str2):

    2 str1 = str1 + ' ' * (len(str2) - len(str1))

    3 str2 = str2 + ' ' * (len(str1) - len(str2))

    4 return sum(1 if i == j else 0 for i, j in zip(str1, str2)) / float(len(str1))

    5

    6 print(similar_left("临安区中小企业创业基地", "临安区电子商务科技园"))

    7 print(similar_left("临安区电子商务科技园", "园技科务商子电区安临"))

    0.2727272727272727

    0.0

    方法3、Levenshtein模块

    3.1、相似度

    1 # 莱文斯坦比

    2 def similar_lvst_ratio(str1, str2):

    3 return Levenshtein.ratio(str1, str2)

    4

    5 # jaro距离

    6 def similar_lvst_jaro(str1, str2):

    7 return Levenshtein.jaro(str1, str2)

    8

    9 # Jaro–Winkler距离

    10 def similar_lvst_winkler(str1, str2):

    11 return Levenshtein.jaro_winkler(str1, str2)

    12

    13 print(similar_lvst_ratio("临安区中小企业创业基地", "临安区电子商务科技园"))

    14 print(similar_lvst_jaro("临安区中小企业创业基地", "临安区电子商务科技园"))

    15 print(similar_lvst_winkler("临安区中小企业创业基地", "临安区电子商务科技园"))

    0.2857142857142857

    0.5242424242424243

    0.666969696969697

    3.2、相似性度量

    1 # distance编辑距离(也称为Levenshtein距离 )。是描述由一个字串转化成另一个字串最少的操作次数,在其中的操作包括插入、删除、替换。

    2 def similar_lvst_distance(str1, str2):

    3 return Levenshtein.distance(str1, str2)

    4

    5 # hamming汉明距离是编辑距离的一种特殊情况。 要求str1和str2必须长度一致,描述两个等长字串之间对应位置上不同字符的个数。

    6 def similar_lvst_hamming(str1, str2):

    7 return Levenshtein.hamming(str1, str2)

    8

    9 print(similar_lvst_distance("临安区中小企业创业基地", "临安区电子商务科技园"))

    10 print(similar_lvst_hamming("临安区中小企业创业基地", "临安区电子商务科技园区"))

    8

    8

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

    若想对以上方法有更深入研究,可参考大佬博客:https://www.cnblogs.com/wt869054461/p/5777782.html

    标签:ratio,Python,str2,str1,print,相似,临安,字符串,similar

    来源: https://www.cnblogs.com/hforevery0/p/14375286.html

    展开全文
  • python判断字符串相似度

    千次阅读 2019-08-23 10:55:05
    参考Python 字符串相似性的几种度量方法 安装python-Levenshtein 直接去官网下载适合自己系统的python-Levenshtein.whl文件,进入文件目录,安装,...测试字符串相似度算法 参考了上述链接的代码 # -*- coding: utf...
  • python字符串相似度 tdebatty likeity的Python3.x实现 一个实现不同字符串相似度和距离度量的库。 当前实现了十二种算法(包括Levenshtein编辑距离和同级,Jaro-Winkler,最长公共子序列,余弦相似性等)。 查看...
  • 是描述两个等长字串之间对应 位置上不同字符的个数。2). Levenshtein.distance(str1, str2)计算编辑距离(也称为 Levenshtein距离)。是描述由一个字串转化成另一个字串最少的操作次数,在其中的操作包括插入、删除、...
  • 所谓编辑距离,指的是从一个单词转换为另一个单词所需要编辑的次数,而单次编辑只有三种操作: 插入 删除 替换 递归实现 现有两个字符串 a 1 a 2 a 3 a 4 a_1a_2a_3a_4 a1​a2​a3​a4​和 b 1 b 2 b 3 b 4 b_1b_2b...
  • python 判断字符串相似度

    万次阅读 2019-01-19 15:27:16
    方法1 import difflib def get_equal_rate(str1, str2): return difflib.SequenceMatcher(None, str1, str2).quick_ratio() 方法2 import Levenshtein def get_equal_rate(str... return Levenshtein.ratio...
  • Python – 处理字符串相似度

    千次阅读 2020-12-06 15:14:33
    现在要统一管理,把商家类别映射成自定义类别思路:匹配商家类别和自定义类别中每个名称的相似度相似度大于某个阀值的,最大的自定义类别字符串则为映射目标一、Levenshtein使用python的Levenshtein来处理相似度1...
  • python 字符串相似度判断详解

    千次阅读 2020-11-27 14:05:45
    如何用python求两个字符串的相似度呢?由于项目中要用到,所以本文将实现两个字符串相似度的求解过程。
  • 计算字符串变换相等的最小操作代价 2020远景智能计算字符串相似度计算字符串变换相等的最小操作代价题目描述:输入描述:输出描述:示例:思路:算法介绍示例代码:代码输出:2020远景智能在线笔试 计算字符串的相似度...
  • /usr/bin/env pythondef levenshtein(a,b):"Calculates the Levenshtein distance between a and b."n, m = len(a), len(b)if n > m:# Make sure n <= m, to use O(min(n,m)) spacea,b = b,an,m = m,ncurren.....
  • Python判断两个相等的中文字符串为false,将两个待比较字符串都把unicode编码设为‘utf-8’也不能解决问题,具体原因如下: 1.首先查看待比较两个字符串的编码格式 ,使用命令 import chardet ...... string_code...
  • Python字符串相似度计算及应运

    千次阅读 2018-08-19 09:47:49
    excel = openpyxl.load_workbook(r'C:\Users\fliu\Desktop\字符串相似度对比.xlsx') #获取sheet table = excel['Sheet1'] #按行遍历单元格 for Romnum in range(2 , 200): str1 = str(table.cell(row = Romnum , ...
  • Python 字符串相似度

    千次阅读 2018-09-19 10:26:25
    python 利用difflib模块—实现两个字符串或文本相似度比较 首先导入difflib模块 import difflib 示例: Str = '上海中心大厦' s1 = '大厦' s2 = '上海中心' s3 = '上海中心大楼' print(difflib....
  • import difflib def string_similar(s1, s2): return difflib.SequenceMatcher(None, s1, s2).quick_ratio() print(string_similar('爱尔眼科沪滨医院', '沪滨爱尔眼科医院')) print(string_similar('北戴河...
  • python 字符串相似度计算,距离算法

    千次阅读 2018-09-10 10:39:59
    字符串相似度最常见的办法就是:把一个字符串通过插入、删除或替换为另一个字符串,所需要的最少编辑次数,这种就是编辑距离(edit distance)度量方法,也称为Levenshtein距离。海明距离是编辑...
  • python 判断字符串相似度方法一方法二 方法一 import difflib def get_equal_rate(str1, str2): return difflib.SequenceMatcher(None, str1, str2).quick_ratio() 方法二 import Levenshtein def get_equal_rate...
  • 字符串余弦相似性算法是通过利用我们初中就学过的三角函数中的余弦定理来计算两个字符串相似度,它是定义在向量空间模型(Vector Space Model)中的。余弦相似度用向量空间中两个向量夹角的余弦值作为衡量两个个体间...
  • 在某种程度上,我不是将两个字符串比较在一起,而是为每个字符串得到一些数字/分数(哈希),以后可以告诉我两个字符串是否相似.两个相似的字符串应该具有相似(接近)的分数/哈希值.我们将这些字符串和分数视为一个例子:...
  • Levenshtein Distance 算法,又叫Edit Distance 算法,是指两个字符串之间,由一个转成另一个所需的最少编辑操作次数。许可的编辑操作包括将一个字符替换成另一个字符,插入一个字符,删除一个字符。一般来说,编辑...
  • 莱文斯坦(Levenshtein)距离莱文斯坦距离可以解决字符串相似度的问题。在莱文斯坦距离中,对每一个字符都有三种操作:删除、添加、替换例如有s1和s2两个字符串,a和b是与之对应的保存s1和s2全部字符的数组,i/j是数组...
  • python对比字符串相似度一. fuzzywuzzy二. difflib 一. fuzzywuzzy 需要安装python-Levenshtein from fuzzywuzzy import fuzz print(fuzz.ratio('a b c', 'a c b')) print(fuzz.token_set_ratio('a b c', 'a c b'))...
  • 我在这一领域的经验有限,但由于Levenshtein距离满足三角形不等式,我认为必须有一种方法来计算到原点的某种绝对距离,以便在不与整个数据库中的所有条目进行直接比较的情况下找到彼此邻近的字符串。在第26页,他...
  • Python计算字符串相似度

    万次阅读 2017-02-28 14:20:36
    字符串相似度的算法以及有很多资料了。最常见的理解就是:把一个字符串通过插入、删除或替换这样的编辑操作,变成另外一个字符串,所需要的最少编辑次数。AKA,两个字符串之间的距离。解这样一个问题,可以使用穷举...
  • 利用difflib模块判断相似度 import difflib str1 = '今天天气好' str2 = '今天天气很好' SimilarityDegree = difflib.SequenceMatcher(None, str1, str2).quick_ratio() print(SimilarityDegree,type...
  • Python字符串相似度检测

    千次阅读 2017-07-09 18:31:18
    字符串相似度检测。

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 5,845
精华内容 2,338
关键字:

python比较字符串相似度

python 订阅