VNR共享辞书中翻译的转码和代理

源地址:http://sakuradite.com/topic/724

优先进入官网看,官网不行再观看本文

坏掉的功能



由于共享辞书的变更,部分以前的功能变得不那么好用了。

[[N]]重命名为[[m]]

在前缀、后缀中使用的[[N]],现在改为用[[m]]了。带来不便很抱歉!

边界+姓名+后缀

当姓名打开边界后,将可能无法正常的与后缀匹配。

比如,如果定义了两个词条:

姓名:悠真 => 悠真

后缀:兄 => 哥哥

那么一旦对姓名或者后缀打开词条边界的选项,那么VNR将不能在翻译"悠真兄"了。

翻译的解码



VNR改为使用和VTrans相同的SynCFG的来处理词条。

共享辞书中所有翻译、姓名、前缀、后缀、读法的词条都会被编译为SynCFG的语法。下边是一些SynCFG语法的例子:

翻译:こんにちは => 你好

SynCFG: x ||| こんにちは ||| 你好

姓名:ゆい => 由依

SynCFG: m ||| ゆい ||| 由依

后缀:ちゃん => 酱

SynCFG: m ||| [[m]]ちゃん ||| [[m]]酱

这里以最后一个SynCFG为例。它为【ちゃん】定义了翻译,并且这个翻译只有在姓名(m)后出现时,才会被应用。而应用了词条后的结果,仍然属于姓名(m)。

总的来说,SynCFG的语法如下。这个语法在VNR正在Cache里生成的词条的文件中是可以观察到的。

LHS_Role ||| RHS_Source ||| RHS_Target ||| Features

Role的集合

比如,可以用[[m,n]]来匹配任何m(姓名)和n(noun)的集合。

多个Roles

在一个规则里,是可以定义多个Role的。

比方说,下边的规则可以用来翻译:ゆいちゃんを殺す

m ||| ゆい ||| 由依

m ||| [[m]]ちゃん ||| [[m]]酱

v ||| 殺す ||| 杀死

x ||| [[m]]を[[v]] || [[v]] [[m]]

要注意的是,当使用多个相同的role在一个规则里时,一定要加上数字编号。比如:

