参考链接:https://blog.csdn.net/weixin_43145361/article/details/103798581

参考链接:https://zhidao.baidu.com/question/326711580304676805.html

参考链接:https://blog.csdn.net/weixin_43245453/article/details/108335331

参考链接:https://python-docx.readthedocs.io/en/latest/index.html

参考链接:https://blog.csdn.net/weixin_42378365/article/details/85017115

一、使用python-docx库

https://python-docx.readthedocs.io/en/latest/index.html

二、对比规则

对比的基本思想是按小句进行比较,所以拆分以是标点,即,。?!等进行拆分。拆分完成以后,可以有很多的小段。本文中为了便于定位,先根据原始段落进行拆分,然后再将每段根据标点拆分成若干小句,即一个word文档 = [[段落1], [段落2], [段落3], ...,[段落n]],而每个段落= [[小句1],[小句2],[小句3],...,[小句m],]

循环对比输出,根据段落,两两进行对比,遇到匹配输出结果。

三、源码

# coding=utf-8from docx import Document
import re, sys, datetimedef getText(wordname):d = Document(wordname)texts = []for para in d.paragraphs:texts.append(para.text)return textsdef is_Chinese(word):for ch in word:if '\u4e00' <= ch <= '\u9fff':return Truereturn Falsedef msplit(s, seperators = ',|\.|\?|,|。|?|!'):return re.split(seperators, s)def readDocx(docfile):print('*' * 80)print('文件', docfile, '加载中……')t1 = datetime.datetime.now()paras = getText(docfile)segs = []for p in paras:temp = []for s in msplit(p):if len(s) > 2:temp.append(s.replace(' ', ""))if len(temp) > 0:segs.append(temp)t2 = datetime.datetime.now()print('加载完成,用时: ', t2 - t1)showInfo(segs, docfile)return segsdef showInfo(doc, filename = 'filename'):chars = 0segs = 0for p in doc:for s in p:segs = segs + 1chars = chars + len(s)print('段落数: {0:>8d} 个。'.format(len(doc)))print('短句数: {0:>8d} 句。'.format(segs))print('字符数: {0:>8d} 个。'.format(chars))def compareParagraph(doc1, i, doc2, j, min_segment = 5): """功能为比较两个段落的相似度,返回结果为两个段落中相同字符的长度与较短段落长度的比值。:param p1: 行:param p2: 列:param min_segment = 5: 最小段的长度"""p1 = doc1[i]p2 = doc2[j]len1 = sum([len(s) for s in p1])len2 = sum([len(s) for s in p2])#print(len1)#print(len2)if len1 < 10 or len2 < 10:return []list = []for s1 in p1:if len(s1) < min_segment:continue;for s2 in p2:if len(s2) < min_segment:continue;if s2 in s1:list.append(s2)elif s1 in s2:list.append(s1)# 取两个字符串的最短的一个进行比值计算count = sum([len(s) for s in list])ratio = float(count) /  min(len1, len2)if count > 10 and ratio > 0.1:print(' 发现相同内容 '.center(80, '*'))print('文件1第{0:0>4d}段内容:{1}'.format(i + 1, p1))print('文件2第{0:0>4d}段内容:{1}'.format(j + 1, p2))print('相同内容:', list)print('相同字符比:{1:.2f}%\n相同字符数: {0}\n'.format(count, ratio * 100))return list#if len(sys.argv) < 3:
#    print("参数小于2.")#doc1 = readDocx(sys.argv[1])
#print(doc1)
#doc2 = readDocx(sys.argv[2])
#print(doc2)doc1 = readDocx('./document/doc1.docx')
doc2 = readDocx('./document/doc2.docx')print('开始比对...'.center(80, '*'))
t1 = datetime.datetime.now()
for i in range(len(doc1)):if i % 100 == 0:print('处理进行中,已处理段落 {0:>4d} (总数 {1:0>4d} ) '.format(i, len(doc1)))for j in range(len(doc2)):compareParagraph(doc1, i, doc2, j)t2 = datetime.datetime.now()
print('\n比对完成,总用时: ', t2 - t1)   

其中,doc1.docx中内容为

