DevExpress Office File API教程 - 如何使用AI服务增强Word文档可访问性和语言支持?

news2024/12/28 8:55:42

DevExpress Office File API是一个专为C#, VB.NET 和 ASP.NET等开发人员提供的非可视化.NET库。有了这个库,不用安装Microsoft Office,就可以完全自动处理Excel、Word等文档。开发人员使用一个非常易于操作的API就可以生成XLS, XLSx, DOC, DOCx, RTF, CSV 和 Snap Report等企业级文件。

在之前两篇与AI相关的博客中,我们了解了如何使用DevExpress Office File API库和Azure AI OpenAI服务为Word和Excel文档中使用的图像、图表和超链接生成可访问的描述:

  1. DevExpress Office File API中文教程 - 如何用OpenAI模型增强Office文档可访问性?
  2. 界面组件DevExpress Office File API - 如何用OpenAI增强文档可访问性?

在这篇文章中,我们将详细介绍另一个易于访问的文档生成重要技巧——在多语言的Word文档中检测和设置段落的校对语言。此外,我们还将描述如何翻译多语言文档,以及如何生成可访问的注释,并将段落翻译为所选语言。

获取DevExpress v24.1正式版下载(Q技术交流:532598169)

在生成可访问的Word文档(特别是多语言文档)时,必须指定证明语言并为文本段落添加翻译,这有几个原因。语言设置帮助屏幕阅读器解释和发音文本,辅助功能和工具(如拼写/语法检查器)依赖于这些设置来提供准确的建议和更正。在将Word文档导出为可访问的PDF格式时,语言设置也很重要。带有段落翻译的注释有助于增加文档内容的清晰度,有助于文档的可访问性,并增强多语言环境中的协作。

为了满足这些特殊需求,我们将使用DevExpress Word Processing Document和两个Azure人工智能服务——语言和翻译。请在GitHub上的示例项目中查看这些功能的新端点:Office File API – Integrate AI。

在将此解决方案合并到您的应用程序之前,请务必阅读并理解Azure AI服务的使用条款和条件。

实现细节
使用Azure AI语言API

Azure AI语言服务需要Azure订阅,订阅后,在Azure门户网站中创建语言资源来获取密钥和端点。

注意:您可以创建多服务资源来访问具有相同密钥和端点的多个AI服务。

安装Azure.AI.TextAnalytics NuGet包到您的项目中,使用语言服务API进行文本语言检测。下面的代码片段对TextAnalyticsClient进行身份验证,向服务发送文本,服务返回有关检测到的语言的信息。对于这个实现,我们只需要“ISO 693-1”格式的语言名称。

public class AzureAILanguageHelper
{
private TextAnalyticsClient client;
internal AzureAILanguageHelper(string key, Uri endpoint)
{
AzureKeyCredential azureCredential = new AzureKeyCredential(key);
client = new TextAnalyticsClient(endpoint, azureCredential);
}
internal async Task<string> DetectTextLanguage(string text)
{
DetectedLanguage detectedLanguage = await client.DetectLanguageAsync(text);
return detectedLanguage.Iso6391Name.Replace('_', '-');
}
}
使用Azure AI Translator API

就像语言服务一样,Azure AI Translator也需要Azure订阅,您需要在Azure门户网站中创建Translator资源(或使用多服务资源)。

安装Azure.AI.Translation.Text NuGet包到您的项目中,并验证TextTranslationClient。

注意:如果使用Azure AI多服务或区域转换器资源,必须指定“region”参数用于客户端身份验证。

下面的代码片段发送文本/目标语言名称(采用“ISO 693-1”格式),并获得翻译后的内容作为响应。

