#-*- 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中文字符串比较模块_python比较字符串相似度,原创度检测工具相关推荐

  1. python代码使用正则化模块re检查字符串是否只含有要求指定的字符

    python代码使用正则化模块re检查字符串是否只含有要求指定的字符 compile():正则表达式被编译成模式对象,模式对象具有用于各种操作的方法,如搜索模式匹配或执行字符串替换. search() ...

  2. python去除字符串两边空格_Python去除字符串两端空格的方法

    Python去除字符串两端空格的方法 目的 获得一个首尾不含多余空格的字符串 方法 可以使用字符串的以下方法处理: string.lstrip(s[, chars]) Return a copy of ...

  3. [转载] python字符串数组字典_Python:字符串、列表、元组、字典

    参考链接: Python字符串| ascii_uppercase 字符串: 所有方法都修改不了字符串的值,字符串还是原值:但可以重新赋值:使用字符串方法有返回值 循环字符串的用法: 字符串方法: Na ...

  4. python中替换字符串中字符_python替换字符串中的某个字符

    python_split_strip_replace使用方法 使用python时会经常要对字符串做一些处理,比如:分割字符串.去掉空格.替换字符串 中的某个字符等,下面介绍下这几个功能的使用. 一.  ...

  5. python怎么用split字符串全部分开_python实现字符串完美拆分split()的方法

    函数:split() 例子 我们想要将以下字符串rule进行拆分.字符串表示的是一个规则,由"-"得到"-".我们需要将规则中的条件属性与取值分别提取出来,存放 ...

  6. python string转date类型_python转换字符串为datetime类型

    下面是编程之家 jb51.cc 通过网络收集整理的代码片段. 编程之家小编现在分享给大家,也给大家做个参考. python中通过日期转换函数把字符串格式的日期转换成datetime格式的日期格式 ti ...

  7. python格式化输出宽度对齐_python 中 字符串格式化示例,输出格式没有达到指定宽度,求帮忙!...

    python 版本:2.7.3 运行平台:macX 10.8 开发工具:IDLE 问题描述 width = input('Please enter width(>10): ') price_wi ...

  8. python必学的模块_Python常用的模块

    模块和包 1.1模块介绍模块定义:一系列功能的集合体 模块使用: import导入模块 或者 from ... import... 导入模块 模块分类:内置模块 自定义模块 第三方模块 模块加载顺序: ...

  9. python必学的模块_Python必学的模块有哪些?

    展开全部 简单来说,模块就是一堆代码实现某个功32313133353236313431303231363533e4b893e5b19e31333433653866能,它们是已经写好的.py文件,在我们 ...

最新文章

  1. Java指派问题_指派问题的匈牙利算法
  2. css怎样通过超链接更改背景,css超链接的底色如何设置
  3. 关于MonoBehaviour的单例通用规则
  4. oracle快速复制表数据
  5. poj 1390(消除方块(blocks))
  6. [NOIP10.6模拟赛]2.equation题解--DFS序+线段树
  7. ansible不配置ssh免密钥,使用密码登录
  8. jni4net调用net库
  9. 关联查询objectid_SAP 删除的BOM如何查询呢?
  10. 淘客十大常用网站,成为大牛的起点
  11. ubuntu16.04下运行海康威视网络摄像头sdk(qtdemo)
  12. 高通8155源码下载与Android源码编译
  13. hadoop3.3.0集群搭建(详细教程)
  14. python打开其他应用程序错误_Python应用程序错误(Udacity)
  15. Android——扩大ImageButton的点击区域
  16. 量产国产服务器cpu芯片,中国第一!百度自研芯片量产:配国产CPU
  17. Python面试——基础面试题
  18. Android指南针之加速度传感器地磁传感器
  19. 计算机专业跨考会计好处,细数跨考会计的各种好处
  20. 打印机服务Print Spooler启动后又自动关闭的解决办法

热门文章

  1. 【网站】如何做一个自己的视频网站
  2. 如何将自己的网站上传至服务器并通过域名进行访问
  3. Python生成透明背景图片
  4. MSCL超级工具类(C#),开发人员必备,开发利器
  5. 【项目】 基于BOOST的站内搜索引擎
  6. 金工计算机测试题,金工考试题精选.doc
  7. 图像处理——使用模板对矩阵进行中值滤波(中值滤波模板)
  8. 中企海外周报 | 中国品牌闪耀亮相2019 IFA
  9. Teams中阻止上传文件--详解
  10. STM32——EMWIN对话框(十二)