N-Grams用于序列校正

时间:2009-06-19 20:41:35

标签: language-agnostic sequences

抱歉这个疑难问题。

我有一大堆序列需要通过/或添加数字或替换它们(从不删除任何东西)来纠正,如下所示:

  • 1,2,,3 => 1,7,4,3
  • 4,,5,6 => 4,4,5,6
  • 4,7,8,9 => 4,7,8,9,1
  • 4,7 => 4,8
  • 4,7,1 => 4,7,2

它以填充的原始序列和样本校正开始。

我希望能够通过计算被校正的不同n-gram的频率来自动校正序列,第一个样本将成为

  • 1 =大于1
  • 2 =大于7
  • 3 =→3
  • 1,2 => 1,7
  • 2,3 => 7,4,3
  • 1,2,3 => 1,7,4,3

我会收集这些n-gram校正的频率,我正在寻找一种方法来计算校正样本数据中可能存在或不存在的新输入的最佳方法。

这似乎与SMT类似。

1 个答案:

答案 0 :(得分:1)

根据替换的长度和出现次数,为已知替换分配分数。天真地,我建议将这个分数与长度的平方成比例(在我能想到的大多数情况下,较长的匹配是罕见的)和出现次数的平方根,这样4个项目的序列具有尽可能多的权重作为2项序列,经常出现16次。这需要根据您的实际情况进行调整。

给定一个长度为M的序列,有N个子串长度为1到M,其中N = M *(M + 1)/ 2,所以如果字符串相当短,那么你可以迭代每个子字符串并查找可能的替代品。我认为,从这些子串中组成整个字符串的方法的数量也与M ^ 2成正比。

对于每个可能的原始字符串组合,通过子字符串,将每个子字符串的最佳(最高分)替换的总分加起来。

总得分最高的成分(可能是我对该过程的假设)是“最佳”替换后的结果。