2016-08-02 84 views
-1

我正在研究一个项目,我必须从PDF中提取文本数据。如何检测并删除字符串中不需要的行?

我能够从PDF中提取文本,但提取的文本有时包含我想从中删除的行。

这里的例子和不必要的线 -

ISBN 0-7225-3293-8。 =内容=第一部分第二部分尾声

页94分之1

而且,这里的好线的一个实例(我想保持) -

黄昏正在下降为这个男孩在一个废弃的教堂与他的牧群抵达。

他想,我想睡一会儿。他在一个星期前有同样的梦想

不同的PDF可以发出不同的不必要的行。

我该如何检测它们?

+0

有没有一个共同的模式,你不想要的行?如果是这样,请使用正则表达式来查找它们。 – Cruiser

+2

如果每行有内容行,则可以确定坏行的规则。 (像REGEX),然后使用String.matches来确定是否匹配错误的REGEX。 –

+0

我有逐行的内容。 有一些常见的模式,如“页面12/90”。但有些我甚至不知道像“国际标准书号0-7225-3293-8”, “= CONTENTS =”, “第一部分”, “第二部分”, “结语” –

回答

0

选项1 - 给计算机一个规则:如果你能够缩小你想要保留的内容的范围,明显的标准是排除特殊字符,那么你可以基于此过滤您的结果。例如,如果一行代码包含这些项目中的一个,那么你就知道你了可以从您保留的内容中删除它。这可以在完成对含有环一个if-then条件看起来是这样的..

var lineArray = //code needed to make each line of the file an element of the array 

For (cnt = 0; cnt < totalLines; cnt++) 
{ 
    var line = lineArray[cnt]; 
    if (line.contains("/") || line.contains("-") || line.contains("=")) 
     lineArray[cnt] = ""; 
} 

这段代码的最后,你可以简单地得到阵列中的所有文本,并将其将不再包含不需要的线。但是,如果有不需要的线条,这些线条实际上无法通过字符,长度,位置等区分开来,以前的方法开始在一些更复杂的线条上分解。

这是因为没有规则可以让计算机区分好坏之间,而不必给予它识别词类和句子结构的大脑。在这种情况下,你可能会考虑选项2,就是这样。

选项2 - 给电脑脑:既然你要根据你所告诉我们,一个开源(或购买)删除都会或多或少是不连贯的文档文本自然语言处理可能你在找什么。

我在http://myreaders.info/10_Natural_Language_Processing.pdf找到了一个很好的初学者介绍,提供了一些可能对您有用的信息。 “来源,

”语言学是语言的科学。其研究内容包括:

  • 声音(音韵),
  • 构词(形态学),
  • 句子结构(语法)
  • 含义(语义),和理解(语用)等。

句法分析:这里分析的话在一个句子要知道先手的语法结构NCE。这些单词被转换成结构,显示这些单词如何相互关联。一些单词序列如果违反语言的规则可能会被合并,可能会被拒绝。例如:一个英语句法分析器会拒绝这个句子:'男孩去商店。' “

使用某种类型的NLP,您可以发现文本的给定部分是否包含句子或某些不连贯的散列。此测试可用作程序中用于保留或删除内容的过滤器。

注意:由于看起来你的示例文本不仅仅是句子,而是文献,有时候文字会在句子片段中作为作者给出的属性的一部分说出来,在这种情况下,你可以添加一个单独的条件,文本包含在两个引用内,并且没有特殊字符,您要保留文本不管。

最后,NLP可能比您需要的还要多,或者您想要做的,在这种情况下,选项1可能会是你最好的选择。另一方面,它可能只是你正在寻找的东西。不管是什么情况,或者如果你决定你需要两个组合,祝你好运!我希望这个答案有帮助。

相关问题