新交规扣12分的违章行为1、驾驶营运客车超载20%以上,其中除了出租车、长途客运车辆等常规营运车辆外(不含公交车),在新规则中还首次加入了校车。2、严重超速:驾驶中型以上载客载货汽车、校车、危险物品运输车辆在高速公路、城市快速路上行驶超过规定时速20%以上或者在高速公路、城市快速路以外的道路上行驶超过规定时速50%以上,以及驾驶其他机动车行驶超过规定时速50%以上。3、故意遮挡号牌:从1月1日起,上道路行驶的机动车未悬挂机动车号牌的,或者故意遮挡、污损、不按规定安装机动车号牌一律会被一次性扣除12分。另外,对于牌照架也更新了规定,对于使用不符合规定的牌照架会受到200元并扣6分的处罚。4、驾驶营运客车在高速公路车道内停车:如果营运客车在高速公路上擅自停车(没有事故、车辆故障等原因)将受到一次性扣除12分的处罚。5、连续驾驶中型以上载客汽车、危险物品运输车辆超过4小时未停车休息或者停车休息时间少于20分钟。6、未取得校车驾驶资格驾驶校车(新增)校车准驾驾驶资格:驾龄3年以上,年龄不超过60周岁;最近连续3个分周期内没有满分记录;无致人死亡或者重伤的交通责任事故;无饮酒或者醉酒后驾驶记录,最近1年内无驾驶客运车辆超员、超速等严重交通违法行为;无犯罪记录,无因违反治安管理行为受到拘留处罚的记录;身体健康,无酗酒、吸毒行为记录,无传染性疾病,无癫痫、精神病等可能危及行车安全的病史。7、饮酒后驾驶机动车:酒后驾车除了扣除12分之外,还将扣押驾照6个月,并给予不超过2000元的现金处罚。对于醉酒驾车则是吊销驾驶证的处罚,除此之外还有刑事责任的处罚,且5年内不得重新考取驾照。8、驾驶与准驾车型不符:该行为实际上讲越级驾驶可以视为无照驾驶。另外除了扣除12分之外,交警还有权利给予200-2000元和扣车等处罚。9、造成交通事故后逃逸:交通事故肇事逃逸,尚不构成犯罪者将会受到12分的处罚。致人重伤、死亡或者使公私财产遭受重大损失的,处三年以下有期徒刑或者拘役;交通运输肇事后逃逸或者有其他特别恶劣情节的,处三年以上七年以下有期徒刑;因逃逸致人死亡的,处七年以上有期徒刑。10、伪造、更改号牌和证件:对于使用伪造、擅自更改的机动车号牌、行驶证、驾驶证、校车标牌,或者使用其他机动车号牌、行驶证等行为将会一次性扣除12分。11、驾驶机动车在高速公路上倒车、逆行、穿越中央分隔带掉头等严重影响交通安全的,都会受到12分的处罚。新交规扣6分的违章行为1、驾驶机动车违反道路交通信号灯通行:由于侥幸心理导致的闯红灯行为,过去是扣除3分,从2017年开始升级为扣除6分。2、货车超载:超过额定载重量30%以上的车辆,或违反规定载客的车辆将受到扣除6分的处罚。3、营运车辆超载未超过20%:驾驶营运客车(不包括公共汽车)、校车载人超过核定人数未达20%的,或者驾驶其他载客汽车载人超过核定人数20%以上将受到扣除6分的处罚。4、高速公路超速未达到20%(新增):驾驶中型以上载客载货汽车、校车、危险物品运输车辆在高速公路、城市快速路上行驶超过规定时速未达20%的车辆将受到扣除6分的处罚。5、普通公路超速20%以上(新增):驾驶中型以上载客载货汽车、校车、危险物品运输车辆在高速公路、城市快速路以外的道路上行驶或者驾驶其他机动车行驶超过规定时速20%以上未达到50%将受到此处罚。6、驾驶机动车不按照规定避让校车(新增),扣6分;7、低能见度气象条件下驾驶机动车在高速公路上不按规定行驶(新增),在恶劣天气中,应该做到:能见度小于200米时,开启雾灯、近光灯、示廓灯和前后雾灯,车速不得超过每小时60公里,与同车道前车保持100米以上的距离;能见度小于100米时,开启雾灯、近光灯、示廓灯、前后雾灯和危险报警闪光灯,车速不得超过每小时40公里,与同车道前车保持50米以上的距离;能见度小于50米时,开启雾灯、近光灯、示廓灯、前后雾灯和危险报警闪光灯,车速不得超过每小时20公里,并从最近的出口尽快驶离高速公路。8、机动车驾驶证被暂扣期间驾驶机动车,在被暂扣期间属于无照驾驶。9、驾驶营运客车以外的机动车在高速公路车道内停车;