public class AzureAITranslationHelper
{
TextTranslationClient client;
internal AzureAITranslationHelper(string key, Uri endpoint, string region = "global")
{
AzureKeyCredential azureCredential = new AzureKeyCredential(key);
client = new TextTranslationClient(azureCredential, endpoint, region);
}
internal async Task<string> TranslateText(string text, string sourceLanguage, string targetLanguage)
{
Response<IReadOnlyList<TranslatedTextItem>> response = await client.TranslateAsync(targetLanguage, text, sourceLanguage);
TranslatedTextItem translatedTextItem = response.Value.First();
return translatedTextItem.Translations[0].Text;
}
}
实现Word Processing Document API API端点

要在DevExpress驱动的Word Processing Document API应用程序中使用上面的API,请在RichEditDocumentServer实例中加载文档,并遍历Document.Paragraphs集合。使用Document.GetText方法获取段落文本,使用Document.BeginUpdateCharacters 方法访问段落字符属性。检查段落文本和字符设置 - 如果段落文本不为空并且语言设置(CharacterProperties.Language)未指定,则调用azureaillanguagehelper。DetectTextLanguage方法检测段落语言。完成后,将检测到的语言作为CultureInfo对象分配给CharacterProperties.Language属性,并使用Document.EndUpdateCharacters方法完成段落编辑。如果检测到的语言不同于默认文档语言(在当前示例中,我们假设默认语言是英语),则使用AzureAITranslationHelper.TranslateText方法将段落文本翻译为所需的语言。此时,您可以向当前段落添加注释,并在该注释中插入翻译后的文本。

public async Task<IActionResult> GenerateLanguageSettingsForParagraphs
(IFormFile documentWithHyperlinks,
[FromQuery] RichEditFormat outputFormat) {
try {
var languageHelper =
new AzureAILanguageHelper(languageAzureKey, languageEndPoint);
var translationHelper =
new AzureAITranslationHelper(translationAzureKey, translationEndPoint);
using (var server = new RichEditDocumentServer())
{
await RichEditHelper.LoadFile(server, documentWithHyperlinks);
server.IterateSubDocuments(async (document) =>
{
foreach (var paragraph in document.Paragraphs)
{
CharacterProperties cp =
document.BeginUpdateCharacters(paragraph.Range);
string paragraphText =
document.GetText(paragraph.Range);
if (cp.Language.Value.Latin ==
null && !string.IsNullOrWhiteSpace(paragraphText))
{
CultureInfo? culture = null;
string language =
languageHelper.DetectTextLanguage(paragraphText).Result;
try { culture = new CultureInfo((language)); }
catch { }
finally
{
if (culture != null)
{
// Set the paragraph language
cp.Language =
new DevExpress.XtraRichEdit.Model.LangInfo(culture, null, null);
if (language != "en")
{
// Generate an accessible comment with the paragraph translation
Comment comment =
document.Comments.Create(paragraph.Range, "Translator");
SubDocument commentDoc = comment.BeginUpdate();
string translatedText =
translationHelper.TranslateText(paragraphText, language, "en").Result;
commentDoc.InsertText(commentDoc.Range.Start,
$"Detected Language: {language}\r\nTranslation (en): {translatedText}");
comment.EndUpdate(commentDoc);
}
}
}
}
document.EndUpdateCharacters(cp);
}
});
Stream result =
RichEditHelper.SaveDocument(server, outputFormat);
string contentType =
RichEditHelper.GetContentType(outputFormat);
string outputStringFormat =
outputFormat.ToString().ToLower();
return File(result, contentType, $"result.{outputStringFormat}");
}
}
catch (Exception e)
{
return StatusCode(500, e.Message + Environment.NewLine + e.StackTrace);
}
}
检查输出

输出的Word文件将包括每个非空文档段落的语言设置(可在Language对话框中查看),以及每个非英语文本段落的相应翻译注释。

DevExpress Office File API教程 - 如何使用AI服务增强Word文档可访问性和语言支持?

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

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

相关文章

不会还有人没有用过git rebase合并分支吧?一文详解git merge与git rebase区别

文章目录 什么是git merge&#xff1f;使用git merge的场景git merge的示例 什么是git rebase&#xff1f;使用git rebase的场景git rebase的示例 git merge与git rebase的区别如何选择git merge和git rebase&#xff1f;结论 &#x1f389;欢迎来到Java学习路线专栏~探索Java中…

