参考链接: 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-8
from docx import Document
import re, sys, datetime
def getText(wordname):
    d = Document(wordname)
    texts = []
    for para in d.paragraphs:
        texts.append(para.text)
    return texts
def is_Chinese(word):
    for ch in word:
        if '\u4e00' <= ch <= '\u9fff':
            return True
    return False
def 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 segs
def showInfo(doc, filename = 'filename'):
    chars = 0
    segs = 0
    for p in doc:
        for s in p:
            segs = segs + 1
            chars = 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 

参考链接: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/in from docx import Document doc=Document('a.docx') contents=''.join((p.text for p in doc.paragraphs)) words=[] for index,ch in enumerate(cont... def discern(): text1=input('请输入一段英文,以空格区分:\n').split(' ') text2 = input('请再次输入一段英文,以空格区分:\n').split(' ') text=[] for i in text1: if i in text2: text.append(i) print( sys是python的一个【标准库】,是【system】的简写,封装了一些与系统相关的信息和接口。 2、argv是什么? argv是【argument variable】的缩写,意为“参数变量”,这个参数变量是一个List列表。 argv[0] 是“被调用脚本文件的相对路径或者绝对路径”,例如: 这里的有一个test.py脚本文件: # test.py import sys a=sys.argv[0] print(a) 它的绝对路径为“F:\PythonCode\test.py”,在控
大家好,又到了Python办公自动化专题 如果你经常与Excel或Word打交道,那么从两份表格/文档找到不一样的元素是一件让人很头疼的工作,当然网上有很多方法、第三方软件教你如何对比两份文件。本文就将以两份真实的Excel/Word文件为例,讲解如何使用Python光速对比并提取文件的不同之处! 比较Excel 为了方便说明,我创建了一个简单的Excel用于示例 可以看到上方两个Excel表格共有五处不同,现在我们使用Python来快速定位这五处不同,这次不需要openpyxl,使用Pa
文章目录前言基本思路实现代码测试结果小结 我们在写论文的时候,为了避免论文重复,可以使用第三方的库进行查重。但是,有时候在写论文的时候,只是引用自己之前的资料,在查重前想对自己的论文两篇文章进行查重。网上找了一下,没找到合适的工具,于是就自己用Python写了一个。 两篇论文查重的方法相对比较简单,即将文章拆分成小句,然后小句间进行两两对比。主要实现基本可以分为以下三步:
### 回答1: 在Python,我们可以使用open()函数打开一个文本文件,然后使用readlines()方法读取文件的内容。读取之后,我们可以使用字符串的split()方法将文本内容按照空格分割成列表。在这个列表,我们可以使用字符串的startswith()和endswith()方法查找字符串以及引号内的内容。 比如,我们有以下文本内容: 本文演示在Python如何读取txt文档引号内容。 "我是引号内内容" 这是另一个引号内的内容。 我们可以使用以下代码读取文件并搜索引号内的内容: with open('test.txt', 'r', encoding='utf-8') as f: lines = f.readlines() for line in lines: words = line.split() # 将内容按照空格分割成列表 for word in words: if word.startswith('"') and word.endswith('"'): content = word[1:-1] # 提取引号内的内容 print(content) 运行以上代码将输出两个字符串:`我是引号内内容`和`这是另一个引号内的内容`,这就是我们从文本提取出的引号内的内容。 需要注意的是,在分离词语时,我们也遵循了常见的处理方式,以空格为标准,如引号内的“我是引号内内容”作为整体读入。如果需要处理引号内部分的空白符号,比如换行符或制表符,则需要额外处理。 ### 回答2: Python是一种高级的编程语言,它拥有许多内置函数和模块,可以帮助开发人员完成各种任务。其之一就是读取文本文件内容。读取txt文档引号内容也是其之一。 在Python,通过打开文本文件并读取其内容,可以轻松地读取文本文件引号内容。下面是一个简单的Python脚本示例。 首先,通过以下步骤打开文件: file = open('file.txt', 'r') 现在可以使用Python内置函数readline()来读取一行文本文件。如果我们想读取引号内容,可以使用split()函数来将该行句子拆分成子字符串。 line = file.readline() tokens = line.split('"') 这样,我们就可以获得文本文件引号内容。如果文件包含多行文本,可以使用循环来读取每一行,并将其拆分成子字符串。 file = open('file.txt', 'r') for line in file: tokens = line.split('"') print(tokens[1]) 该代码将输出文本文件所有引号内容。 总之,Python是一种强大的编程语言,可以轻松地读取文本文件内容,包括引号内容。使用Python内置函数和模块,我们可以处理和分析大量文本数据。 ### 回答3: Python读取txt文档引号内容可以通过正则表达式来实现。 首先,我们需要使用Python自带的open函数打开txt文件,并以“只读”模式打开。同时,我们可以使用readlines()函数来逐行读取文件内容,这样可以方便我们对每一行进行正则匹配。 接下来,我们需要使用正则表达式来提取引号内容。正则表达式是用来描述字符串规则的工具,通过指定规则,可以快速匹配字符串符合规则的内容。我们可以通过re模块来使用正则表达式。 具体实现方法如下: ```python import re # 导入re模块 with open('test.txt', 'r') as f: # 打开文件 content = f.readlines() # 逐行读取内容 for line in content: # 使用正则表达式匹配引号内容 result = re.findall(r'"(.*?)"', line) if result: # 如果匹配到了 print(result[0]) # 输出第一个匹配结果 以上代码,我们首先使用open函数打开了一个名为test.txt的txt文件,并以只读模式打开。然后,我们使用readlines()函数逐行读取文件内容,并使用正则表达式r'"(.*?)"'匹配引号内容。其,正则表达式的.*?表示匹配任意字符,?表示非贪婪匹配。最后,我们使用if语句判断是否匹配到了结果,如果匹配到了,则使用print函数输出第一个匹配结果。 综上所述,Python读取txt文档引号内容可以通过正则表达式来实现,具体实现方法如上所述。
Original error was: DLL load failed while importing _multiarray_umath: 找不到指定的模块 melody9215: 重装python就好了 python+tkinter使用canvas不显示图片的问题 非线性光学元件: 不知道为什么类中函数使用image(作为类成员)的也不行 将python程序打包成exe Pythonbccxz: 解决了,可以选择不打包,将文件直接添加到Python文件中 将python程序打包成exe 问题解决了吗,我是在自己电脑上能显示图片,但是换一个电脑之后就不能显示