2014-04-06 38 views
0

我正在編寫一個Ruby應用程序,它從雜貨店收據中讀取文本,並允許用戶查看每盎司支付多少,並可能根據配料進行投放。我使用的Tesseract寶石非常簡單。但是,這些訂單往往是錯誤的,有時候也很滑稽,就像「捲心菜香菜」中的「粗壯荷蘭芹」一樣。從OCR中識別食品雜貨的方法閱讀

我假設解決這個問題在某種程度上是一種自然語言處理問題,但我目前還沒有背景知道什麼方向進入。我的第一個想法是破解別人的想法,讓Google請求,如果他們建議不同的東西,請使用它。但是,我想閱讀並瞭解如何正確解決此問題。

那麼我應該如何去解決我的魁梧香菜問題?

+1

我認爲這實際上是一個相當大的問題,如果你正在談論解決它在一般情況下。爲了您的使用情況,我會考慮所有雜貨商品的字典。如果OCR提供的匹配與任何字典項目完全不匹配,則可以使用Levenshtein距離或類似方法測試非常接近的匹配項,並且如果找到匹配的匹配項,則使用該匹配項。如果它仍然沒有發現任何東西,只要使用原文,並希望它是一個還沒有在字典中的新項目。 – Jonah

回答

1

有很多方法可以解決這樣的問題。這裏有一個我的頭頂部:

  1. 字典 - 如果你限制自己一個垂直 - 零售在這種情況下 - 它應該是可以構建所有你能遇到的可能項目的字典。然後,您可以繼續使用某種形式的字符串相似性/匹配將來自OCR閱讀的結果與字典中的單詞進行比較。我剛纔在這裏寫了an article這個主題,介紹了近似的字符串匹配技術。這有點舊,但仍然相關,因爲它只是涵蓋了基本知識。

  2. 如果您遇到字典中不存在的項目,並且沒有與其中任何項目(即全新的項目)進行合理的近似匹配,您可以暫時將其作爲新項目處理,以用於目前的情況,並將其標記以供審查。你以後的評論可以決定它是一個新的項目,還是隻是一個非常糟糕的閱讀。在第一種情況下,將其添加到字典中,然後在第二種情況下將其映射到原始項目。

您還可以創建一個數據結構,將變體映射到原始項目。例如,我們來看看「魁梧的香菜」一案。這將在我上面概述的步驟1中找到,以匹配「捲曲歐芹」。通常,做一堆字符串逼近比較是昂貴的。爲了節省下次遇到它的時間,您可以將「粗壯荷蘭芹」添加到您的物品已知變化列表中。

下一次你遇到「粗壯荷蘭芹」時,你會將它看作是「捲曲歐芹」的變種,並選擇它,而不必再花時間再次進行比較。

+0

我想我會把你的建議和谷歌的請求結合起來,然後再把它放到字典中。然後,對於全新的項目,只需將它們添加到管理頁面進行審閱,或者讓用戶在掃描時添加它們。 –