把doi直接插入word中,然后直接生成参考文献

这段代码通过提取、查询、替换DOI,生成参考文献列表来处理Word文档,可按功能模块划分:

  1. 导入模块
import re
from docx import Document
from docx.oxml.ns import qn
from habanero import Crossref

导入正则表达式模块re用于文本模式匹配,python - docx库中的Document类操作Word文档,qn函数处理命名空间(代码中未实际使用),以及habanero库的Crossref类,用于通过DOI查询参考文献信息。
2. 提取DOI函数

def extract_dois(text):doi_pattern = r'(10\.\d{4,9}/[-._;()/:A-Z0-9]+)'return re.findall(doi_pattern, text, re.IGNORECASE)

定义extract_dois函数,接收文本参数text,使用正则表达式doi_pattern匹配DOI格式,通过re.findall函数提取所有符合格式的DOI字符串,返回包含这些DOI的列表,忽略大小写。
3. 获取参考文献函数

def get_reference(doi):cr = Crossref()try:result = cr.works(ids=doi)if'message' in result:message = result['message']# 提取作者信息authors = []if 'author' in message:for author in message['author']:if 'family' in author and 'given' in author:last_name = author['family']first_initial = author['given'][0] if author['given'] else ''authors.append(f"{last_name}, {first_initial}.")author_str = ', '.join(authors)# 提取年份、标题等其他信息year = message['issued']['date - parts'][0][0] if 'issued' in message and 'date - parts' in message['issued'] and message['issued']['date - parts'] else 'n.d.'title = message['title'][0] if 'title' in message and message['title'] else 'No title'journal = message['container - title'][0] if 'container - title' in message and message['container - title'] else 'No journal'volume = message['volume'] if 'volume' in message else 'No volume'issue = message['issue'] if 'issue' in message else 'No issue'pages = message['page'] if 'page' in message else 'No pages'reference = f"{author_str} ({year}). {title}. {journal}, {volume}({issue}), {pages}. doi:{doi}"return referenceelse:return Noneexcept Exception:return None

get_reference函数接收DOI参数doi,创建Crossref实例cr查询该DOI对应的参考文献信息。尝试获取查询结果,若结果中存在message字段,则从中提取作者、年份、标题、期刊、卷号、期号、页码等信息,格式化为APA格式参考文献字符串并返回;若查询失败或出现异常,返回None
4. 主处理函数

def convert_dois_in_word(input_file, output_file):doc = Document(input_file)all_dois = []doi_original_index = {}index = 1# 提取文档中所有DOI并编号for paragraph in doc.paragraphs:dois = extract_dois(paragraph.text)for doi in dois:if doi not in all_dois:all_dois.append(doi)doi_original_index[doi] = indexindex += 1references = []successful_dois = []failed_dois = []# 获取每个DOI的参考文献信息for doi in all_dois:reference = get_reference(doi)if reference:references.append(reference)successful_dois.append(doi)else:failed_dois.append(doi)# 将文档中的DOI替换为上标引用序号for paragraph in doc.paragraphs:for doi in all_dois:if doi in successful_dois:index = successful_dois.index(doi) + 1runs = paragraph.runsfor run in runs:if doi in run.text:parts = run.text.split(doi)run.text = parts[0]new_run = paragraph.add_run(f"[{index}]")new_run.font.superscript = Truerun = paragraph.add_run(parts[1])# 在文档末尾添加参考文献列表doc.add_page_break()doc.add_heading('参考文献', level=1)for i, reference in enumerate(references, start=1):doc.add_paragraph(f"[{i}] {reference}")doc.save(output_file)# 打印转换结果print("成功转换的DOI:")for doi in successful_dois:print(doi)print("\n转换失败的DOI:")for doi in failed_dois:original_index = doi_original_index[doi]print(f"{original_index}. {doi}")

convert_dois_in_word函数接收输入、输出文件路径参数input_fileoutput_file。打开输入Word文档,遍历段落提取所有DOI,为每个唯一DOI编号并存储。尝试获取每个DOI的参考文献信息,区分成功与失败的DOI。再次遍历段落,将成功获取信息的DOI替换为上标引用序号。在文档末尾添加分页符、“参考文献”标题及格式化的参考文献列表,最后保存文档并打印成功和失败转换的DOI信息。
5. 使用示例

