一个使用pyqt的word文档查重工具

这篇具有很好参考价值的文章主要介绍了一个使用pyqt的word文档查重工具。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

使用场景

有时我们在借鉴一篇文档之后还不想有太多重复,这个时候可以使用这个工具对两个word文档进行对比

代码

import sys
from PyQt5.QtWidgets import QApplication, QMainWindow, QPushButton, QVBoxLayout, QWidget, QLabel, QFileDialog
from docx import Document
import re, datetime


class WordComparerApp(QMainWindow):
    def __init__(self):
        super().__init__()

        self.initUI()

    def initUI(self):
        self.setWindowTitle('Word 文档比较器')
        self.setGeometry(100, 100, 400, 200)

        self.centralWidget = QWidget(self)
        self.setCentralWidget(self.centralWidget)

        self.layout = QVBoxLayout()

        self.file1_label = QLabel('选择文件1:')
        self.layout.addWidget(self.file1_label)

        self.file1_button = QPushButton('选择文件1')
        self.file1_button.clicked.connect(self.openFile1)
        self.layout.addWidget(self.file1_button)

        self.file2_label = QLabel('选择文件2:')
        self.layout.addWidget(self.file2_label)

        self.file2_button = QPushButton('选择文件2')
        self.file2_button.clicked.connect(self.openFile2)
        self.layout.addWidget(self.file2_button)

        self.compare_button = QPushButton('开始比较')
        self.compare_button.clicked.connect(self.compareFiles)
        self.layout.addWidget(self.compare_button)

        self.centralWidget.setLayout(self.layout)

    def openFile1(self):
        options = QFileDialog.Options()
        file1, _ = QFileDialog.getOpenFileName(self, "选择文件1", "", "Word Files (*.docx)", options=options)
        if file1:
            self.file1_label.setText(f'选择文件1: {file1}')
            self.file1 = file1

    def openFile2(self):
        options = QFileDialog.Options()
        file2, _ = QFileDialog.getOpenFileName(self, "选择文件2", "", "Word Files (*.docx)", options=options)
        if file2:
            self.file2_label.setText(f'选择文件2: {file2}')
            self.file2 = file2

    def compareFiles(self):
        if hasattr(self, 'file1') and hasattr(self, 'file2'):
            doc1 = self.readDocx(self.file1)
            doc2 = self.readDocx(self.file2)

            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)):
                    self.compareParagraph(doc1, i, doc2, j)
            t2 = datetime.datetime.now()
            print('\n比对完成,总用时: ', t2 - t1)

    def getText(self, wordname):
        d = Document(wordname)
        texts = []
        for para in d.paragraphs:
            texts.append(para.text)
        return texts

    def msplit(self, s, separators=',|\.|\?|,|。|?|!'):
        return re.split(separators, s)

    def readDocx(self, docfile):
        print('*' * 80)
        print('文件', docfile, '加载中……')
        t1 = datetime.datetime.now()
        paras = self.getText(docfile)
        segs = []
        for p in paras:
            temp = []
            for s in self.msplit(p):
                if len(s) > 2:
                    temp.append(s.replace(' ', ""))
            if len(temp) > 0:
                segs.append(temp)
        t2 = datetime.datetime.now()
        print('加载完成,用时: ', t2 - t1)
        self.showInfo(segs, docfile)
        return segs

    def showInfo(self, 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(self, doc1, i, doc2, j, 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])
        if len1 < 10 or len2 < 10:
            return []

        lst = []
        for s1 in p1:
            if len(s1) < min_segment:
                continue
            for s2 in p2:
                if len(s2) < min_segment:
                    continue
                if s2 in s1:
                    lst.append(s2)
                elif s1 in s2:
                    lst.append(s1)

        count = sum([len(s) for s in lst])
        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('相同内容:', lst)
            print('相同字符比:{1:.2f}%\n相同字符数: {0}\n'.format(count, ratio * 100))
        return lst


def main():
    app = QApplication(sys.argv)
    ex = WordComparerApp()
    ex.show()
    sys.exit(app.exec_())


if __name__ == '__main__':
    main()

使用截图

一个使用pyqt的word文档查重工具,pyqt,word,python

打包好的软件下载链接

文档查重器

结尾

如果觉得文章对你有用请点赞、关注 ->> 你的点赞对我太有用了
群内交流更多技术
130856474 <-- 在这里文章来源地址https://www.toymoban.com/news/detail-824246.html

