我需要根据列名将文本与字符串分开

时间:2016-10-23 11:17:37

标签: android sqlite android-sqlite ocr

我正在使用基于OCR的Android应用程序,动态地将此文本作为字符串从附加图像中获取(从图像中获取水平方向的文本)

enter image description here

图片文字:

"零件名称零件成本发动机油和油过滤器更换Rs 10K Alf过滤器Rs 4500客舱AC微过滤器Rs 4000花粉过滤器Rs 1200 - 1500 AC消毒剂Rs 3000燃料过滤器Rs 6000 - 8000火花塞组件更换(适用于TFSI /汽油车系列)Rs 10K沐浴露,基本清洁8.发动机脱脂Rs 3000车身蜡波兰详细报价7000 - 8000汽车内饰干洗用Genn Clean Rs 8000 - 10000车轮定位\ u0026平衡Rs 6000 - 7000制动Pads Replacernent(Pair)Rs 30K - 32K制动盘更换(对)Rs 30K - 35K .........."。

我需要分开零件名称和零件成本(只有2列,即零件名称,零件成本)(忽略列标题中的所有额外文本)。将值与String分开,并将其存储在SQLIte Database Android中。我被困在如何获取值并将它们分开。

1 个答案:

答案 0 :(得分:0)

OCR返回的文字并不理想。您应该做的第一件事是检查是否可以配置任何OCR解决方案以提供更好的输出。理想情况下,您希望线条由换行符分隔,并且列之间的空格被解释为更有用的东西,例如制表符。

如果您无法更改所获得的文本,则必须找到解析它的方法。您可能希望使用解析器(例如ANTLR)来简化此操作。

以下观察结果可能有助于您提出解析策略:

  • 第2列项目均以“Rs”或“Upto Rs”开头。
  • 第2列项目以:
    • 一个数字(其中一个数字可以是一串数字[0-9。],可选地后跟一个“K”
    • “万卢比”
  • 第1列项目不以数字或“Lakh”
  • 开头

所以一个基本的算法可能是:

List<String> column1 = new ArrayList<String>();
List<String> column2 = new ArrayList<String>();
String[] tokens = ocrString.split(" ");
List<String> column = column1;
String item = "";
for (int i = 0; i < tokens.length; i++) {
    String token = tokens[i];
    String nextToken = i == tokens.length - 1 ? "" : tokens[i+1];
    if (column == column1) {
        if (token == "Rs" || (token == "Upto" && nextToken == "Rs")) {
            column = column2;
            column.add(item); item = "";
            i--; continue;
        }
        item += " " + token;
    } else {
       item += " " + token;
       if (/*token is number or "Lakh" and nextToken is not*/) {
           column.add(item); item = "";
           column = column1;
       }
    }
}