使用python解决中英混合参考文献中et al 和等的问题

2023-11-10

这个代码使用zipfile将docx进行解压,然后操作document.xml文件,找到中文中的et al之后替换为“等”,然后再压缩为docx

import zipfile
import re
import os
import shutil
from lxml import etree

def replace_etal(filepath):
    temp_dir = 'temp_dir'
    temp_filename = os.path.join(temp_dir, 'word/document.xml')

    # Create a temporary directory and extract the docx file into it
    with zipfile.ZipFile(filepath, 'r') as docx:
        docx.extractall(temp_dir)

    # Parse the XML document
    with open(temp_filename, 'r', encoding='utf-8') as f:
        tree = etree.parse(f)

    root = tree.getroot()

    # Get the default namespace
    default_ns = re.match(r'\{.*\}', root.tag).group(0)[1:-1]  # We remove the {} 

    # Create a variable to store the text of the previous 't' element
    prev_text = ''

    # Iterate over every 't' element in the XML
    for element in root.findall('.//{{{}}}t'.format(default_ns)):
        print(element.text)
        # If the element text contains 'et al.' and the previous text contains Chinese characters, replace 'et al.' with '等'
        if element.text and 'et al.' in element.text and re.search(r'[\u4e00-\u9fa5]', prev_text):
            element.text = element.text.replace('et al.', '等.')

        # Update the previous text
        if element.text:
            prev_text = element.text
        else:
            prev_text = ''

    # Write the modified XML back to the temporary file
    with open(temp_filename, 'wb') as f:
        f.write(etree.tostring(root))

    # Create a new zip file with all contents of the temporary directory
    with zipfile.ZipFile( filepath, 'w') as docx:
        for folderName, subfolders, filenames in os.walk(temp_dir):
            for filename in filenames:
                # create complete filepath of file in directory
                filePath = os.path.join(folderName, filename)
                # Add file to zip
                docx.write(filePath, arcname=filePath.replace(temp_dir, ''))

    # Delete the temporary directory
    shutil.rmtree(temp_dir)

    return  filepath # 返回修改后的文件名

def openword(odocx):
    # 打开文档
    app_path = "\"C:\\Program Files\\Microsoft Office\\root\\Office16\\WINWORD.EXE\"" # Word应用程序路径,根据实际安装路径修改
    os.system(f'{app_path} {odocx}')

odocx = replace_etal('测试文档.docx')
openword(odocx)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用python解决中英混合参考文献中et al 和等的问题 的相关文章