input_file = 'input.docx'
output_file = 'output.docx'
convert_dois_in_word(input_file, output_file)

定义输入、输出文件路径,调用convert_dois_in_word函数执行对Word文档DOI的转换和参考文献生成操作。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/75166.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

[C++] : C++11 右值引用的理解

(一)什么是左值和右值? 传统的C语法中就有引用的语法,而C11中新增了的右值引用语法特性,所以从现在开始我们 之前学习的引用就叫做左值引用。无论左值引用还是右值引用,都是给对象取别名。 1.左值 左值是一…

windows服务器切换到linux服务器踩坑点

单节点环境依赖性 单节点问题,影响业务可用性,windows影响后续自动化,健壮性的提升,需要进行linux化 每个服务至少是双节点,防止单点故障,提升系统的可用性,健壮性。linux化后可以进行docker化…

美颜SDK兼容性挑战:如何让美颜滤镜API适配iOS与安卓?

如何让美颜滤镜API同时适配iOS与Android,并确保性能流畅、效果一致,是开发者面临的一大挑战。今天,我将与大家一同深度剖析美颜SDK的跨平台兼容性问题,并分享优化适配方案。 一、美颜SDK兼容性面临的挑战 1.1不同平台的图像处理框…

Vue3 表单

Vue3 表单 随着前端技术的发展,Vue.js 作为一款流行的前端框架,不断更新迭代,以适应更高效、更便捷的开发需求。Vue3 作为 Vue.js 的第三个主要版本,引入了许多新特性和改进,其中包括对表单处理机制的优化。本文将深入探讨 Vue3 表单的使用方法、技巧以及注意事项。 1. …

笔记:代码随想录算法训练营day62:108.冗余连接、109.冗余连接II

学习资料:代码随想录 108. 冗余连接 卡码网题目链接(ACM模式) 判断是否有环的依据为,利用并查集,isSame函数,判断当下这条边的两个节点入集前是否为同根,如果是的话,该边就是会构…

RK3588,V4l2 读取Gmsl相机, Rga yuv422转换rgb (mmap)

RK3588, 使用V4l2 读取 gmsl 相机,获得yuv422格式图像, 使用 rga 转换 rgb 图像。减少cpu占用率. 内存管理方式采用 mmap… 查看相机信息 v4l2-ctl --all -d /dev/cam0 , 查看自己相机分辨率,输出格式等信息,对应修改后续代码测试… Driver Info:Driver name : rkcif…

Kubernetes》k8s》Containerd 、ctr 、cri、crictl

containerd ctr crictl ctr 是 containerd 的一个客户端工具。 crictl 是 CRI 兼容的容器运行时命令行接口,可以使用它来检查和调试 k8s 节点上的容器运行时和应用程序。 ctr -v 输出的是 containerd 的版本, crictl -v 输出的是当前 k8s 的版本&#x…

Vue 入门到实战 十一 Vuex

目录 11.1状态管理与应用场景 1)state 2)Getters 3)Mutations 4)Actions 5)Module 11.2Vuex的安装与基本应用 11.3Vuex的核心概念 一句话解释vuex:就是单独成立一个组件,这个组件存储共…

【YOLOv11】目标检测任务-实操过程

目录 一、torch环境安装1.1 创建虚拟环境1.2 启动虚拟环境1.3 安装pytorch1.4 验证cuda是否可用 二、yolo模型推理2.1 下载yolo模型2.2 创建模型推理文件2.3 推理结果保存路径 三、labelimg数据标注3.1 安装labelimg3.2 解决浮点数报错3.3 labelimg UI界面介绍3.4 数据标注案例…

探索 Vue 中的多语言切换:<lang-radio /> 组件详解!!!

探索 Vue 中的多语言切换&#xff1a;<lang-radio /> 组件详解 &#x1f30d; 嗨&#xff0c;大家好&#xff01;&#x1f44b; 今天我们来聊聊如何在 Vue 项目中实现一个优雅的多语言切换功能——<lang-radio /> 组件。这是一个小而美的组件&#xff0c;出现在登…

grafana 配置页面告警