技术流 | 运维平台大型“生产事故”录播和实战重现

【本文作者&#xff1a;擎创科技 资深专家禹鼎侯】 本文写于2021年&#xff0c;最近重读觉得特别有现场感。这也是运维人面对生产环境时遇到的各种惊心动魄的事件之一。惊险&#xff0c;但又顺利解决。是最好的结果。 事情是酱紫的。 那天上午&#xff0c;轻轻松松完成了一个新…

自媒体内容创作者必备:ChatGPT助你提升文章质量

随着自媒体的迅猛发展&#xff0c;越来越多的人加入到内容创作的行列。然而&#xff0c;要在这个竞争激烈的领域脱颖而出&#xff0c;不仅需要创意和独特的观点&#xff0c;更需要高质量的文章内容。在这方面&#xff0c;ChatGPT作为一个智能写作助手&#xff0c;能够帮助自媒体…

第三届仿真模拟、电子信息科学与技术国际学术会议(SMEI 2024,8月02-04)

随着仿真模拟技术的成熟和进步&#xff0c;仿真模拟技术越来越广泛地应用于工业工程、管理科学、社会经济、交通运输、生态环境、军事装备等各个科学领域&#xff0c;并深刻影响着信息技术和信息产业的发展。围绕仿真模拟、电子信息科学与技术等方面内容&#xff0c;为更好地促…

昇思25天学习打卡营第4天|MindSpore快速入门-FCN图像语义分割

FCN图像语义分割 全卷积网络&#xff08;Fully Convolutional Networks&#xff0c;FCN&#xff09;是UC Berkeley的Jonathan Long等人于2015年在Fully Convolutional Networks for Semantic Segmentation[1]一文中提出的用于图像语义分割的一种框架。 FCN是首个端到端&#…

SAP 自动登录

文章目录 前言一、程序介绍/笔者需求二、程序原理介绍 a.基本原理 b.为什么不设置界面&#xff1f; c.为什么用户信息不走配置文件&#xff1f; d.注意事项 三、如何使用 a.下载程序 b.配置并执行登录 …

大模型笔记1: Longformer环境配置

论文: https://arxiv.org/abs/2004.05150 首先保证电脑上配置了git. git环境配置: https://blog.csdn.net/Andone_hsx/article/details/87937329 3.1、找到git安装路径中bin的位置&#xff0c;如&#xff1a;D:\Program Files\Git\bin 找到git安装路径中git-core的…

收银系统源码-开源收银系统-私有化独立部署

千呼新零售2.0-支持OEM私有化独立部署和全开源源码 千呼新零售2.0-支持OEM私有化独立部署和全开源源码 千呼新零售2.0-支持OEM私有化独立部署和全开源源码 千呼新零售2.0-支持OEM私有化独立部署和全开源源码 如需了解请私信交流

Java知识点整理 14 — MyBatisX代码生成器

在后端开发过程中大多数的工作都是在重复编写各种CRUD&#xff08;增删改查&#xff09;代码&#xff0c;费时费力。 所以要灵活运用各类现成的代码生成器&#xff0c;协助我们自动生成常用的增删改查代码&#xff0c;而无需自己重复编写&#xff0c;从而大幅提升开发效率。 …

【系统架构设计师】六、信息系统基础知识(电子政务|企业信息化|电子商务|信息化战略体系)

目录 一、电子政务EG 1.1 电子政务的内容 1.2 电子政务的主要特征 二、企业信息化EI 2.1 企业信息化实现 2.2 企业信息化方法 三、电子商务EC 四、信息化战略体系 五、客户关系CRM 5.1 CRM的功能 5.2 CRM解决方案具备的要素 5.3 CRM的实现过程 六、供应链管理SCM 七…

TEMU半托管模式引领跨境电商新风尚

