Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/364.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何从文档文本中查找相关字段?_Java_Nlp_Text Processing - Fatal编程技术网

Java 如何从文档文本中查找相关字段?

Java 如何从文档文本中查找相关字段?,java,nlp,text-processing,Java,Nlp,Text Processing,我从一份pdf格式的法案中提取了文本,看起来像这样(法案可能会有所不同) ___________________________________________________ |发票编号|项目ID |项目名称|数量|金额| |___________|________|_____________|_______|________| |12323133 | 1 | Hp笔记本电脑| 1 | 180000| |1234534H | 1 | Hp笔记本电脑| 1 | 180000| |SW323133

我从一份pdf格式的法案中提取了文本,看起来像这样(法案可能会有所不同)

___________________________________________________ |发票编号|项目ID |项目名称|数量|金额| |___________|________|_____________|_______|________| |12323133 | 1 | Hp笔记本电脑| 1 | 180000| |1234534H | 1 | Hp笔记本电脑| 1 | 180000| |SW323133 | 1 | Hp笔记本电脑| 1 | 180000| |FGF323133 | 1 | Hp笔记本电脑| 1 | 180000| |___________|________|_____________|_______|________|
现在,我需要一个算法来查找所有相关信息,如发票号码/商品名称等。文本可以短或长2-3页

看起来空格像是.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]);
                }
            }
        }
File f=新文件(“example.pdf”);
BufferedReader br=新的BufferedReader(新文件读取器(f));
ArrayList数据=新的ArrayList();
而((line=br.readLine())!=null){
String[]a=line.split(Pattern.quote(“”));
for(int i=0;i
一些值可能包含空格这一事实在这里是一个问题,因为这些值由空格分隔。如果您控制了提取此信息的程序,我建议您尝试转义其输出中的值,例如“Hp笔记本电脑”。在输入格式化为这样之后,正常的csv解析方法应该允许您提取映射到头的信息。此库可能有助于:


文本是否有任何格式,如CSV或类似格式?你能给我们举个例子吗?到目前为止,您在java中尝试了什么?您的源文件是pdf吗?是的,它是使用pdftools从pdf/图像中提取的文本。提取后是什么格式或数据结构?任何
行列表
,或者可能是带有行数的
行映射
?我建议您在使用pdftools提取数据时,将此数据转换为jsonobject。一旦您在jsonobject中获得了数据,您就可以更好地控制数据。否则,以文本格式处理这些数据将是非常关键的,因为不需要间距或其他一些特殊字符,但账单可以采用不同的格式。因此,我不能依赖列位置,你是对的。。但后来我想你需要一个不同的算法来处理不同的账单
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]);
                }
            }
        }