添加告警规则 1.登录grafana 点击 Alerting > Alert rules 点击 New alert rule 2.填写告警规则名字 3.配置告警规则 选择数据源为 Loki 单机 Builder 单机Label brower 单机 node_name 标签&#xff0c;选择一个主机&#xff0c;选好后单机 Show logs 这时候查询语…

关于JVM和OS中的栈帧的区别和内存浅析

关于JVM和OS中的栈帧的区别和内存浅析 刚看了黑马JVM中的栈帧的讲解&#xff0c;感觉和自己理解的栈帧有一定出入&#xff0c;查询资料研究了一下发现的确有天壤之别&#xff0c;可惜黑马并没有讲。 故写下这篇文章巩固一下, OS的栈帧&#xff1a; ​ OS的栈帧会在调用一个函…

Python FastApi(7):请求体

1 多个参数 1.1 混合使用 Path、Query 和请求体参数 首先&#xff0c;毫无疑问地&#xff0c;你可以随意地混合使用 Path、Query 和请求体参数声明&#xff0c;FastAPI 会知道该如何处理。你还可以通过将默认值设置为 None 来将请求体参数声明为可选参数&#xff1a; from ty…

告别枯燥工作,走向自动化

嘿&#xff0c;小伙伴们&#xff01;今天给你们介绍两款超实用的RPA办公自动化软件&#xff0c;用它们&#xff0c;再也不用像机器一样做重复劳动啦&#xff0c;超省时间&#xff01; 工具名称&#xff1a;影刀RPA&#xff08;类似产品&#xff0c;八爪鱼 RPA&#xff0c;操作上…

一种C# Winform的UI处理

效果 圆角 阴影 突出按钮 说明 这是一种另类的处理&#xff0c;不是多层窗口 也不是WPF 。这种方式的特点是比较简单&#xff0c;例如圆角、阴影、按钮等特别容易修改过。其实就是html css DirectXForm。 在VS中如下 圆角和阴影 然后编辑这个窗体的Html模板&#xff0c…

HarmonyOS-ArkUI Navigation (导航组件)-第一部分

导航组件主要实现页面间以及组件内部的界面跳转&#xff0c;支持在不同的组件间进行参数的传递&#xff0c;提供灵活的跳转栈操作&#xff0c;从而便捷的实现对不同页面的访问和复用。 我们之前学习过Tabs组件&#xff0c;这个组件里面也有支持跳转的方式&#xff0c;Navigati…

华为开源自研AI框架昇思MindSpore应用案例:基于MindSpore框架实现PWCNet光流估计

如果你对MindSpore感兴趣&#xff0c;可以关注昇思MindSpore社区 1 环境准备 1.进入ModelArts官网 云平台帮助用户快速创建和部署模型&#xff0c;管理全周期AI工作流&#xff0c;选择下面的云平台以开始使用昇思MindSpore&#xff0c;可以在昇思教程中进入ModelArts官网 创建…

虚幻基础:UI

文章目录 控件蓝图可以装载其他控件蓝图可以安装其他蓝图接口 填充&#xff1a;相对于父组件填充水平框尺寸—填充—0.5&#xff1a;改变填充的尺寸填充—0.5&#xff1a;改变与父组件的距离 锚点&#xff1a;相对于父组件的控件坐标系原点&#xff0c;屏幕比例改变时&#xff…

监控平台——SkyWalking部署

一、环境准备 先下载SkyWalking安装包&#xff0c;需要注意的是SkyWalking 版本在10.X以上使用的nacos-client是2.X&#xff0c;如果安装的Nacos版本是1.X就会存在兼容性的问题。由于本人使用的SpringBoot项目是2.7.X版本&#xff0c;安装的Nacos版本只能是1.X版本的&#xff…

热门索尼S-Log3电影感氛围旅拍LUTS调色预设 Christian Mate Grab - Sony S-Log3 Cinematic LUTs

热门索尼S-Log3电影感氛围旅拍LUTS调色预设 Christian Mate Grab – Sony S-Log3 Cinematic LUTs 我们最好的 Film Look S-Log3 LUT 的集合&#xff0c;适用于索尼无反光镜相机。无论您是在户外、室内、风景还是旅行电影中拍摄&#xff0c;这些 LUT 都经过优化&#xff0c;可为…