检测从文档中提取的文本中的“噪音”

时间:2012-06-08 16:16:37

标签: ruby text text-processing

  • 我正在从PDF文档中检索可读内容(即文本),其中大部分是科学期刊文章。
  • 我使用Poppler文本实用程序将PDF转换为文本格式。
  • 文本被很好地提取,但遗憾的是文章的其他组成部分(例如数字表)也无法以纯文本正确呈现。
  • 例如,我可能会在文章中间得到以下输出:

    字符分布随机Hmax

    1 2 3 4

    组织c)(物种上的人物

    A

    A 0 0 0 + C

    B + + + +

    C + + + + A

    B 4 +

    H角色分布非随机滚刀

    3+ 2+ 1 +

    (物种的多样性

我的问题是:我如何识别这种“噪音”并将其与正常的文本块区分开来?有没有现有的算法?我在Ruby工作,但任何语言的代码都会有所帮助。

1 个答案:

答案 0 :(得分:1)

您可以使用朴素贝叶斯分类器来建模有效行与无效行。

Here's an article on one in Ruby;在Python的nltk中有一个很好的实现。

要设置它,你需要给它一些例子,例如用一个好的行填充一个文件,用坏的一个填充一个。这与垃圾邮件过滤器使用的模型相同。

这个用例的一个技巧是许多基本朴素贝叶斯分类器使用单词出现模型来表示要素,而这里的词汇并不重要。您可以使用行长度,百分比空间(舍入为5%或10%间隔)或各种标点符号的百分比(舍入但具有更高的精度)。希望你的分类器能够知道“没有句号和30%空格的行是坏的”或“没有标点符号的行,其中每个单词以大写字母开头都是坏的”。

但是,基于上面的示例,您可能会拒绝任何空格比例过高的行或完全缺少句子标点符号的行(如逗号和句点)。