TEMU半托管模式作为2024年的热门话题&#xff0c;正吸引着越来越多卖家的目光。继全托管模式取得巨大成功之后&#xff0c;半托管模式的推出无疑为跨境电商行业注入了新的活力。 在选品方向上&#xff0c;TEMU半托管模式强调商品的聚焦与精选。卖家在选择上架商品时&#xff0c…

404 Not Found(nginx)

#vue-router history 配置location / {add_header Access-Control-Allow-Origin *;add_header Access-Control-Allow-Headers *;add_header Cross-Origin-Embedder-Policy require-corp;add_header Cross-Origin-Opener-Policy same-origin;try_files $uri $uri/ router;index …

鸿蒙 HarmonyOS NEXT星河版APP应用开发-阶段一

一、鸿蒙开发环境搭建 DevEco Studio安装 下载 访问官网&#xff1a;https://developer.huawei.com/consumer/cn/deveco-studio/选择操作系统版本后并注册登录华为账号既可下载安装包 安装 建议&#xff1a;软件和依赖安装目录不要使用中文字符软件安装包下载完成后&#xff0…

Java网络编程(JavaWeb的基础)

Java网络编程&#xff08;JavaWeb的基础&#xff09; 文章目录 Java网络编程&#xff08;JavaWeb的基础&#xff09;前言一、网络编程概述1.1 软件架构&网络基础1.2 网络通信要素:IP/端口/通信协议1.3 传输层协议:tcp/udp 二、网络编程API2.1 InetAddress类2.2 Socket类&am…

收银系统开源源码-千呼新零售2.0【打折促销】

千呼新零售2.0系统是零售行业连锁店一体化收银系统&#xff0c;包括线下收银线上商城连锁店管理ERP管理商品管理供应商管理会员营销等功能为一体&#xff0c;线上线下数据全部打通。 适用于商超、便利店、水果、生鲜、母婴、服装、零食、百货、宠物等连锁店使用。 详细介绍请…

操作系统——考研笔记(一)操作系统概述

目录 操作系统引言一、 操作系统概述1.1 操作系统的功能和目标1.2 操作系统的特征1.2.1 并发1.2.2 共享1.2.3 并发和共享的关系1.2.4 虚拟1.2.5 异步1.2.6 知识回顾与重要考点 1.3 操作系统的发展与分类1.3.1 手工操作阶段1.3.2 批处理阶段——单道批处理系统1.3.3 批处理阶段—…

2024年最佳软件测试工具40强清单(非常详细)零基础入门到精通,收藏这一篇就够了

什么是测试工具 软件测试工具是指那些支持从计划、需求收集、构建创建、测试执行、缺陷记录到测试分析等各种测试活动的产品。这些工具主要用于检测软件的稳定性、彻底性以及其他性能参数。 市场上有大量的软件测试工具&#xff0c;众多选择使得难以确定最适合你项目的测试工…

项目开发 TCP-Socket连接功能实现(Android端)

前段时间在公司做项目的时候遇到了一个功能需要使用TCP-Socket连接硬件设备进行通信&#xff0c;查了很多资料也只是关于HTTP-Socket相关的&#xff0c;没法满足项目的要求&#xff0c;后来查到一个相关的插件&#xff0c;现在有时间和大家分享一下。 项目简单介绍&#xff1a…

python AI全栈工程师

python AI全栈工程师 前端&#xff1a;Streamlit Streamlit是一个开源的Python库&#xff0c;专为数据科学家和机器学习工程师设计&#xff0c;用于快速构建交互式用户界面。Streamlit功能强大、易于使用&#xff0c;特别适合数据科学家和机器学习工程师快速构建和部署交互式数…

状态机模型——AcWing 1057. 股票买卖 IV

状态机模型 定义 动态规划中的算法状态机模型是一种用于描述算法执行过程中状态变化的模型。它由状态、事件、动作和转移组成。状态表示算法在某个时刻所处的情况&#xff0c;事件是导致状态发生变化的原因&#xff0c;动作是在状态变化时执行的操作&#xff0c;转移则定义了…