什么算法可以将字符组合成单词?

时间:2017-07-04 00:02:58

标签: algorithm nlp

我有一些糟糕的OCR软件生成的文字。

输出包含单词和以空格分隔的字符的混合,这些字符应该被分组为单词。例如,

Expr e s s i o n Syntax
S u m m a r y o f T e r minology 

应该是

Expression Syntax
Summary of Terminology 

哪些算法可以将字符组合成单词?

如果我使用Python,C#,Java,C或C ++编程,哪些库提供了算法的实现?

感谢。

1 个答案:

答案 0 :(得分:4)

最小方法:

  1. 在您的输入中,删除任何单个字母单词之前的空格。将创建的最终单词标记为某种方式(例如,在输入中添加不带符号的前缀)。
  2. 获取英文单词词典,排序最长到最短。
  3. 对于输入中的每个标记单词,找到最长匹配并将其作为单词分解。重复原始“单词”中剩余的字符,直到没有剩余的字符为止。 (在没有匹配的情况下,请不要管它。)
  4. 更复杂,矫枉过正的方法:

    在没有空格的情况下分割单词的问题是通常在没有空格的情况下编写的语言中的现实问题,例如中文和日文。我熟悉日语,所以我主要是参考这个。

    典型方法使用字典和序列模型。训练模型以学习标签之间的过渡属性 - 词性标注与词典结合用于计算不同潜在位置分割单词的相对可能性。然后,使用(例如)维特比算法解决整个句子的最可能的分裂序列。

    如果您只是清理OCR数据,那么创建这样的系统几乎肯定会有点过分,但如果您感兴趣,可能值得研究。

    一个示例案例,其中更复杂的方法将起作用,而简单的方法不会:

    • 输入:Playforthefunofit
    • 简单输出:Play forth efunofitforth长于for
    • 复杂的输出:Play for the fun of itforth efunofit是低频 - 即非自然 - 过渡,而for the则不是)

    通过在字典中添加常见的短字序列作为单位,您可以通过简单的方法解决问题。例如,将forthe添加为字典单词,并在后处理步骤中将其拆分。

    希望有所帮助 - 祝你好运!