到了这里,关于一个使用pyqt的word文档查重工具的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • word文档批量生成工具(附免费软件)(按Excel表格内容自动替换内容生成文档)

    批量生成word文档是让人无比厌恶但有时又不得不做的事情。比如学校要给拟录取的学生发通知书,就可能需要批量生成一批只有“姓名”、“学院”和“专业”不同,其他内容都相同的word文档以供打印(事实上直接生成pdf是更好的选择,这个以后有心情可以弄一下)。 要实

    2024年02月11日
    浏览(48)
  • Java实现Word文档转PDF,PDF转Word,PDF转Excel,PDF转换工具

    java实现word文档转PDF,PDF转word 解决只能转换4页问题 解决每页头部存在水印问题 引入依赖 破解的jar包 链接: https://pan.baidu.com/s/1MO8OBuf4FQ937R9KDtofPQ 提取码: 4tsn 源码路径:https://download.csdn.net/download/weixin_43992507/88215577 像流读取文件这些要关闭释放,不然异常报错文件的读取不会

    2024年02月13日
    浏览(53)
  • 【Python】ChatAnywhere,ChatGPT API实现的简易版copilot,能够在word、wps、office中写文档使用,任意软件内可用

    在任意软件内使用快捷键补全选中文本,word和wps中都可以方便的使用, 在任意软件内使用 编写文档的好助手 选中文本作为上下文提示,按下快捷键 Ctrl+Alt+ 激活补全,开始后将会自动逐字输出补全的内容 word中使用 微信聊天中使用 项目链接地址:ChatAnywhere,有帮助的话记得

    2024年02月09日
    浏览(47)
  • 开源Word文字替换小工具更新 增加文档页眉和页脚替换功能

    ITGeeker技术奇客发布的开源Word文字替换小工具更新到v1.0.1.0版本啦,现已支持Office Word文档页眉和页脚的替换。 同时ITGeeker技术奇客修复了v1.0.0.0版本因替换数字引起的in ‘ requires string as left operand, not int错误。 开源Word文字替换小工具官方介绍页面:https://www.itgeeker.net/itgeeke

    2024年02月11日
    浏览(41)
  • Python获取豆丁文档数据内容, 保存word文档

    前言 嗨喽,大家好呀~这里是爱看美女的茜茜呐 开发环境: python 3.8 pycharm 模块使用: requests -- pip install requests re base64 docx -- pip install python-docx 第三方模块安装方法: win + R 输入cmd 输入安装命令 pip install 模块名 (如果你觉得安装速度比较慢, 你可以切换国内镜像源) 准备工作 在

    2024年02月13日
    浏览(56)
  • Python读取Word文档内容

    Python读取Word文档内容 在Python中,我们可以使用Python-docx模块来读取Word文档内容。这个模块提供了一种方法,即使用Python代码来读取和编辑Word文档。 安装Python-docx模块 要使用Python-docx模块,我们需要先安装它。可以使用以下命令来安装Python-docx模块: 读取Word文档 我们首先需

    2024年02月07日
    浏览(42)
  • python创建word文档并向word中写数据

            python创建word文档需要用到docx库,安装命令如下:         注意,安装的是python-docx。         使用方法有很多,这里只介绍创建文档并向文档中写入数据。         存在一个csv文件,格式如下:         现在需要读取其中的username和content字段,并按照username和co

    2024年04月14日
    浏览(47)
  • chatgpt赋能python:Python如何打开Word文档?

    Python 是一种强大的编程语言,可以帮助我们完成各种重复性工作,其中包括自动化文件的处理。在这篇文章中,我们将学习如何使用 Python 打开 Word 文档。本文将介绍三种不同的方式:使用 Python 原生模块、使用第三方库 PyWin32 和使用另一种第三方库 python-docx。 Python 原生模块

    2024年02月03日
    浏览(41)
  • Python+docx实现python对word文档的编辑

            该模块可以通过python代码来对word文档进行大批量的编辑。docx它提供了一组功能丰富的函数和方法,用于创建、修改和读取Word文档。下面是 docx 模块中一些常用的函数和方法的介绍: 安装:pip install docx                  通过遍历  doc.paragraphs  来获取文档中

    2024年02月16日
    浏览(42)
  • Python采集某网站文档,并保存word格式

    哈喽兄弟们 我们平常需要下载文档的时候,是不是发现,要么不能下载,要么不能复制,就能难受。 常见的文档网站很多,但是这里就不一一说名字了,emmm 那么我们今天来分享一下,如何用Python将这些不给下载的文档给批量下载下来。 你需要准备 开发环境 模块使用 两个

    2024年02月16日
    浏览(54)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包