我正在使用基于OCR的Android应用程序,动态地将此文本作为字符串从附加图像中获取(从图像中获取水平方向的文本)
图片文字:
"零件名称零件成本发动机油和油过滤器更换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中。我被困在如何获取值并将它们分开。
答案 0 :(得分:0)
OCR返回的文字并不理想。您应该做的第一件事是检查是否可以配置任何OCR解决方案以提供更好的输出。理想情况下,您希望线条由换行符分隔,并且列之间的空格被解释为更有用的东西,例如制表符。
如果您无法更改所获得的文本,则必须找到解析它的方法。您可能希望使用解析器(例如ANTLR)来简化此操作。
以下观察结果可能有助于您提出解析策略:
所以一个基本的算法可能是:
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;
}
}
}