从PDF文件中将每个句子提取到Excel中的单独单元格?

时间:2015-06-26 01:21:31

标签: excel pdf text-extraction

正如标题所示,我有一个文件需要将每个句子提取到Excel中的单元格,每个单元格一个。

句子提取可以像查找下一个". "一样简单并提取到单元格。问题是除了MATLAB之外,我真的不懂任何编程语言(我是一名机械工程师)。

如果它可以忽略那些令人敬畏的桌子/图片,如果不是很好,只要它在遇到桌子/图片时不会搞砸。我知道我并没有给你很多工作,但感谢任何帮助。

1 个答案:

答案 0 :(得分:0)

你没有说出你想要的"句子单元"被打好...

  1. 简短回答:这是不可能的。

  2. 扩展答案:这很难,而且还取决于您的特定PDF文件。有些PDF文件不会将完全提供给文本提取。

  3. 您可以尝试以下命令,该命令会尝试将每个句子捕获到CSV类型表的字段中(只有一列,并且行数相当于总句子数:

    pdftotext -layout -x 10 -y 20 -W 400 -H 490 the.pdf - \
      | tr "\\n" " "            \
      | perl -pe 's#\f# #g'     \
      | perl -pe 's#\. #.\n#g'  \
      | perl -pe 's#\? #?\n#g'  \
      | perl -pe 's#\! #!\n#g'  \
      | sed 's#^#"#'            \
      | sed 's#$#",#'           \
      | tee myvalues.csv
    

    此示例适用于我创建的sample 2-page PDF以快速测试上述命令。 PDF的屏幕截图:

    Screenshot of 2-page PDF

    以上命令适用于Linux和Mac OS X. (抱歉,没时间想出相同的Windows版本!)

    要了解此命令如何(和IF)对 您的 PDF有效,请继续前进:

    • 首次执行 第一行 作为首次尝试(摆脱最终的 \ 标志这只是行继续标记。第一行将仅从PDF中提取文本并将其打印在标准输出通道上。如果这不起作用,所有其他线路也不会。 -x .. -y .. -W .. -H ..参数通过选择左上角的矩形坐标角(xy)来尝试摆脱页脚和页眉(如示例PDF中的页面编号) ,以及页面区域宽度(W)和高度(H),以限制该区域的文本提取。

    • 第二次尝试执行 前两行 (在第一行保留行继续标记,在第二行删除标记)。第二行从第一行获取输出,并用空格字符替换每个换行符。因此,您将页面的所有内容都放在一行中。

    • 在第三次尝试中执行 前三行 (在第一行和第二行中保留行继续标记,删除第三行上的标记)。第三行获取前两行的输出,并用空格字符替换每个formfeed字符。当分页发生时,这些换页字符可能出现在原始输出中,有时在句子中。 (或者,您可以将-nopgbrk添加到原始pdftotext命令中,以避免完全插入分页符。)因此,您将所有页面的所有内容放在一行上。

    • 最后,执行上面给出的 所有行 。第四行用换行符替换所有出现的.(冒号后跟空格)。第五和第六行打破由问题和感叹号结束的句子。第七行和第八行将行包装成引号,并用逗号结束每一行。最后一行将结果传递到文件myvalues.csv

    这是输出的外观:

    "this is a paragraph.",
    "this is a sentence.",
    "this is a sentence.",
    "this is a sentence.",
    "this is a sentence.",
    "this is a sentence.",
    "this is a sentence.",
    "this is a sentence.",
    "this is a sentence.",
    "this is a sentence.",
    "this is a paragraph.",
    "this is a sentence.",
    "this is a sentence.",
    "this is a sentence.",
    [....]
    "this is a sentence.",
    
  4. 如果命令按预期工作,它将返回CSV(逗号分隔值)文本文件。这种类型的文本文件可以轻松导入Excel。