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

How to detect and remove unwanted lines from a string?

本文关键字:删除 不需要 检测 字符串      更新时间:2023-09-26

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

我可以从PDF中提取文本,但提取的文本有时包含我想从中剥离的行。

以下是不需要的线路示例-

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

第1/94页

这里有一个好的例子(我想保留它)-

黄昏时分,男孩带着牛群来到一座废弃的教堂。

我想多睡一会儿,他想。那天晚上,他做了和一周前一样的梦

不同的PDF可以发出不同的不需要的线条。

我如何检测它们?

选项1-给计算机一条规则:如果你能够缩小你想保留的内容,那么我很清楚的标准是排除特殊字符,那么你可以据此过滤结果。

假设你同意所有"好的行"都没有特殊字符("/"、"-"answers"="),例如,如果一行确实包含其中一项,你知道你可以将其从你保存的内容中删除。这可以在包含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提供一些可能对您有用的信息。从源头上看,

语言学是一门语言科学。它的研究包括:

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

句法分析:这里的分析是对句子中的单词进行分析,以了解句子的语法结构。单词被转换成结构,显示单词之间的关系。如果某些单词序列违反了语言中单词组合的规则,则可能会被拒绝。例如:英语句法分析器会拒绝这句话,说:"男孩,去商店吧。"

使用某种NLP,你可以发现给定的文本部分是否包含一个句子或一些不连贯的杂乱无章的内容。然后,此测试可以用作程序中要保留或删除的内容的筛选器。

旁注-因为你的样本文本似乎不仅仅是句子,而是文学作品,有时角色会以句子片段的形式说话,这是作者赋予他们的性质的一部分。在这种情况下,您可以添加一个单独的条件,即如果文本包含在两个引号中并且没有特殊字符,则您希望保留文本。

最终,NLP可能比你需要或想做的工作更多,在这种情况下,选项1可能是你最好的选择。另一方面,它可能正是你想要的。不管是什么情况,或者如果你决定需要两者的结合,祝你好运!我希望这个答案能有所帮助。