doc2.docx中内容为

核心提示:最新交通法规扣分细则规定,扣三分的行为有十二种,表现在驾驶货车载物超过核定载质量未达30%的;驾驶禁止驶入高速公路的机动车驶入高速公路的;驾驶机动车违反禁令标志、禁止 标线指示等方面。法律快车编辑在下文为您详细整理相关内容,仅供参考。最新交通法规扣分细则规定,机动车驾驶人有下列违法行为之一,一次记3分:(一)驾驶营运客车(不包括公共汽车)、校车以外的载客汽车载人超过核定人数未达20%的;(二)驾驶中型以上载客载货汽车、危险物品运输车辆在高速公路、城市快速路以外的道路上行驶或者驾驶其他机动车行驶超过规定时速未达20%的;(三)驾驶货车载物超过核定载质量未达30%的;(四)驾驶机动车在高速公路上行驶低于规定最低时速的;(五)驾驶禁止驶入高速公路的机动车驶入高速公路的;(六)驾驶机动车在高速公路或者城市快速路上不按规定车道行驶的;(七)驾驶机动车行经人行横道,不按规定减速、停车、避让行人的;(八)驾驶机动车违反禁令标志、禁止 标线指示的;(九)驾驶机动车不按规定超车、让行的,或者逆向行驶的;(十)驾驶机动车违反规定牵引挂车的;(十一)在道路上车辆发生故障、事故停车后,不按规定使用灯光和设置警告标志的;(十二)上道路行驶的机动车未按规定定期进行安全技术检验的。以上是现场处罚,下面法律快车为您介绍非现场处罚扣掉3分的行为:从2012年7月起,7种摄录违法(非现场处罚)罚款+记分:(是摄录罚款)1、闯红灯,罚款200元。2、不按导向车道行驶,罚款200元。3、违反禁止标线行驶,罚款100元。4、超速行车,罚款200元。5、机动车走非机动车车道,罚款100元。6、逆行,罚款200元。7、违停车,罚款200元。下述非现场处罚交通违法记3分
2、严重超速:驾驶中型以上载客载货汽车、校车、危险物品运输车辆在高速公路、城市快速路上行驶超过规定时速20%以上或者在高速公路、城市快速路以外的道路上行驶超过规定时速50%以上,以及驾驶其他机动车行驶超过规定时速50%以上。

最终的结果为

********************************************************************************
文件 ./document/doc1.docx 加载中……
加载完成,用时:  0:00:00.004986
段落数:       26 个。
短句数:       70 句。
字符数:     1684 个。
********************************************************************************
文件 ./document/doc2.docx 加载中……
加载完成,用时:  0:00:00.003001
段落数:       18 个。
短句数:       43 句。
字符数:      835 个。
************************************开始比对...*************************************
处理进行中,已处理段落    0 (总数 0026 )
************************************ 发现相同内容 ************************************
文件1第0003段内容:['\u3000\u30002、严重超速:驾驶中型以上载客载货汽车、校车、危险物品运输车辆在高速公路、城市快速路上行驶超过规定时速20%以上或者在高速公路、城市快速路以外的道路上行驶超过规定时速50%以上', '以及驾驶其他机动车行驶超过规定时速50%以上']
文件2第0018段内容:['2、严重超速:驾驶中型以上载客载货汽车、校车、危险物品运输车辆在高速公路、城市快速路上行驶超过规定时速20%以上或者在高速公路、城市快速路以外的道路上行驶超过规定时速50%以上', '以及驾驶其他机动车行驶超过规定时速50%以上']
相同内容: ['2、严重超速:驾驶中型以上载客载货汽车、校车、危险物品运输车辆在高速公路、城市快速路上行驶超过规定时速20%以上或者在高速公路、城市快速路以外的道路上行驶超过规定时速50%以上', '以及驾驶其他机动车行驶超过规定时速50%以上']
相同字符比:100.00%
相同字符数: 110比对完成,总用时:  0:00:00.001989
[Finished in 0.2s]

四、出现问题

解决方法

pip install python-docx

出现问题2

解决方法

