用于对属于一起的文档部分进行分组的算法

时间:2015-06-25 08:38:47

标签: algorithm graph text-processing tf-idf

我有同一文件的N个翻译,分为几部分(我们称之为经文)。有些翻译省略了一些经文。没有翻译包含所有经文。

我想&#39;对齐&#39;通过创建组,基于内容的翻译(即在数据库中创建记录或在电子表格中创建行)。每个组应该包含M个经文,其中M是该经文出现的翻译数,并且M <1。 N.没有经文可能属于不止一个群体。

到目前为止(使用Python提供的各种API):

  1. 构建所有翻译中所有经文的一维列表(跟踪哪些经文来自哪些翻译)
  2. 每节经文:
    • 使用谷歌翻译将这节经文翻译成英文
    • 获得该诗歌相对于所有其他经文的tf-idf相似性
    • 在其他翻译中找到最相似的经文
  3. 实际上我最终得到了一个带有方向边的图。每一条边都有一个可能性(百分比),表示它指向的经文的相似性,以及它所指出的经文。

    示例:

    • N = 3个翻译
    • 每个翻译中的2节经文
    • 正确的分组(就像人类会将它们分组)是(A,B,C),(D,E,F)
    • 我的算法给出: Graph of verses 正确的分组对人眼来说是显而易见的。

    如何扩展此算法以实现我需要的分组?结果将由人类检查,因此它不一定是完美的,但必须自动化。

2 个答案:

答案 0 :(得分:2)

使解释更容易的一些定义:
P(x,y) - 从节点ab的概率。 (例如,上方 - P(a,b)=77P(b,a)=85CP(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开始语言的数量),或者您可以使用一些近似算法,例如首先匹配两种语言,然后添加第三种语言等。