2017-07-04 17 views
5

我有一些糟糕的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++編程,那麼哪些庫提供算法的實現?

謝謝。

+0

使用一些nltk語料庫並檢查組合可能會有所幫助。不知道你最終會得到確切的結果。這種貪婪的做法可能會失敗,因爲這些詞是大詞彙的一部分。然而,沒有辦法確定性地選擇大的或部分的單詞。這可能是我猜測的一個起點。 – arunk2

+0

我覺得你使用OCR的痛苦。你有沒有使用動態編程算法?最終的想法是讓程序做出如何分組的決定,並且可能必須以遞歸方式檢查這些決定,每次迭代檢查英語字典中的單詞以驗證它是否是有效的單詞。 – Miket25

回答

4

最小的方法:

  1. 在你輸入之前,任何單個字母的單詞刪除空格。標記最終單詞作爲其中的一部分(例如,在它們前面加一個不在輸入中的符號)。
  2. 獲取英文單詞詞典,排序最長到最短。
  3. 對於輸入中的每個標記詞,找到最長匹配並將其作爲單詞分解。重複原始「單詞」中遺留的字符,直到沒有任何遺漏。 (在沒有比賽的情況下,就讓它獨自一人。)

更復雜,矯枉過正的辦法:

不帶空格分割詞的問題是語言的現實世界的問題共同編寫沒有空格,如中文和日文。我對日文很熟悉,所以我會主要談談這一點。

典型的方法使用字典和序列模型。該模型經過訓練可以學習標籤之間的過渡特性 - 詞性標註部分與字典結合,用於計算不同潛在地點分割單詞的相對可能性。然後,使用(例如)維特比算法解決整個句子的最可能分裂序列。

如果您只是在清理OCR數據,那麼創建這樣的系統幾乎肯定是矯枉過正的,但如果您感興趣,可能值得深入研究。


的樣品情況下更復雜的方法將工作和簡單的一不會:

  • 輸入:Playforthefunofit
  • 簡單輸出:Play forth efunofitforth長於for
  • 成熟的輸出:Play for the fun of itforth efunofit是一個低頻 - 也就是非自然 - 轉換,而for the不是)

您可以通過簡單方法在一定程度上解決問題,方法是將常見的短字序列作爲單位添加到字典中。例如,將forthe添加爲字典單詞,並在後處理步驟中將其拆分。

希望有所幫助 - 祝你好運!

相關問題