Python查找两个word中的相同内容相关推荐

  1. python查找两个数组中相同的元素_找出两个数组的相同元素,最优算法?

    在做新旧接口交替过程中,遇到了老接口和新接口json数据有些不一致的情况,需要比较两个json对象,把相同的元素赋其中一个json对象中变量的值.而且其中一个json最后输出格式还需要改变下属性名,思 ...

  2. python查找两个数组中相同的元素_匹配两个numpy数组以找到相同的元素

    使用熊猫:import pandas as pd id1 = pd.read_csv('id1.txt') id2 = pd.read_csv('id2.txt') df = id1.merge(id ...

  3. 不用函数,教你快速查找两张表格中的重复内容。

    hello,小伙伴们 想必,屏幕前的你,又是因为excel表格所困,今天呢教大家,如何快速在两张大表格里查找重复内容,今天的素材呢为了方便大家查看和理解使用方法,小编简单为大家制作了一个表格,(仅供参 ...

  4. 查找两个字符串中相同字符串_使两个字符串相同的最低成本

    查找两个字符串中相同字符串 Problem statement: 问题陈述: Given two strings string1 and string2 find the minimum cost r ...

  5. js 实现查找两个数组中的不同项——基础积累

    今天遇到一个需求,就是select的多选下拉,根据选中的值再进行相应的处理.比如当前选中了['山东','浙江','深圳']三项内容,现在去掉中间的深圳,我需要拿到去掉的是哪一项. 我想的方式就是: w ...

  6. java实现doc内容对比_Java平台Word格式处理控件Spire.Doc8月新功能代码演示:比较两个 Word 文档的内容...

    Spire.Doc 能够非常完美的识别中文字符并支持丰富的word文档元素:文本框.页眉.页脚.项目符号和编号.表格.文本.超链接.水印.图片.形状等. 自版本3.8.8开始,Spire.Doc fo ...

  7. Word处理控件Aspose.Words功能演示:使用 Python 查找和替换 Word 文档中的文本

    很多时候,您需要替换 Word 文档中的特定文本或短语.MS Word 具有针对此类情况的内置功能,您可以一键替换所需的文本.在本文中,您将学习如何使用 Python 以编程方式查找和替换 Word ...

  8. python替换word中的文字内容

    摘要:这篇文章介绍了如何使用python[3.6版本]把pdf文件转换为word文档并替换word文档中的文字内容,这里替换的规则是中英转换或者其它自定义规则 pdf转换为word pdf文件由于很难 ...

  9. Python取出两个文件中相同的电话号码及地址(文件类型为:txt文本)

    一,准备好要处理的2个文件 1.文件1内容: Person_info1.txt 学员编号 学生姓名 学生年龄 手机号码 E-mail地址 家庭住址 101 张三 18 13599713364 www. ...

最新文章

  1. 在组策略中用户策略仅对特定计算机生效,如何对本地组策略设置使之不对特定用户生效?...
  2. 【SSH网上商城项目实战23】完成在线支付功能
  3. rsync - 远程同步工具
  4. 使用基本MVC2模式创建新闻网站
  5. 单用户模式迁移home家目录
  6. php可以做ios程序吗,php写的可以在本机发送iOS push程序
  7. vivado中的rtl中电路图无发生成_FPGA零基础学习:数字电路中的组合逻辑
  8. android歌词效果,自定义View:Android歌词控件
  9. 003redis事务特性
  10. Toast 使用方法大全
  11. DI、IOC基础学习笔记
  12. Struts2之访问ServletAPI
  13. Spring Cloud Ribbon 的请求分发与原理
  14. deep|Bayes(4)
  15. 牛客网项目里的数据表
  16. 某条微博评论数据爬取
  17. 【IoT】NFC APDU 使用基础浅析
  18. 计算机网络辅助英语写作,基于计算机网络的英语写作教学
  19. 百度地图API(WEB端/JavaScript API)--实际运用与扩展
  20. 【网络安全学习之零基础】

热门文章

  1. java类对象的内部结构图解(java对象模型精讲)
  2. php checkbox表单提交,HTML表单Checkbox的值如何正确提交到PHP后台?,需要技巧
  3. 魔百盒配置服务器信息,移动魔百盒网络设置方法
  4. redis 能不能监听特定的key失效_Spring boot实现监听Redis key失效事件实现和其它方式...
  5. koa操作mongodb,封装mongdb操作方法
  6. FFmpeg的H.264解码器源代码简单分析:解码器主干部分
  7. NS2典型例子简单分析
  8. 若有下列共用体定义_练习题-第十章 结构体与共用体(有答案)
  9. usb耳机android,USB 耳机:配件规范  |  Android 开源项目  |  Android Open Source Project...
  10. java认证框架_sa-token 一个的JavaWeb权限认证框架,强大、简单、好用