如何从字符串中检测和删除不需要的行?

时间:2016-08-02 13:09:35

标签: javascript java string algorithm pdf

我正在开展一个项目,我必须从PDF中提取文本数据。

我可以从PDF中提取文本,但是提取的文本有时会包含我想要从中删除的行。

这是不需要的行的例子 -

  

ISBN 0-7225-3293-8。 = CONTENTS =第一部分第二部分结语

     

Page 1/94

而且,这是一个好线的例子(我想保留) -

  当这个男孩带着他的牛群到达一个废弃的教堂时,黄昏正在下降。

     他想,我想再睡一会儿。他在一周前的那个夜晚做过同样的梦想

不同的PDF可以提供不同的不需要的行。

我如何检测它们?

1 个答案:

答案 0 :(得分:0)

选项1 - 为计算机提供规则:如果您能够缩小您希望保留的内容范围,那么明显的标准就是排除特殊情况字符,然后您可以根据此过滤您的结果。

所以,让我们说你同意所有"好的线条"将没有特殊字符(' /',' - '和' =')例如,如果某行包含其中一个项目,你知道你可以从你保留的内容中删除它。这可以在包含if-then条件的for循环中完成,该条件看起来像这样......

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找到了一个很好的初学者介绍,其中包含一些可能对您有用的信息。来自消息来源,

&#34;语言学是语言科学。其研究包括:

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

句法分析:这里的分析是句子中的单词,用于了解句子的语法结构。这些词被转化为结构,显示这些词如何与彼此相关。如果某些单词序列违反了语言规则以便如何组合单词,则可能会被拒绝。例如:一个英语句法分析器会拒绝这句话:&#39;男孩去存储。&#39; &#34;

使用某种NLP,您可以发现给定的文本部分是包含一个句子还是一些不连贯的漫游。然后,可以将此测试用作程序中的过滤器,以用于保留或删除的内容。

旁注 - 看起来你的样本文本不仅仅是句子而是文学,有时字符会在句子片段中说出作为作者给出的性质的一部分。在这种情况下,您可以添加一个单独的条件,如果文本包含在两个引号中并且没有特殊字符,则您希望保留文本。

最后,NLP可能比您要求或您想做的工作更多,在这种情况下,选项1可能是您最好的选择。另一方面,它可能只是你正在寻找的东西。无论是哪种情况,或者你决定需要两者的组合,祝你好运!我希望这个答案有所帮助。