当前位置: 首页 > 知识库问答 >
问题:

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

陶裕
2023-03-14

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

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

这是不需要的线条的例子-

国际标准书号0-7225-3293-8。第一部分第二部分结语

第1/94页

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

当男孩带着他的牛群来到一座废弃的教堂时,夜幕已经降临。

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

不同的PDF可以给出不同的无用行。

我如何检测它们?

共有1个答案

陈修诚
2023-03-14

选项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找到了一个很好的初学者介绍,里面有一些可能对你有用的信息。从源头上,

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

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

句法分析:这里的分析是对句子中的单词进行分析,以了解句子的语法结构。单词被转换成显示单词如何相互关联的结构。如果一些单词序列违反了语言中单词组合的规则,它们可能会被拒绝。例如:英语句法分析器会拒绝这样的句子:“男孩,去商店。”"

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

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

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

 类似资料:
  • 问题 你想去掉文本字符串开头,结尾或者中间不想要的字符,比如空白。 解决方案 strip() 方法能用于删除开始或结尾的字符。 lstrip() 和 rstrip() 分别从左和从右执行删除操作。 默认情况下,这些方法会去除空白字符,但是你也可以指定其他字符。比如: >>> # Whitespace stripping >>> s = ' hello world \n' >>> s.strip()

  • 被删除,因此也是另一个匹配字符串的一部分,不确定这是由于错误的regEx还是反字符类的错误应用。

  • 问题内容: 我正在寻找一种有效的方法来从DataFrame列的字符串中删除不需要的部分。 数据如下: 我需要将这些数据修剪为: 我试过了.str.lstrip(‘+-‘)。str.rstrip(‘aAbBcC’),但出现错误: 任何指针将不胜感激! 问题答案:

  • 问题内容: 我需要从Java中的字符串中删除字符“¼”和“ 1/2”。我怎样才能做到这一点? 我无法控制请求,我必须接受输入内容。基本上,请求字符串具有字符“¼”和“ 1/2”,我需要将它们替换为空字符串。 我尝试将其放在列表中,但不起作用: invalidChars.add(’½’); 然后搜索这个。Jenkins抱怨:无法映射字符,无法编码UTF-8 [INFO] 2错误 问题答案: 从技术上

  • 我要删除包含所需字符串的所有行, 假设我有以下数据帧: 我想删除所有包含字符串的行。我已经搜索了它,但大多数答案是基于列名称,在我的情况下,我不会知道列它可以存在于任何列中。 输出数据帧应为

  • 问题内容: 假设我有一个包含Ü的字符串。我将如何找到所有这些unicode字符?我应该测试他们的代码吗?我该怎么做? 例如,给定字符串“AÜXÜ”,我想将其转换为“ AYXY”。我想对其他unicode字符执行相同的操作,并且我不希望将它们存储在某种翻译图中。 问题答案: “ unicode字符”的定义含糊不清,但是将被视为表示标准ISO 8859字符集 未涵盖的UTF-8 字符。如果您的情况是这