2014-10-07 202 views
0

我的问题是:提取PDF文本

我如何可以提取其列分成的方式,我得到这个列分隔结果的PDF文件中的文本?

背景: 我从事关于文本分析(特别是科学文本)的项目。 这些文本有时会以多列布局发布,每列都有一个单独的页码。 要通过布局的页面编号来提取文本,按列提取文本将非常有用。


我用PDFBOX,并试图/搜索几件事情:

  • 我试过PDPage类的getThreadBeads()方法 - >结果:列表0大小
  • 我试过graping的文本与getCharactersByArticle()方法 - >文本没有分成列
    (我试过这与PDF文件的已发布文本以及自我创建.doc文件,每个都有一个多colu MN布局)

的事情是,PDFBOX似乎通过自动列将文本拆分: 如果我设置在真PDFTextStripper一个页面的所有迹象都在一条线上设置的setSortByPosition()不承认单独的列。 但是,如果我设置setSortByPosition()为假脱衣舞师正在做这种划分。

为了让我看看pdfBox源代码: 关键的方法是PDFTextStripper的writePage()方法。 这里空格(大多数pdf中没有给出)和换行符显然计算在内。 但我找不到Stripper是如何计算分栏符的。

所以再次提问:

  • 如何PDFTextStripper计算分栏符?
  • pdfBox API中是否有方法来捕捉这个/按列提取文本?
  • 这可能与其他pdf-api?

在此先感谢

回答

2

如果我设置在真PDFTextStripper一个页面的所有迹象都在一条线上设置的setSortByPosition()不承认单独的列。但是如果我将setSortByPosition()设置为false,剥离器将执行此分割。

[...] PDFTextStripper如何计算列中断?

不是。

通过设置SortByPositionfalse你告诉PDFBox的到尝试从页面内容流的文本块,但排序,而不是接受他们在他们出现的顺序。

在您的文档中,文本内容似乎是按照阅读顺序绘制的,即逐列显示。这不适用于所有文档,为了处理其他文档,PDFBox提供了从左到右,从上到下排序文本片段的选项。

在文档中激活该选项(设置SortByPositiontrue)将返回与列无关的文本。

pdfBox API中有没有方法可以捕获这个/按列提取文本?

PDFBox不分析页面内容以识别列。但是,如果您进行分析,则允许您在将列矩形作​​为规则提供时逐列提取文本。

+0

谢谢!因此,PDF文档所依赖的阅读顺序在创建时已被安全保存到PDF文档中? I.e .:当我将.doc转换为pdf时,pdf(通常)以阅读顺序保存文本?如果是:是否有一种方法可以在创建PDF时存储有关列的信息? – matthiasboesinger 2014-10-07 13:36:33

+1

*当我将.doc转换为pdf时,pdf(通常)以阅读顺序保存文本?* - *您的*文档属于这种类型。这似乎是一个相当自然的秩序。但我不能说真的有多普通。无论如何,你必须检查你的PDF源,因为它们可能不寻常......;) – mkl 2014-10-07 13:40:20

+2

*有没有一种方法可以在创建PDF时存储有关列的信息? - 是的,但似乎没有被使用过在你的示例文档中,否则你对'getThreadBeads'和'getCharactersByArticle'的实验会更加成功。 – mkl 2014-10-07 13:41:49