如何用 Java 获取 DOCX 文档的注释

        现代文档协作工具有助于在比以往更紧迫的期限内从头到尾推动项目。前数字化项目协作依赖于手动标记和注释来在分发之前修改/改进关键报告和备忘录,而不同行业的当代团队可以使用可访问的简单修订工具来实现相同的基本目标,甚至更多。 DOCX 文件中的所有用户。任何团队成员都可以将建议、更改和标注添加到 SharePoint 站点驱动器中的 DOCX 文档中,从而大大缩短与利益相关者发布和共享最终产品所需的时间。

        在幕后,微软的 OpenXML 文档格式使这种面向团队的文件操作成为可能。由于 DOCX 格式的结构为由多个基于 XML 的文件组成的 zip 文件,因此注释和其他修订在物理上与文档的核心内容分开,并且定义这些单独文件之间关系的数据存储在其自己的文件夹中。  

        换句话说,当我们打开协作 DOCX 文档时看到的注释和修订是与文档文本正文通信的独立文件的一部分,文档文本正文存储在其自己的文件中。这种文件结构划分最终创造了我们在添加、删除或解决修订时,甚至在我们选择完全打开和关闭协作功能时所习惯的流畅、动态的体验。

由于 DOCX 文档中的注释存储在基于XML的文件中,因此可以独立于文档的其他组件手动或以编程方式访问它们。提取后,有用的评论元数据(包括评论文本以及作者姓名、日期等)可以独立于与其关联的原始内容进行分析。虽然这种数据挖掘不一定一次性有用,但随着时间的推移从多个相同类型的文档(例如,周期性报告和备忘录)中积累评论并使用该信息来更好地理解整体内容有一个显着的好处协作过程。由于大量评论元数据随时可用,因此可以应用NLP分析并更好地了解团队对双周备忘录的特定部分的看法。还可以了解在特定主题上进行协作的频率,详细了解谁是最频繁的贡献者等等。

        如果像这样的见解足够令人感兴趣,那么挑战就变成了在相当短的时间内跨多个文档以有组织且有效的方式提取信息。虽然 Open XML 文件可以转换为 .zip 文件并独立提取(或使用C#或 Visual Basic 中记录的代码示例单独访问),但这些方法在很大程度上不切实际,或者范围太有限,无法在较大的文件数组中实用。相反,依靠完全实现的编程解决方案要实用得多,该解决方案以简单、有组织且人类可读的格式提取和返回我们所需的数据。这是专门的文档转换 API 的完美角色。

示范

        在本文的其余部分中,我将演示两个旨在从 DOCX 文件中检索评论文本和评论元数据的 API。通过从页面下方提供的可立即运行的Java代码示例进行复制,可以轻松(免费地使用免费 API 密钥)使用这两种解决方案,并且它们都执行相同基本功能的略有不同的变体。我将在下面简要概述这两种解决方案。

1. 从 DOCX 文档中获取注释作为平面列表

        此 API 返回评论和评论注释,没有任何层次结构显示附加到原始评论的回复子评论。在响应对象中,对原始评论的回复通过IsReply布尔值来区分。请参阅以下 JSON 响应正文示例:

{"Successful": true,"Comments": [{"Path": "string","Author": "string","AuthorInitials": "string","CommentText": "string","CommentDate": "2023-07-27T15:15:44.278Z","IsTopLevel": true,"IsReply": true,"ParentCommentPath": "string","Done": true}],"CommentCount": 0
}

2. 从 DOCX 文档中分层获取注释

        此 API 返回对象中的评论和评论注释,在其关联评论下嵌套回复子评论。这有助于在 API 响应正文中区分回复评论和原始评论之间的关系。请参阅以下 JSON 响应正文示例:

{"Successful": true,"Comments": [{"Path": "string","Author": "string","AuthorInitials": "string","CommentText": "string","CommentDate": "2023-07-27T15:16:28.931Z","ReplyChildComments": [{"Path": "string","Author": "string","AuthorInitials": "string","CommentText": "string","CommentDate": "2023-07-27T15:16:28.931Z","IsTopLevel": true,"IsReply": true,"ParentCommentPath": "string","Done": true}],"Done": true}],"TopLevelCommentCount": 0
}

您可以通过首先安装Maven来开始在 Java 中构建任一 API 调用。在 pom.xml 中添加对存储库的以下引用:

<repositories><repository><id>jitpack.io</id><url>https://jitpack.io</url></repository>
</repositories>

然后,在 pom.xml 中添加对依赖项的引用:

<dependencies>
<dependency><groupId>com.github.Cloudmersive</groupId><artifactId>Cloudmersive.APIClient.Java</artifactId><version>v4.25</version>
</dependency>
</dependencies>

安装完成后,您可以复制以下示例(包括导入类)以平面列表形式检索 DOCX 注释:

// Import classes:
//import com.cloudmersive.client.invoker.ApiClient;
//import com.cloudmersive.client.invoker.ApiException;
//import com.cloudmersive.client.invoker.Configuration;
//import com.cloudmersive.client.invoker.auth.*;
//import com.cloudmersive.client.EditDocumentApi;ApiClient defaultClient = Configuration.getDefaultApiClient();// Configure API key authorization: Apikey
ApiKeyAuth Apikey = (ApiKeyAuth) defaultClient.getAuthentication("Apikey");
Apikey.setApiKey("YOUR API KEY");
// Uncomment the following line to set a prefix for the API key, e.g. "Token" (defaults to null)
//Apikey.setApiKeyPrefix("Token");EditDocumentApi apiInstance = new EditDocumentApi();
GetDocxGetCommentsRequest reqConfig = new GetDocxGetCommentsRequest(); // GetDocxGetCommentsRequest | Document input request
try {GetDocxCommentsResponse result = apiInstance.editDocumentDocxGetComments(reqConfig);System.out.println(result);
} catch (ApiException e) {System.err.println("Exception when calling EditDocumentApi#editDocumentDocxGetComments");e.printStackTrace();
}

您可以复制以下示例(包括导入类)以分层检索 DOCX 注释:

// Import classes:
//import com.cloudmersive.client.invoker.ApiClient;
//import com.cloudmersive.client.invoker.ApiException;
//import com.cloudmersive.client.invoker.Configuration;
//import com.cloudmersive.client.invoker.auth.*;
//import com.cloudmersive.client.EditDocumentApi;ApiClient defaultClient = Configuration.getDefaultApiClient();// Configure API key authorization: Apikey
ApiKeyAuth Apikey = (ApiKeyAuth) defaultClient.getAuthentication("Apikey");
Apikey.setApiKey("YOUR API KEY");
// Uncomment the following line to set a prefix for the API key, e.g. "Token" (defaults to null)
//Apikey.setApiKeyPrefix("Token");EditDocumentApi apiInstance = new EditDocumentApi();
GetDocxGetCommentsHierarchicalRequest reqConfig = new GetDocxGetCommentsHierarchicalRequest(); // GetDocxGetCommentsHierarchicalRequest | Document input request
try {GetDocxCommentsHierarchicalResponse result = apiInstance.editDocumentDocxGetCommentsHierarchical(reqConfig);System.out.println(result);
} catch (ApiException e) {System.err.println("Exception when calling EditDocumentApi#editDocumentDocxGetCommentsHierarchical");e.printStackTrace();
}

现在,您可以轻松地自动检索 DOCX 注释/注释元数据,并将该信息无缝解析到其他应用程序和工作流程中。

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

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

相关文章

拓扑排序--代码

模板 常用代码模板3——搜索与图论 - AcWing 拓扑排序 —— 模板题 AcWing 848. 有向图的拓扑序列 时间复杂度 O(nm), n 表示点数&#xff0c;m 表示边数 bool topsort() {int hh 0, tt -1;// d[i] 存储点i的入度for (int i 1; i < n; i )if (!d[i])q[ tt] i;while…

caj文件怎么转换成pdf?了解一下这种方法

caj文件怎么转换成pdf&#xff1f;如果你曾经遇到过需要将CAJ文件转换成PDF格式的情况&#xff0c;那么你一定知道这是一件麻烦的事情。幸运的是&#xff0c;现在有许多软件和工具可以帮助你完成这项任务。下面就给大家介绍一款使用工具。 【迅捷PDF转换器】是一款功能强大的工…

数据结构----c语言复习

数据结构----c语言复习 一.类型 1.类型的种类 char 1个字节 范围-128~127 short 2个字节 范围-32768~32767 int 4个字节 范围-2147483648~2147483647 long 4个字节 范围-2147483648~2147483647 float 4个字节 有效位为6~7位 float 8个字节 有效位为15~16为 unsigned c…

基于数据库 Sqlite3 的 root 管理系统

1.服务器 1.1服务器函数入口 #include "server.h"int main(int argc, char const *argv[]) {char buf[128] {0};char buf_ID[256] {0};// 接收报错信息判断sqlite3 *db;// 创建员工信息的表格,存在则打开db Sqlite_Create();if (db NULL){printf("sqlite_…

启动RocketMQ报错

说明&#xff1a;启动RocketMQ消费者时&#xff0c;报以下错误&#xff1a;java.lang.IllegalStateException&#xff1a;Failed to start RocketMQ push consumer. 解决&#xff1a;看下所有的监听器类&#xff0c;检查是不是有相同的消费者组名&#xff0c;注释掉其中一个即可…

BI技巧丨利用OFFSET计算同环比

微软最近更新了很多开窗函数&#xff0c;其内部参数对比以往的DAX函数来说&#xff0c;多了很多&#xff0c;这就导致学习的时间成本直线上升。 而且对于新增函数的应用场景&#xff0c;很多小伙伴也是一知半解的&#xff0c;本期我们就来聊一聊关于最近新增的开窗函数——OFF…

Docker网络模型使用详解(2)Docker网络模式

安装Docker时会自动创建3个网络&#xff0c;可以使用docker network ls命令列出这些网络。 [rootlocalhost ~]# docker network ls NETWORK ID NAME DRIVER SCOPE ebcfad6f4255 bridge bridge local b881c67f8813 compose_lnmp_lnmp…

百度云上传身份证获取身份信息封装

1.目录结构 -script_discerm ------------包 -discerm.py --------------主要逻辑 -__init__.py -id_care---------------文件夹 存放图片 2.安装模块 pip install urllib31.23 pip install requests pip install base64 3.各文件内容 2.1 discerm.py import jsonimpo…

介绍Sping Boot的5个扩展点

1、初始化器ApplicationContextInitializer 我们在启动Spring Boot项目的时候&#xff0c;是执行这样一个方法来启动的 我们一层一层往下点&#xff0c;最终发现执行的是这个方法 所以我们在启动项目的时候也可以这样启动 new SpringApplication(SpringbootExtensionPointAp…

无脑入门pytorch系列(二)—— torch.mean

本系列教程适用于没有任何pytorch的同学&#xff08;简单的python语法还是要的&#xff09;&#xff0c;从代码的表层出发挖掘代码的深层含义&#xff0c;理解具体的意思和内涵。pytorch的很多函数看着非常简单&#xff0c;但是其中包含了很多内容&#xff0c;不了解其中的意思…

Kindling the Darkness: A Practical Low-light Image Enhancer论文阅读笔记

这是ACMMM2019的一篇有监督暗图增强的论文&#xff0c;KinD其网络结构如下图所示&#xff1a; 首先是一个分解网络分解出R和L分量&#xff0c;然后有Restoration-Net和Adjustment-Net分别去对R分量和L分量进一步处理&#xff0c;最终将处理好的R分量和L分量融合回去。这倒是很常…

linux-MySQL的数据目录

总结&#xff1a; window中的my.ini linux 中 /etc/my.cnfwindow中的D:\soft\mysql-5.7.35-winx64\data linux 中 /var/lib/mysql 1.查找与mysql有关的目录 find / -name mysql [rootVM-4-6-centos etc]# find / -name mysql /opt/mysql /etc/selinux/targeted/tmp/modul…

ModuleNotFoundError: No module named ‘lsb_release‘

Ubuntu 重装python版本导致的问题 $ lsb_release -a # 使用命令查看报错详情 Traceback (most recent call last):File "/usr/bin/lsb_release", line 25, in <module> # 这个路径很重要import lsb_release ModuleNotFoundError: No module named lsb_re…

Mybatis引出的一系列问题-JDBC 的探究

1 引入对JDBC的理解-1 一般来说&#xff0c;Java应用程序访问数据库的过程是&#xff1a; 装载数据库驱动程序&#xff1b;通过jdbc建立数据库连接&#xff1b;访问数据库&#xff0c;执行sql语句&#xff1b;断开数据库连接。 Public void FindAllUsers(){//1、装载sqlserve…

springboot + shiro 下载文件时浏览器提示“无法下载-没有权限”或“无法下载-没有文件”问题

springboot shiro 下载文件时浏览器提示“无法下载-没有权限”或“无法下载-没有文件”问题 1. 预期效果2. 问题描述3. 问题排查4. 解决方案5. 总结 1. 预期效果 后端编写文件下载接口&#xff0c;前端通过浏览器的下载将文件保存到本地。 2. 问题描述 前后端代码在不同主机…

electron-builder 打包 exe 异常错误集锦

项目技术 vue-electron vue-router vuex vuex-electron element-ui echarts mysql 打包异常 Error: Unresolved node modules: vue Error: Unresolved node modules: vue at D:\Code\Demo\Vue\Voice\App\node_modules\_app-builder-lib20.44.4app-builder-lib\src\…

常用git操作场景实践

常用git操作场景实践 一 提交 查看提交了什么 git show #或者git log -n1 -p 更改提交信息内容 用于已经commit但还未push git commit --amend --only -m xxxxxxx 修改提交的用户名和邮箱 git commit --amend --author "New Authorname <authoremailmydomain.co…

Paleobotany——北美中生代-新生代化石植物总目(Paleobotanical card search)

北美中生代-新生代化石植物总目&#xff08;Paleobotanical card search&#xff09; 总览1. 介绍2. 历史3. 内容 用户手册&#xff08;卡片内容解读&#xff09;示例卡片组成CIC编号的详细解读年代编码解读 卡片检索 总览 了解学习使用由耶鲁皮博迪自然历史博物馆&#xff08…

【贪心算法】leetcode刷题

贪心算法无固定套路。 核心思想&#xff1a;先找局部最优&#xff0c;再扩展到全局最优。 455.分发饼干 两种思路&#xff1a; 1、从大到小。局部最优就是大饼干喂给胃口大的&#xff0c;充分利用饼干尺寸喂饱一个&#xff0c;全局最优就是喂饱尽可能多的小孩。先遍历的胃口&a…

【Lua】Lua包管理器-LuaRocks的使用教程

文章目录 安装luarocks使用luarocks1. 安装模块2. 加载模块其它命令协作开发使用方式 lua的包管理工具是&#xff1a;LuaRocks。本文内容基于MacOS系统。 安装luarocks > cd 你预期的安装目录 > wget https://luarocks.org/releases/luarocks-3.9.2.tar.gz > tar zx…