2016-10-22 59 views
-2

我的工作基於OCR Android應用程序,讓這個文本字符串從圖像動態(正從圖像中的水平方向上的文字)從圖片如何從一個大的OCR多行字符串中分離字段?

文字:

「零件成本發動機機油和機油過濾器更換Rs 10000空氣過濾器Rs 45000機艙交流微型過濾器Rs 40000花粉過濾器Rs 12000 AC消毒劑Rs 30000燃料過濾器Rs 60000火花塞套件更換Rs 10000沐浴露,基本清潔8,發動機除油劑F2s 30000身體蠟拋光詳細Rs 70000車內部乾洗潔淨Rs 80000車輪定位8.平衡Rs 60000制動蹄片更換(對)Rs 30000制動盤更換(對)Rs 30000功率可摺疊加熱側ORVM更換Rs 40000電池R安裝Rs 25000前減震器對組件(左右兩側)Rs 60000前大燈總成(氙F型)Rs 15000合金輪組(16 Inch - 17 Inch) - 一套4合金Rs 12000燃油噴射器更換Rs 12000燃油裝配(噴油嘴+噴油器+燃油單位+分配器)Rs 30000保險槓更換Rs 60000閥蓋更換Rs 10000冷卻器更換Rs 40000 AC壓縮機組件更換Rs 20000 AC冷凝器,更換散熱器Rs 10000像輕微刮痕修理一樣去除凹痕油漆Rs 18000擋風玻璃更換Rs 35000懸架大修(包括下臂,Rs 20000傳輸系統故障 - 替代(極端罕見的情況下)Rs 70000合計Rs 50,00000 00「復古懸架套件。

example : 
Engine Oil and Oil Filter Replacement Rs 10000 
key = Engine Oil and OH Filter Replacement 
value = 10000 

我需要單獨的零件和成本(每2列)從它那裏得到的值,應該將其存儲在SQLite數據庫Android.I是卡如何獲得的價值和他們分開。

+0

嗨龐,其實我的工作基於OCR Android應用(水平掃描文本)。所以我傳遞圖片的API,正如我上面提到的,我得到響應文本所以我需要分離請提供零件名稱和零件成本。請幫助我。 – Naveenn

+0

這很難回答,因爲我總是無法弄清楚應用程序應該從您提供的示例字符串中提取的內容。甚至沒有一些貨幣符號來幫助它! –

+0

@Orabîg,感謝您的回覆。我編輯了String.Please檢查它,並儘快幫助我。 – Naveenn

回答

0

在你的情況下,有數據沒有標準格式(我們不能指望從OCR庫)你寫自己的自定義解析器。您可以使用bellow函數來分析您的數據。

public static void parseResponse(String responseData) 
{ 
    String SEPARATER = "Rs"; 
    String SPACE = " "; 

    if(data != null && data.length() != 0) 
    { 
     int startIndex = 0; 
     int endIndex = 0; 
     Map<String,String> keyValueMap = new HashMap<>(); 

     while(endIndex < data.length()) 
     { 
      endIndex = data.indexOf(SEPARATER, startIndex); 

      if(endIndex == -1) // Break loop if Separator not found 
       break; 

      String key = data.substring(startIndex, endIndex); 

      Log.d("", " Key = " + key); 

      startIndex = endIndex + SEPARATER.length() + 1; // pluse one for Space character 

      endIndex = data.indexOf(" ",startIndex); 

      String value = ""; 

      if(endIndex == -1) 
      { 
       value = data.substring(startIndex,data.length()-1); // End of the String 
       endIndex = data.length(); 
      }else 
      { 
       value = data.substring(startIndex,endIndex); 
       startIndex = endIndex; 
      } 


      Log.d("", " Value = " + value); 

      keyValueMap.put(key, value); 

      startIndex = endIndex; 

     } 
    } 

} 
+0

謝謝Android_Dev,會照顧它。 – Naveenn

+0

如果上述代碼正在爲您工作,請接受上述答案。 – Swapnil

+0

上面的代碼工作但響應不正確。 – Naveenn

1

Android_Dev的解決方案非常複雜。 (對不起花花公子)

此代碼:

ocrText = ocrText.replaceAll(" F2s "," Rs "); // Error in OCR 
java.util.regex.Pattern lines = java.util.regex.Pattern.compile("(.*?) Rs (\\d+) *"); 
java.util.regex.Matcher matchLines = lines.matcher(ocrText); 
while (matchLines.find()) { 
    System.out.println("\nkey = " + matchLines.group(1)); 
    System.out.println("value = " + matchLines.group(2)); 
} 

是做你想要什麼,並打印:

key = Parts Cost Engine Oil and Oil Filter Replacement 
value = 10000 

key = Air Filter 
value = 45000 

(...) 

key = Windshield Replacement 
value = 35000 

key = Suspension Overhaul (Retro Kit of Suspension including Lower Arm, 
value = 20000 

key = Transmission System Failure - replacement (extreme rare cases) 
value = 70000 

key = TOTAL 
value = 50 

(和請,下一次,何況 '盧比' 分隔符,我們怎樣應該猜到這一個???)

+0

感謝您的回覆。 – Naveenn

相關問題