我有同一文件的N个翻译,分为几部分(我们称之为经文)。有些翻译省略了一些经文。没有翻译包含所有经文。
我想&#39;对齐&#39;通过创建组,基于内容的翻译(即在数据库中创建记录或在电子表格中创建行)。每个组应该包含M个经文,其中M是该经文出现的翻译数,并且M <1。 N.没有经文可能属于不止一个群体。
到目前为止(使用Python提供的各种API):
实际上我最终得到了一个带有方向边的图。每一条边都有一个可能性(百分比),表示它指向的经文的相似性,以及它所指出的经文。
示例:
如何扩展此算法以实现我需要的分组?结果将由人类检查,因此它不一定是完美的,但必须自动化。
答案 0 :(得分:2)
使解释更容易的一些定义:
P(x,y)
- 从节点a
到b
的概率。 (例如,上方 - P(a,b)=77
和P(b,a)=85
)
CP(x,y)
- 合并概率。可以是P(x,y) * P(y,x)
或P(x,y) + P(y,x)
。
我建议的算法如下:
找到具有最高x, y
的一对CP(x, y)
,然后将它们视为一个节点(a.k.a。x_y
)。重新计算图形,以便考虑到两个节点中的任何一个的每个边缘。使用图表的矩阵表示非常有效地完成了这一点
迭代此步骤,直到您拥有M
组。
答案 1 :(得分:0)
如果在评论中写下这些经文的顺序,那么很容易将其表述为edit distance问题。
首先假设您只有两种语言。您可以按如下方式重新表述您的问题:您需要通过以下操作将一个翻译(A
)转换为另一个翻译(B
):您可以删除一节经文(这意味着此节经文中包含A
,但不在B
中),您可以插入一个诗句(意味着它不在A
中,但在B
中),或者您可以替换一个与另一个经文(意思是你匹配这两节经文)。您可以为每个操作分配成本;替换的成本将取决于您已计算的经典相似度,并且您需要以某种方式定义插入或删除的成本(您可能需要在此进行实验)。在此之后,您运行维基百科中提到的标准算法,并在二次时间内获得匹配。
如果你有两种以上的语言,你可以使用类似的精确算法,但速度会慢一些(O(N^k)
N
开始最大数量的经文而k
开始语言的数量),或者您可以使用一些近似算法,例如首先匹配两种语言,然后添加第三种语言等。