x ||| [[x#1]][[x#2]] || [[x#1]][[x#2]]

这条规则可以将相邻的两个位置的phrasae合并为一个。

另外,数字编号并不要求是连续增加的。比如下边的规则和上边的那个是一样的。

x ||| [[x#10]][[x#5]] || [[x#10]][[x#5]]

再比如,下边的规则都是等价的:

x ||| [[m,n]]を[[v]] ||| [[v]] [[m,n]]

x ||| [[m,n#1]]を[[v#2]] ||| [[v#2]] [[m,n#1]]

x ||| [[m,n#1]]を[[v#2]] ||| [[#2]] [[#1]]

x ||| [[m,n#1]]を[[v]] ||| [[v]] [[#1]]

另外当role只有一个时,翻译中的role的表达式是可以省略的。比如下边的规则都是等价的:

adj ||| [[m,n]]の ||| [[m,n]]的

adj ||| [[m,n#1]]の => [[m,n#1]]的

adj ||| [[m,n#1]]の => [[#1]]的

adj ||| [[m,n#1]]の => [[]]的

adj ||| [[m,n]]の => [[]]的

自定义Role

我建议大家用n来代表名词,v代表动词,x代表未知词组,m代表姓名。

如果大家需要自定义Role,可以使用[_a-yA-Y0-9]中的字母任意搭配,比如可以用adj来代表形容词。

基本和C等变成语言中的变量名字是一样的,但是要注意:

    不要用字母Z。VNR内部保留Z做别的拥堵。自定义的role请用至少两个字母表示。单个的字母还是保留给VNR以后可能的用途吧。

与正则表达交织

当SynCFG的Role出现在匹配文本中时,由于技术困难,正则表达不可以出现named group,比如下边这样的表达式是不可以出现的:

(A|BC|D) [[x]]

如果需要使用或的关系,可以使用unnamed group,比如下边:

(?:A|BC|D) [[x]]

翻译的代理



添加了新的代理词条,可以用来定义编码特定翻译Role的方法。

比方说:如果为m(姓名)定义了"佐藤=>佐藤"的词条。

那么VNR在编码m词条时,就会用佐藤来替代姓名了。

这样就可以避免姓名翻译词条会扰乱翻译的问题了。

要注意的是,代理词条的添加会是很危险的,词条提交后,VNR默认总是设定为私有的。大家一定要debug,debug,再debug,毫无问题后,再设定代理词条为公开才好。

另外,代理词条最好要避免出现简体字才好。比如:斉藤 => 齐藤,由于齐是简体字,设定为代理词条可能会扰乱正体中文的翻译的。要选择那些比如:佐藤那样,不包含简体字的+翻译器认识的+一一对应的姓名作为代理词条才好。

再比如:"ゆい=>由依"就不是一个好的代理词条。因为有些其他姓名(比如:ユイ、由依)的翻译也可能是由依。翻译和原始的姓名不是一一对应的。

提问:

不过如此的话需要添加的辞条数量似乎太庞大。

回答:其实这个SynCFG是阉割版的。缺少概率的多叉树和分词。我在训练vtrans的时候使用UniDic分词的,可以知道单词的边界的词性。 我想下一步,首先删掉VNR对IPADIC和CaboCha的支持,改用和VNR服务器一样UniDic+align字典(比如EDICT)来分词。然后再把UniDic分词的词性的结果annotate到翻译里边。

另外,这样也可以让VNR鼠标查词的时间复杂度从O(N)降到O(1)(N为字典的容量),来实现瞬时的取词,不用像现在这样还要等待五秒钟。

提问:

是说syncfg定义的“杀死”只会在能识别[[m]]的位置使用,而其它的[[x]]部分则不会被翻译为杀死呢。

回答:

刚刚添加语法可以用比如吧:[[m,x]]来代表一个m和x的set。

提问:

看完英文例子了,可惜限制过大,基本只有很正经的GAL总是称呼标准人名才用得 上

回答:

其实那个代理主要就是为了修正名字的。通过使用代理可以是的替换自定义人物姓名变得non-intrusive,机器翻译不会被替换后的1234.567之类的影响到了。

提问:

后缀的处理使得酱适用后因为依旧属于[[m]]所以后缀的の也能适用了吧?

回答:

恩,后缀规则可以被迭代。 比如:如果定义了「さま=大人」和「の=的」的后缀,那么「さまの」就会被翻译成【大人的】。

然而,「のさま」也会被翻译成【的大人】,而这应该不是我们想要的。我觉得【の】最好先不要定义为后缀。比如,如果像下边这样定义:

m ||| [[m]]さな ||| [[m]]大人

adj ||| [[m]]の ||| [[m]]的

那么就只有「さなの」会被翻译为形容词,而「のさな」不会被翻译了。

时间: 2025-01-12 10:00:44

VNR共享辞书中翻译的转码和代理的相关文章

从 Python 之父的对话聊起,关于知识产权、知识共享与文章翻译

一.缘起 前不久,我在翻译 Guido van Rossum(Python之父)的文章时,给他留言,申请非商业用途的翻译授权. 过程中起了点小误会,略去不表,最终的结果是:他的文章以CC BY-NC-SA 4.0 许可协议进行授权.部分对话如下: CC 协议是一种授权许可协议,我曾看到过几次,但了解不多,所以便查阅了相关的内容. 本文主要是作个记录,既是加深自己的理解,也给有需要的同学一个参考. 二.著作权.著佐权与自由版权 对于知识产权,通常有如下几种说法: All Rights Reserv

eclipse中导入jdk源码、SpringMVC注解@RequestParam、SpringMVC文件上传源码解析、ajax上传excel文件

eclipse中导入jdk源码:http://blog.csdn.net/evolly/article/details/18403321, http://www.codingwhy.com/view/799.html. ------------------------------- SpringMVC注解@RequestParam:http://825635381.iteye.com/blog/2196911. --------------------------- SpringMVC文件上传源

如何用web api在网页中嵌入二维码?

如何用web api在网页中嵌入二维码? 随着智能手机和平板电脑的日益普及,二维码逐渐成了链接智能终端和传统网站的桥梁.在下文中,笔者将介绍几个实时生成二维码的web api,希望能够简化web design过程中的二维码集成工作. 1. 范例一 <img src="http://qrickit.com/api/qr?d=http://www.taobao.com" > 上述代码产生如下的二维码图片: 该web api还支持下面的这些特性, 说明文字:例如addtext=H

使用ctypes调用C共享库中函数返回值为链表式结构时的方法

/*********************************************************************  * Author  : Samson  * Date    : 02/02/2015  * Test platform:  *              3.13.0-24-generic  *              GNU bash, 4.3.11(1)-release  * ************************************

JAVA中生成二维码图片的方法

JAVA中生成二维码的方法并不复杂,使用google的zxing包就可以实现.下面的方法包含了生成二维码.在中间附加logo.添加文字功能. 一.下载zxing的架包,并导入项目中,如下: 最主要的包都在com.google.zxing.core下.如果是maven项目,maven依赖如下: 1 <dependency> 2 <groupId>com.google.zxing</groupId> 3 <artifactId>core</artifact

在共享DLL中使用MFC 和在静态库中使用MFC的区别

使用VS2008,在项目属性中有一项MFC的使用,有三种设置: 1.使用标准Windows库 2.在共享DLL中使用MFC 3.在静态库中使用MFC 第一种顾名思义. 第二种指的是打包时一些MFC的DLL的内容没有被包含在EXE文件中,所以EXE文件较小,但是运行时要求系统中要有相关的DLL文件. 第三种是将DLL中的相关代码写进EXE文件中,文件较大,但是可以在没有相关DLL的机器上运行. 同时,如果程序本来是第二种方式,发给同事,在同事机器上运行时,可能会出现错误: “无法启动程序……,由于

Scala 深入浅出实战经典 第48讲:Scala类型约束代码实战及其在Spark中的应用源码解析

王家林亲授<DT大数据梦工厂>大数据实战视频 Scala 深入浅出实战经典(1-64讲)完整视频.PPT.代码下载:百度云盘:http://pan.baidu.com/s/1c0noOt6 腾讯微云:http://url.cn/TnGbdC 360云盘:http://yunpan.cn/cQ4c2UALDjSKy 访问密码 45e2 技术爱好者尤其是大数据爱好者 可以加DT大数据梦工厂的qq群 DT大数据梦工厂① :462923555 DT大数据梦工厂②:437123764 DT大数据梦工厂③

68:Scala并发编程原生线程Actor、Cass Class下的消息传递和偏函数实战解析及其在Spark中的应用源码解析

今天给大家带来的是王家林老师的scala编程讲座的第68讲:Scala并发编程原生线程Actor.Cass Class下的消息传递和偏函数实战解析 昨天讲了Actor的匿名Actor及消息传递,那么我们今天来看一下原生线程Actor及CassClass下的消息传递,让我们从代码出发: case class Person(name:String,age:Int)//定义cass Class class HelloActor extends Actor{//预定义一个Actor  def act()

探秘Tomcat(一)——Myeclipse中导入Tomcat源码

前言:有的时候自己不知道自己是井底之蛙,这并没有什么可怕的,因为你只要蜷缩在方寸之间的井里,无数次的生活轨迹无非最终归结还是一个圆形:但是可怕的是有一天你不得不从井里跳出来生活,需要重新审视井以外的生活,你就会发现世界如此美好,我知道的如此的少! 好比,但你看到如下代码 namespace Singleton { public class Singleton { private static Singleton singleton; private Singleton() { } public