我已经从pdf票据中提取了文本,看起来像这样(票据可能有所不同)
___________________________________________________ |invoiceNo | itemId | item_name | qty | amount | |___________|________|_____________|_______|________| |12323133 | 1 | Hp laptops | 1 | 180000| |1234534H | 1 | Hp laptops | 1 | 180000| |SW323133 | 1 | Hp laptops | 1 | 180000| |FGF323133 | 1 | Hp laptops | 1 | 180000| |___________|________|_____________|_______|________|
现在,我需要一种算法来查找所有相关信息,例如发票编号/ item_name等。文本可以短于或长于2-3页
答案 0 :(得分:1)
好像空格是分隔符,例如“;”在.csv中,因此您可以使用String.split(Pattern.quote(“”)))创建一个数组。然后在第5个元素之后跳到下一行。
尝试类似的事情:
File f = new File("example.pdf");
BufferedReader br = new BufferedReader(new FileReader(f));
ArrayList<String> Data = new ArrayList<String>();
while((line = br.readLine()) != null) {
String[] a = line.split(Pattern.quote(" "));
for(int i = 0; i < a.length; i++) {
if(!(a[i] == null || a[i] == "")) {
Data.add(a[i]);
}
}
}
答案 1 :(得分:0)
有些值可能包含空格的事实在这里是一个问题,因为这些值由空格分隔。如果您控制提取此信息的程序,则建议您尝试转义其输出中的值,例如“ Hp laptops”。以这种方式格式化输入后,普通的csv解析方法应允许您提取映射到标头的信息。这个lib可能会帮助您:
https://commons.apache.org/proper/commons-csv/apidocs/org/apache/commons/csv/CSVParser.html