查看原文
其他

如何给基于BiCorpus的平行语料库新增语种

韩林涛 简言
2024-09-09

前言


什么是BiCorpus?


BiCorpus是一款开源语言资产管理平台,一个可用于搭建在线平行句库的开源工具,想了解更多信息请前往:


BiCorpus:一款开源语言资产管理平台,让每一位译者拥有自己的在线语料库


如何将BiCorpus安装在个人域名下


在BiCorpus开源后,好几所学校在翻译技术课上开始使用,我怎么知道的呢,因为小朋友们加了我“助教”(CodeSlator)的微信,告诉我老师给他们布置了作业,让他们搭建自己的平行语料库。


不过也正是这些小朋友“肆无忌惮”的问题,我才发现了一些小bug,陆续也修复了几个。


今天这篇帖子想具体说一下如何给基于BiCorpus的平行语料库新增语种。


正文


一、BiCorpus能支持多少个语种?


在BiCorpus发布后,我经常遇到的一个问题是:能支持***语吗?


BiCorpus自然是可以支持这些语种的,而且可以说,我目前还没有遇到不支持的语种需求。但是目前发布的这个BiCorpus版本仅支持一些语种对,在这个文件中可以看到:


upload_file.php



在BiCorpus的上传页面也可以看到所有语言对:



之所以支持这些语种,是因为当时在做BiCovid.org这个网站的时候主要是需要这些语种,所以也就只设置了这么一些。


二、什么是语言标签?


新增一个语种就需要增加至少两个语言对,而且这个语言对怎么添加还要看对齐软件导出的TMX格式文件支持的语言代码是什么。


如果去查看TMX标准的官方介绍:


https://www.gala-global.org/tmx-14b


会看到这样的描述:


“TMX is XML-compliant. It also uses various ISO standards for date/time, language codes, and country  codes.”


大家如果不了解tmx,可以看我写的这篇帖子和里面的视频:


读懂翻译记忆库文件(TMX)所需的XML和DTD基础知识


这段话里提及的“ISO standards”是主要指ISO 639语种代码标准,链接在此:


https://www.loc.gov/standards/iso639-2/langhome.html


点击打开后会看到一个Code List:


https://www.loc.gov/standards/iso639-2/php/code_list.php



如果想找中文的代码,就去找Chinese:




对比上图知道,ISO 639标准有“两个版本”:ISO 639-1、ISO 639-2,而且明显看出ISO 639-2覆盖的语种更多。


ISO 639-1 是两个字母的语种名称代码标准,所以第二列的“zh”有两个字母,“zh”是汉语拼音“zhongwen”的前两个字母。


ISO 639-2是三个字母的语种名称代码标准,所以第一列的“chi”和“zho”都是三个字母。“chi”是“chinese”的前三个字母,“zho”是“zhongwen”的前三个字母。


严格来说他们不是“两个版本”,而是两个部分。ISO 639-1是第一部分,能覆盖主要使用的语种;ISO 639-2是第二部分,涉及的语种更多。随着语种的增多和人们对语言划分的新认识,ISO 639还在不断扩展。


需要特别说明的是,“语言代码”(也称“语种代码”)与“国家和地区代码”是不同的。ISO还有专门的ISO 3166国家和地区代码标准,而且这个国家和地区代码标准也分两个字母版和三个字母版的,还有数字版的。


比如中国的:




中国台湾的:



因此,如果我们想表示中国大陆地区使用的简体中文,就可以把语言代码与国家和地区代码拼在一起:


zh-CN


但华语区文字有很多,涉及到的编码就有



来源:

http://www.i18nguy.com/unicode/language-identifiers.html


这种把语言代码与国家和地区代码拼在一起生成的代码称为“语言标签”(Language Identifiers),定义这些标签的组织叫“互联网工程任务组”(IETF, Internet Engineering Task Force)。这个组织发布过RFC 3066、RFC 4646、RFC 5646等几个主要的语言标签规范,而TMX翻译记忆交换标准使用的是RFC 3066。


