开源一套Trados Sdlxliff 对比工具
开源一套Trados Sdlxliff 对比工具
在Trados翻译过程中经常对需要进行版本控制和对比,例如对比不同设置下生成的sdlxliff文件,对比不同的机器翻译结果以及对比机器翻译和人工翻译,对比翻译和审校等等。
当然SDL官方也提供了对比工具
https://appstore.rws.com/Plugin/43?tab=releases
但官方的这种是基于TradosAPI的比较笨重,可定制化程度不高,因此还是单独又制作了一个sdlxliff对比工具:
https://github.com/Dark-20001/CompareSdlxliff/
这个和官方工具不同,官方使用Trados内置API来做因此2017,2019,2021,2022各个版本都不一样要下载对应的版本,所以此版本按照xliff文件标准来执行,独立运行,不依赖于Trados.
程序不是XML直接读取sdlxliff,因为sdlxliff会以base64编码形式讲小于25MB的文件编入sdlxliff这部分其实意义不大,所以我跳过这个部分。(sdlxliff这么多年也应该改进一下了,这种基于xml的文件结构经常出现问题,越来越多的软件企业使用zip格式二次封装文件,这样能够将不同独立的组件部分,嵌入部分进行分离,例如docx,xlsx)
string line1 = xlifflines.First();
List<string> base64lines = new List<string>();int s = line1.IndexOf(bmark);if (s != -1)
{string lineb = line1.Substring(s + 29);base64lines.Add(lineb);line1 = line1.Substring(0, s + 29);xlifflinesClean.Add(line1);int cc = 1;for (int i = 1; i < xlifflines.Count; i++){if (xlifflines[i].StartsWith(bmarkStop)){xlifflinesClean.Add(xlifflines[i]);cc = i;break;}else{base64lines.Add((string)xlifflines[i]);}}for (int i = cc+1; i < xlifflines.Count; i++){xlifflinesClean.Add(xlifflines[i]);}}
之后在进行xml解析
doc = XDocument.Parse(String.Join("\r\n", xlifflinesClean));
doc = XDocument.Parse(string.Join("\r\n",xlifflines));
解析之后就是常规操作,提取TranslationUnits和ID
IEnumerable<XElement> transunits = doc.Descendants(XName.Get("trans-unit", xnxliff));
string tuid = transunit.Attribute("id").Value;
由于文件是带有XML命名空间的,这里要提前声明,这样对比Xml.Linq确实方便
string xnsdl = "http://sdl.com/FileTypes/SdlXliff/1.0";
string xnxliff = "urn:oasis:names:tc:xliff:document:1.2";
开两个文件得到两组数据,类型如下
Dictionary<Guid, string> keyValuePairs = new Dictionary<Guid, string>();
然后进行比较,这里没有引入自定义类型,使用Dictionary,效率更高
匹配成功的分别存入paired1,paired2并且ID相同,匹配不上的存入unpaired
这样即使两文件差异较大也能存留记录
Dictionary<Guid, string> keyValuePairs1 = ReadSdlxliff(file1, mtOnly, isTarget);
Dictionary<Guid, string> keyValuePairs2 = ReadSdlxliff(file2, mtOnly, isTarget);Dictionary<Guid, string> paired1 = new Dictionary<Guid, string>();
Dictionary<Guid, string> paired2 = new Dictionary<Guid, string>();
Dictionary<Guid, string> unpaired = new Dictionary<Guid, string>();//match
foreach (KeyValuePair<Guid, string> unit1 in keyValuePairs1)
{IEnumerable<KeyValuePair<Guid,string>> selectedUnits = from unit in keyValuePairs2 where unit.Key == unit1.Key select unit;if (selectedUnits.Count() > 0){paired1.Add(unit1.Key, unit1.Value);paired2.Add(unit1.Key, selectedUnits.First().Value);}else{unpaired.Add(unit1.Key,unit1.Value);}
}
开始比较,使用了异地第三方开源的库,支持按字符和按单词的两种文本比较
public enum ComparisonType
{Words,Characters
}
foreach (KeyValuePair<Guid, string> unit1 in paired1)
{StringBuilder cb = new StringBuilder();List<string> list1 = new List<string>();List<string> list2 = new List<string>();list1.Add(unit1.Value);list2.Add(paired2[unit1.Key]);List<ComparisonTextUnit> comparisonTextUnits = comparer.GetComparisonTextUnits(list1, list2, comparisonType);foreach (ComparisonTextUnit u in comparisonTextUnits){switch (u.ComparisonTextUnitType){case ComparisonTextUnitType.Identical:cb.Append(u.Text);break;case ComparisonTextUnitType.Removed:cb.Append("<span class='removed'>");cb.Append(u.Text);cb.Append("</span>");changeRate.Removed += u.Text.Length;changeRate.RemovedCount++;break;case ComparisonTextUnitType.New:cb.Append("<span class='added'>");cb.Append(u.Text);cb.Append("</span>");changeRate.Added += u.Text.Length;changeRate.AddedCount++;break;default:break;}}}
剩下就是输出报告,并且在比较之前可以增加根据TranslationUnit属性,状态做一些筛选
最后项目地址:
https://github.com/Dark-20001/CompareSdlxliff
相关文章:
![](https://www.ngui.cc/images/no-images.jpg)
开源一套Trados Sdlxliff 对比工具
开源一套Trados Sdlxliff 对比工具 在Trados翻译过程中经常对需要进行版本控制和对比,例如对比不同设置下生成的sdlxliff文件,对比不同的机器翻译结果以及对比机器翻译和人工翻译,对比翻译和审校等等。 当然SDL官方也提供了对比工具 https:…...
![](https://www.ngui.cc/images/no-images.jpg)
百度网盘 url 正则表达式
匹配 https://pan.baidu.com/s/1NmVIJiI2Ot8MkI-vxxNPTg?pwdxxxx https://pan.baidu.com/s/[a-zA-Z0-9\-]*(\?pwd[a-zA-Z0-9]{4})?该正则表达式匹配以 https:// 开头,后面跟着 pan.baidu.com/s/ 或 yun.baidu.com/s/,最后跟着一串由大小写字母、数字…...
![](https://img-blog.csdnimg.cn/direct/251bdaf6877c4270ba1d5e8616da7c94.png)
【stable diffusion】ComfyUI扩展安装以及”127.0.0.1拒绝了我们的连接请求“解决记录
目录 扩展安装”127.0.0.1拒绝了我们的连接请求“解决记录操作1操作2操作3操作4总结扩展安装 虽然大家都推荐将扩展包直接放到extension文件夹的方式,但我还是推荐直接在sd webui的扩展处下载,酱紫比较好维护一点,我个人感觉。 按照上图顺序点击会出现”URLError: <url…...
![](https://img-blog.csdnimg.cn/direct/189c085fd0714ba38c42b688ecaed0c7.png)
OceanBase 列存中多列过滤性能解析
今天有同事问我,列存大宽表场景下,如果在多个列上有等值过滤条件,OceanBase 的性能是不是无法满足要求? Hi 晓楚,帮评估个OTS替换场景 大概1亿大宽表,查询姿势就是任意字段的组合,进行等值查询g…...
![](https://img-blog.csdnimg.cn/direct/1557e8d97a5a45f89ca87087001c1c36.png)
嵌入式实验---实验二 中断功能实验
一、实验目的 1、掌握STM32F103中断程序设计流程; 2、熟悉STM32固件库的基本使用。 二、实验原理 1、在上一章的实验基础上,添加一个按键和一个LED; 2、使用中断的方式实现以下两个功能: (1)KEY1按键…...
![](https://img-blog.csdnimg.cn/direct/c2fd6c8bf90548f1877991aa2a0ac5a1.png)
在 Visual Studio 2022 (Visual C++ 17) 中使用 Visual Leak Detector
在 Visual C 2022 中使用 Visual Leak Detector 1 问题描述1.1 内存泄漏的困扰和解决之道1.2 内存泄漏检测工具的选择1.3 VLD的现状 2 安装和设置VLD的环境变量2.1 安装VLD文件2.2 VLD安装后的目录和文件说明2.2.1 include子目录说明2.2.2 lib子目录说明2.2.2.1 目录整理 2.2.3…...
![](https://img-blog.csdnimg.cn/direct/f8847d23ec02468eb5646bf8a74e0d66.png)
基于IDEA的Maven(properties属性配置)
(property :财产)properties:它的复数。 同样也是基于上篇博客进行学习。(具体的全部项目代码和结构可以去查看上篇...) <properties><!--当前jdk版本 , 这一步可以完全省略--><maven.com…...
![](https://www.ngui.cc/images/no-images.jpg)
边缘计算(Edge Computing)_关键概念/优势/应用场景
边缘计算(Edge Computing)是一种计算范式,它将数据处理和分析从传统的集中式数据中心和云计算平台移至更接近数据生成源头的位置(即“边缘”),例如物联网设备、传感器、路由器或其他边缘设备。边缘计算旨在…...
![](https://www.ngui.cc/images/no-images.jpg)
idea关联gitlab仓库,访问报错
1、登录方式 idea中集成了gitlab的最新版的插件后,登录强制使用token登录,不能使用账号密码登录。 2、版本问题报错 安装了插件后,如果本地部署的gitlab版本低,则直接导致gitlab生成的token也无法登录,操作会报错&am…...
![](https://www.ngui.cc/images/no-images.jpg)
【Hive】new HiveConf()时加载的配置浅析
简单看下源码: org.apache.hadoop.hive.conf.HiveConf HiveConf中有静态代码块,内容就是调用findConfigFile方法,尝试读取hive-default.xml,hive-site.xml,hivemetastore-site.xml,hiveserver2-site.xml。…...
![](https://www.ngui.cc/images/no-images.jpg)
Glide 缓存机制研究及同命名图片的替换回显
背景: 相册-图片后处理场景,需要先展示一张原图,同时后台对图片进行算法优化,完成优化之后无缝替换原图展示,同时保证后续都展示算法优化后的图片 图片加载采用 Glide 库实现 画重点: 相册场景ÿ…...
![](https://img-blog.csdnimg.cn/direct/b42a02ba85e84c3692aa90cc3fcffbe3.gif)
一键简易桌签(带背景)-Word插件-大珩助手
问题整理: 如何Word中设计简易桌签?如何设置带背景图的桌签? Word大珩助手是一款功能丰富的Office Word插件,旨在提高用户在处理文档时的效率。它具有多种实用的功能,能够帮助用户轻松修改、优化和管理Word文件&…...
![](https://www.ngui.cc/images/no-images.jpg)
如何解决centos停止维护后更换Debian11平替?
再有9天时间centos7.x就将停止维护,最近很多人已经再更换系统了!有推荐alibabacloud,opencloud,debian,ubuntu,centos-stream,tencentos,anolis,rockey,almal,oracle,arch,Fedora,opensuse 很多人不知道选什么,这里就主要介绍一下 如果你是使用宝塔面板 并且想要无缝衔…...
![](https://www.ngui.cc/images/no-images.jpg)
服务器雪崩的应对策略之----熔断机制
熔断机制(Circuit Breaker)是一种保护系统稳定性的重要手段。它的主要目的是防止系统在依赖的服务出现问题时,继续发送请求,从而保护系统免受进一步的影响。熔断机制通过监控请求的成功和失败率,在检测到故障率超过预设…...
![](https://img-blog.csdnimg.cn/direct/565b900352ae40808e072ac5ae34801a.png)
RestClient操作索引库和文档
导入依赖: <dependency><groupId>org.elasticsearch.client</groupId><artifactId>elasticsearch-rest-high-level-client</artifactId><version>7.12.1</version></dependency>导入依赖成功之后就可以开始我们的测…...
![](https://img-blog.csdnimg.cn/direct/00f61ec9c5444710af7473b8df5cf467.png)
【设计模式深度剖析】【11】【行为型】【解释器模式】| 以算术表达式求值为例加深理解
👈️上一篇:状态模式 设计模式-专栏👈️ 文章目录 解释器模式定义英文原话直译 解释器模式中的角色1. 抽象表达式(AbstractExpression)2. 终端表达式(TerminalExpression)3. 非终端表达式(Non…...
![](https://img-blog.csdnimg.cn/direct/3d1d9931a5574c18856fefc7646c6a8c.png)
MySQL8,Navicat能登陆成功,密码却忘记了
执行成功的图: 以下为步骤:本文一共8个简单步骤。 环境:mysql8、window10、navicat11 1、打开本地电脑window10的命令窗(俗称黑窗口),windowR 2、输入regegit,回车,打开注册表 3、…...
![](https://www.ngui.cc/images/no-images.jpg)
游戏中的寻路算法研究
1)Unity NavMesh研究 思考:毫无疑问,unity中自带的navmesh寻路是比较健全的,无奈在服务器中无法使用,这样子我们没办法做怪的导航,但是可以先体验下都有哪些api,并且可以可视化的看效果。 1)打开导航网格…...
![](https://img-blog.csdnimg.cn/direct/c2c06ac8190f4e5b8eb3517a88803099.gif#pic_center)
【AWS SMB】关于AWS 中小型企业 (SMB) 能力介绍及注意事项
文章目录 前言一、什么是 SMB?📢二、如何识别中小企业的需求三、中小企业营销活动的类型四、AWS 合作伙伴可获得的其他 AWS 机会4.1 AWS IQ4.2 APN 客户参与 (ACE) 计划 前言 AWS 中小型企业 (SMB) 能力合作伙伴专注于帮助中小型…...
![](https://www.ngui.cc/images/no-images.jpg)
中年之恋:重返青春的旅程
第一章:重逢 在一个普通的周末,李明参加了一次由老同学组织的聚会,尽管他对此并不抱有太大的兴趣,但出于礼貌还是选择了出席。聚会在一家风格复古的咖啡馆里举行,暖黄色的灯光与木质的装饰让人不自觉地放缓了脚步。在…...
![](https://img-blog.csdnimg.cn/direct/0a44ec240f64454bbf7735fb34d85d89.png)
人工智能中的监督学习和无监督学习
欢迎来到 Papicatch的博客 目录 🍉引言 🍉监督学习 🍈基本思想 🍈具体过程 🍍数据收集 🍍数据预处理 🍍模型选择 🍍模型训练 🍍模型评估 🍍模型部署…...
![](https://www.ngui.cc/images/no-images.jpg)
深度学习500问——Chapter12:网络搭建及训练(1)
文章目录 12.1 TensorFlow 12.1.1 TensorFlow 是什么 12.1.2 TensorFlow的设计理念是什么 12.1.3 TensorFlow特点有哪些 12.1.4 TensorFlow的系统架构是怎样的 12.1.5 TensorFlow编程模型是怎样的 12.1.6 如何基于TensorFlow搭建VGG16 12.1 TensorFlow 12.1.1 TensorFlow 是什…...
![](https://www.ngui.cc/images/no-images.jpg)
HuggingFace CLI 命令全面指南
文章目录 安装与认证1.1 安装 HuggingFace Hub 库使用 pip 安装使用 conda 安装验证安装 1.2 认证与登录生成访问令牌使用访问令牌登录环境变量认证验证认证 下载文件2.1 下载单个文件安装 huggingface_hub 库认证与登录下载单个文件 2.2 下载特定版本的文件下载特定版本的文件…...
![](https://img-blog.csdnimg.cn/direct/83f26270af4a40358a44882a20b1a54d.png)
FreeRTOS源码分析
目录 1、FreeRTOS目录结构 2、核心文件 3、移植时涉及的文件 4、头文件相关 4.1 头文件目录 4.2 头文件 5、内存管理 6、入口函数 7、数据类型和编程规范 7.1 数据类型 7.2 变量名 7.3 函数名 7.4 宏的名 1、FreeRTOS目录结构 使用 STM32CubeMX 创建的 FreeRTOS 工…...
![](https://www.ngui.cc/images/no-images.jpg)
python实战:将视频内容上传到社交媒体平台
在Python中,上传视频到不同的平台可能需要使用不同的API和库。以下是一些常见的平台以及如何使用Python进行上传的示例: YouTube: 使用Google提供的YouTube Data API。 首先,你需要从Google Cloud控制台获取API密钥,并安装google-…...
![](https://img-blog.csdnimg.cn/direct/baa4269bc95848fd9382d8127c60a2df.png)
【深度学习】sdwebui A1111 加速方案对比,xformers vs Flash Attention 2
文章目录 资料支撑资料结论sdwebui A1111 速度对比测试sdxlxformers 用contorlnet sdxlsdpa(--opt-sdp-no-mem-attention) 用contorlnet sdxlsdpa(--opt-sdp-attention) 用contorlnet sdxl不用xformers或者sdpa ,用contorlnet sdxl不用xformers或者sdpa …...
![](https://www.ngui.cc/images/no-images.jpg)
5分钟了解单元测试
🍅 视频学习:文末有免费的配套视频可观看 🍅 点击文末小卡片 ,免费获取软件测试全套资料,资料在手,涨薪更快 一、什么是单元测试? 单元测试是指,对软件中的最小可测试单元在与程序其…...
![](https://img-blog.csdnimg.cn/direct/313e026086bf4352a42ae33256dfc111.png)
VSCode之C/C++插件之宏定义导致颜色变暗
这是因为该宏没有定义或者定义在makefile文件中导致无法被插件识别到,导致误判了 索性将该机制去了,显示也会好看些,如下将C_Cpp下的Dim Inactive Regions勾去了 显示效果会好很多。...
![](https://img-blog.csdnimg.cn/direct/3363c049d8bb47e6b1918c7d3d01fcaf.png)
自然语言处理概述
目录 1.概述 2.背景 3.作用 4.优缺点 4.1.优点 4.2.缺点 5.应用场景 5.1.十个应用场景 5.2.文本分类 5.2.1.一般流程 5.2.2.示例 6.使用示例 7.总结 1.概述 自然语言处理(NLP)是计算机科学、人工智能和语言学的交叉领域,旨在实…...
![](https://www.ngui.cc/images/no-images.jpg)
用Rust和Pingora轻松构建超越Nginx的高效负载均衡器
目录 什么是Pingora?实现过程 初始化项目编写负载均衡器代码代码解析部署 总结 1. 什么是Pingora? Pingora 是一个高性能的 Rust 库,用于构建可负载均衡器的代理服务器,它的诞生是为了弥补 Nginx 存在的缺陷。 Pingora 提供了…...
![](/images/no-images.jpg)
做门窗投标网站/秦皇岛百度推广
国家示范性高职院校名单(109所) http://www.sina.com.cn 2011年07月15日 10:52 新浪教育 新浪教育讯 2006年11月,为了提升高职院校的办学水平,教育部启动了被称为“高职211”的“百所示范性高等职业院校建设工程”。根据规划,“十一五”期间…...
![](/images/no-images.jpg)
wordpress不安装先写前端/南宁白帽seo技术
一个经常会被问到的问题: 为什么不在 created 里去发ajax?created 可是比 mounted 更早调用啊,更早调用意味着更早返回结果,那样性能不是更高? 首先,一个组件的 created 比 mounted 也早调用不了几微秒&a…...
![](/images/no-images.jpg)
帮别人做网站多少钱/网络营销方案的制定
总体的感觉:在家打比赛的感觉真的不如有人看着。 水了俩小时码完代码后,就没心情继续码下去了,感觉前三题都是纯知识点,掌握得熟练便能轻松拿下。就是T4还有点考验思维,但推了个式子,码了一下,就…...
![](https://img-blog.csdnimg.cn/d0a29d9f09384fd5b6c620683a1e74af.png)
wordpress 隐藏顶部/seo公司运营
整个项目包含了:开题报告 开题报告PPT 任务书 中期报告 论文模板 答辩PPT等 项目源码 主要安介绍了系统在开发过程中所应用到的一些关键的技术 主要python技术介绍;框架Django概要;MySQL数据库知识; 以及常规的网页技术HTM…...
平面设计相关的网站有哪些内容/网站seo推广排名
在上一篇《一个极简、高效的秒杀系统(战略设计篇)》中,楼主重点讲解了基于Redis Lua脚本的秒杀系统设计方案,如果没看过的同学,请花十分钟复习下。在这一篇中,楼主会结合代码,来探讨如何将设计…...
帮一个公司做网站多少钱/超级优化
目前,信息流短视频排序是基于CTR预估Wide&Deep深层模型。在Wide&Deep模型基础上做一系列相关优化,包括相关性与体感信号引入、多场景样本融合、多模态学习、树模型等,均取得不错收益。 总体上,短视频模型优化可分为两部分…...