Gale和Church在1993年提出了一个基于长度进行句对齐的算法,并在附录里公开了C源代码。这篇论文相当经典,以至于之后的关于句对齐的论文大多数要引用它。论文的题目是《 A Program for Aligning Sentences in Bilingual Corpora》。论文并不好懂,主要是因为其中的术语和目标没有给出清晰的定义。这篇博客就是要解读一下这篇论文,顺便解读一个Python实现。
论文说,对齐分两步。第一步是段落对其,第二步是在段落内部进行句对齐。论文说段落对齐重要,不过简单,问题在于段落内部的句对齐。所以我只讲已知段落对齐,怎样在段落内进行句对齐。首先定义几个概念,这些定义至关重要。所有论文中出现的符号都对应定义里的符号。
- 段落: 语文里的自然段。分为源语言 L1 的段落和目标语言 L2 的段落,或称原文段落和译文段落。
- 句子: 以句号、问号、省略号和感叹号结尾的一段文字。或以分号和双引号组成的对话。
- 句块: 一个或多个连续的句子组成的片段。对应论文中的portion of text。
- 句块对: 原文段落的一个句块和译文段落的一个句块组成的对。
- l1,l2 : l1 是句块对中原文部分的长度,以字符为单位,不包括空格(中文句子的字符是单个汉字)。 l2 是句块对中译文部分的长度。
- c ,
s2 : 假设源语言中的一个字符在目标语言中对应的字符数是一个随机变量,且该随机变量服从正态分布 N(c,s