正是因为互联网工程任务组不断在发布新的语言标签规范,而TMX标准又是相对来说比较老的标准,所以会出现不同对齐工具导出的.tmx格式文件中的语言标签是不一样的。


为了防止出现因为语言标签不一致而导致的语料无法发布的问题,基于BiCorpus搭建平行句库时优先使用Abbyy Aligner和Tmxmall Aligner作为对齐工具。


当你准备向BiCorpus新增一个语种时,先用这俩工具对齐一下试试,看看导出来的文件中语言标签究竟是什么,然后再按照本文后续的步骤来操作。


三、如何在BiCorpus中新增一个语种?


若想新增一个语种,需要在源代码中修改以下文件:


check_file.php


在check_file.php的第200行作业可以看到目前代码支持的最后一个语言对:



每新增一个语种就要新增两个语言对,如上图:


比如我现在准备新增“葡萄牙语”,然后去Tmxmall中试着对齐一个中葡的文本,点击“导出”:


在右上角可以看到,葡语的语言标签是:pt-PT,所以我就可以向源代码中添加以下代码:


case "19":    $source = "zh-CN";    $target = "pt-PT";    break;
case "20": $source = "pt-PT"; $target = "zh-CN"; break;  


这段代码修改完成后,在前往check.php:


check.php



在上图的60行以后新增:


<option value='19'>中葡</option><option value='20'>葡中</option>


这样BiCorpus就可以在检查语料文件的功能中正常上传中葡和葡中的语料,检查是否有漏的或者长度异常的句子。


upload_file.php


在这个文件的167行之后添加相似的代码:



case "19": $source = "zh-CN"; $target = "pt-PT"; break;
case "20": $source = "pt-PT"; $target = "zh-CN"; break;

upload.php



在上图的68行后新增:


<option value='19'>中葡</option><option value='20'>葡中</option>


添加完成后,就可以在上传页面正常选择上传中葡和葡中的语料了:



四、如何为BiCorpus添加单独的语种检索页面?


如果你安装了BiCorpus,会发现主页只有英语和日语两个语种的检索页面:




BiCorpus是默认在主页检索全部语种的,但是如果你想为一个语种单独做一个检索页面,那么还需要在源代码中作以下修改:


前往源代码根目录找到名为“en”的文件夹:



将这个文件夹复制一份,将名字改为你新增的语种的语言代码,如“pt”:


然后打开其中的“strings.php”文件:


<?php
$code = "EN"; // 网页logo中BiCorpus的后缀$lang = "en-US"; //查询数据时所用的语言编号$folder = "en"; //文件夹名
?>


将上面的代码改为:


<?php
$code = "PT"; // 网页logo中BiCorpus的后缀$lang = "pt-PT"; //查询数据时所用的语言编号$folder = "pt"; //文件夹名
?>


接下来前往根目录下的“shared/public_navbar.php”文件,查看第11行后的代码:



在上图17行后新增一行:


<li><a href="pt">葡萄牙语</a></li>


这个时候再打开主页:



大家就能看到葡萄牙语的入口了,点击进入后Logo处也会多一个“PT”标签:


四、结语


以上就是给基于BiCorpus的平行语料库新增语种的具体步骤。很多朋友肯定没有看完就关掉了这个页面,因为并不是每一个人都有这个具体的需求。


其实我在开源BiCorpus之初并没有想过要把它变成一个傻瓜式的程序,因为我想将其作为一个像“树莓派”一样的基础框架,然后依托这个框架让更多对多语言网站开发感兴趣的译者知道一个网站是如何支持多语种检索的,未来还会告诉大家如果让界面上的文字也能切换多种语言,进而像这篇帖子前部分介绍语言标签那样,通过自己动手操作了解本地化和国际化的一些基本知识。


坦率讲,这些都是我自学的,正是因为对多语言网站实现的方法有了兴趣,才会愿意通过代码去实现一些功能,这个过程是最让人陶醉的。


我想让大家也能体会这种趣味。

修改于
继续滑动看下一个
简言
向上滑动看下一个

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存