【问题标题】:I need to separate the text from a string based on column names我需要根据列名将文本与字符串分开
【发布时间】:2016-10-24 15:15:29
【问题描述】:

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

图片中的文字:

“零件名称零件成本发动机机油和机油滤清器更换 Rs 10K Alf Filter Rs 4500 Cabin AC Micro Filter Rs 4000 Pollen Filter Rs 1200 - 1500 AC 消毒剂 Rs 3000 燃油滤清器 Rs 6000 - 8000 更换火花塞组(适用于 TFSI / 汽油车系列)10K 卢比沐浴露,基本清洁 8. 发动机脱脂 3000 卢比车身蜡上光剂详细 7000 - 8000 卢比汽车内饰干洗,使用 Genn Clean 8000 - 10000 卢比车轮定位 \u0026 平衡 6000 - 7000 卢比更换刹车片(一对)Rs 30K - 32K 刹车盘更换(一对)Rs 30K - 35K ...."。

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

【问题讨论】:

  • 您可以通过对每个垂直列的平均颜色求和来进行某些列检测,然后对水平规则进行相同的处理,然后将 OCR 应用于空间内的矩形子图像。您有一个小挑战,即没有垂直规则,但您的列检测应该能够应对 - 在第二列的开头会有明显的明暗变化。

标签: android sqlite android-sqlite ocr


【解决方案1】:

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

如果您无法更改获得的文本,则必须找到某种解析方法。您可能需要考虑使用解析器,例如 ANTLR 来简化此操作。

以下观察可以帮助您提出解析策略:

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

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

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;
       }
    }
}

【讨论】:

  • 感谢 djd0 的回复。我没有得到算法。请您详细说明。
  • and else if(/*token is number or "Lakh" and nextToken is not*/).请解释一下djd0。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-11
  • 1970-01-01
  • 2020-08-25
  • 1970-01-01
相关资源
最近更新 更多