随机推荐

  • Markdown快速入门教程

    Markdown 的目标是实现 易读易写 并强调它的 可读性 因此Markdown 的语法全由标点符号所组成 并经过严谨慎选 是为了让它们看起来就像所要表达的意思 以下是Markdown 大部分的语法 常用语法 文字样式 文字字体 类别 语
  • float,flex和grid布局

    页面布局往往会影响着整体的结构与项目的样式 通常我们用的布局方式有三种 float flex grid 1 float或position布局 1 1概念 首先对于一个页面来说 有浮动流 文档流 文本流这几种模式 而float布局则是脱离文档
  • MySQL的架构体系

    在对MySQL深入的学习之前 我们首先要了解MySQL的一个完整的架构 首先了解到MySQL是一个开源的数据库管理系统 它相对于Oracle更加地轻量 成本低 随着功能的日益完善 它也变得备受企业的喜爱 尤其是中小企业 有图可知 MySQL
  • 京东云高可用业务架构建设

    本文以 2022 年一个实际项目为基础 来演示在京东云上构建高可用业务的整个过程 公有云及私有云客户可通过使用京东云的弹性 IAAS PAAS 服务 创建高可用 高弹性 高可扩展 高安全的云上业务环境 提升业务 SLA 提升运维自动化水平
  • 某大型项目 三巡工作(服务器巡检脚本)

    bin bash 参数定义 date date Y m d H M S centosVersion awk print NF 1 etc redhat release VERSION date F 日志相关 LOGPATH tmp awr
  • 2022 年企业 Java 面试前复习的正确姿势(已助力 512 人入职大厂)

    前言 这份面试清单是今年 1 月份之后开始收集的 一方面是给公司招聘用 另一方面是想用它来挖掘在 Java 技术栈中 还有一些知识点是我还在探索的 我想找到这些技术盲点 然后修复它 以此来提高自己的技术水平 说实话刚开始的时候整理这些面试题
  • Docker第二篇-Linux和Windows下安装Docker

    文章目录 Docker版本说明 CentOS安装Docker 前提条件 安装 镜像加速 删除Docker CE Windows安装Docker 前提条件 安装 镜像加速 Docker版本说明 Docker 分为 CE 和 EE 两大版本 C
  • 树莓派烧录

    准备工作 树莓派 一张SD卡 SD尽可能的大 不然安装完系统 就没什么空间了 建议64G 软件准备 1 洗卡软件 SDcard Formatter 2 烧录软件 win32diskimager 3 镜像文件 可以从树莓派官网进行下载Rasp
  • MySQL数据行溢出的深入理解

    一 从常见的报错说起 故事的开头我们先来看一个常见的sql报错信息 相信对于这类报错大家一定遇到过很多次了 特别对于OMG这种已内容生产为主要工作核心的BG 在内容线的存储中 数据大一定是个绕不开的话题 这里的数据 大 远不止存储空间占用多
  • jenkins搭建自动化部署(Windows)

    官网 https jenkins io 选择相应版本下载 安装后找到安装目录下jenkins war 可以放在tomcat下运行 也可直接运行命令 java jar jenkins war 启动 关闭命令 net start jenkins
  • mysql 5.6压缩安装_mysql5.6zip格式安装过程

    第一步 到官网下载mysql 5 6 44 winx64的压缩包文件格式 第二步 在我的电脑 gt 属性 gt 高级 gt 环境变量 path变量中添加mysql bin文件夹的路径 第三步 配置完环境变量之后先别忙着启动mysql 我们还
  • 08-分布式

    1 分布式中 接口的幂等性的设计 在高并发场景的架构里 幂等性是必须得保证的 比如说提交作业 查询和删除不在 幂等讨论范围 1 建唯一索引id 每次操作 都根据操作和内容生成唯一的id 在执行之前先判断id是否存在 如果不存在 则 执行后续
  • rem的使用方式

    rem是什么 rem是指相对于根元素的字体大小的单位 在日常开发过程中我们通常把根元素 html body 的字体设置为10px 方便于我们计算 此时子元素的1rem就相当于10px rem与em的区别 各自的优缺点 em子元素字体大小的e
  • CVPR 2019 论文大盘点—人体姿态篇

    CV君盘点了CVPR 2019 中有关人体姿态的论文 其中研究 3D人体姿态估计的论文最多 有 11 篇 研究 2D 姿态估计的 7 篇 姿态迁移 2 篇 人体图像生成 1 篇 人体捕捉 2 篇 另外还有2篇创建了新的基准数据集 姿态估计是
  • python云图

    安装相关插件 python3 m pip install jieba wordcloud matplotlib import matplotlib pyplot as plt import jieba from wordcloud impo
  • 【Spring Boot】【前后端分离】后端接口返回结果统一封装

    文章目录 创建 SpringBoot 项目 封装返回结果 实现返回对象的自动封装 处理异常 测试 最近在尝试使用前后端分离的模式写一个简单的个人博客 遇到接口数据返回结构的问题 在网上查了一圈 发现了一个很好用的方法 在复现的过程中也遇到了
  • 算法设计与分析课后总结

    算法设计与分析课后总结 算法设计与分析 第1章 算法设计基础 课后习题 第二章算法分析基础 课后习题 1 考虑下面算法 回答下列问题 算法完成什么功能 算法的基本语句时什么 基本语句执行了多少次 2 分析以下程序段中基本语句的执行次数 要求
  • 100天精通Python(可视化篇)——第92天:Pyecharts绘制炫酷柱状图、条形图实战大全

    文章目录 专栏导读 1 基础柱状图 2 旋转x轴标签 3 旋转坐标轴 4 添加坐标轴名称 5 添加标记点 6 添加标注线 7 添加数据 8 添加自定义背景图 9 堆叠柱状图 10 柱状图与折线图组合 11 三维柱状图 12 水平滑动 鼠标滚
  • 包、模块、函数的关系结构

    三者关系 python中程序的结构是由包 模块 函数 类大致构成 其关系如下 package module function 模块定义与调用 1 python中一个 py文件都可以是一个module module可以有函数 类 代码组成 如
  • 使用python解决中英混合参考文献中et al 和等的问题

    这个代码使用zipfile将docx进行解压 然后操作document xml文件 找到中文中的et al之后替换为 等 然后再压缩为docx import zipfile import re import os import shutil