1

我正在尝试解析 PDF 的内容。基本上它们是科学研究论文。

这是我试图抓住的部分:

在此处输入图像描述

我只需要论文标题和作者姓名。

我使用的是PDF Parser Library。而且我能够使用以下代码获取标题部分文本:

function get_pdf_prop( $file )
{
    $parser = new \Smalot\PdfParser\Parser();
    $pdf    = $parser->parseFile( $file );

    $details  = $pdf->getDetails();

    $page = $pdf->getPages()[0];

    //-- Extract the text of the first page
    $text = $page->getText();
    $text = explode( 'ABSTRACT', $text, 2 );    //-- get the text before the "ABSTRACT"
    $text = $text[0];

    //-- split the lines
    $lines = explode( "\n", $text );

    return array(
        'total_pages'   => $details['Pages'],
        'paper_title'   => $lines[0] . $lines[1],
        'author'        => $lines[2]
    );
}

我所做的是,解析第一页的全文,然后它将以纯格式返回整个文本。由于所需的内容在 word 之前ABSTRACT,我尝试拆分文本,然后拆分行。

我假设前两行是标题,第三行是作者姓名。到目前为止,我在上面的屏幕截图中显示的论文给出了正确的结果。

但是在以下情况下会出现问题:

  1. 如果论文标题是单行,我事先并不知道。所以我的代码总是将前两行作为纸片返回。这可能会同时给出标题和作者姓名paper_title

  2. 如果论文标题是三行,这同样会产生问题。

  3. 如果有超过 1 个作者,那么我的代码将不会返回正确的数据。

那么关于我如何有效地从 PDF 科学论文中获取论文标题和作者姓名等数据的任何建议?确信他们在使用 LateX 工具创建 PDF 时都遵循相同的模式。有更好的解决方案或线索吗?

请注意,我正在尝试在我网站上传的论文上执行此操作。我使用 PHP 作为服务器端语言。

谢谢

4

1 回答 1

0

您可以尝试使用 PDF 元数据来检索您需要的“字段”(作者、标题、其他...)。我随机尝试了几篇科学论文,它们都有(至少)页面、作者和标题的元数据。

PDF Parser 文档展示了如何做到这一点:

<?php

// Include Composer autoloader if not already done.
include 'vendor/autoload.php';

// Parse pdf file and build necessary objects.
$parser = new \Smalot\PdfParser\Parser();
$pdf    = $parser->parseFile('document.pdf');

// Retrieve all details from the pdf file.
$details  = $pdf->getDetails();

// Loop over each property to extract values (string or array).
foreach ($details as $property => $value) {
    if (is_array($value)) {
        $value = implode(', ', $value);
    }
    echo $property . ' => ' . $value . "\n";
}

?>

随机选取的纸张 ( var_dump($details)) 的示例输出:

array(7) {
  ["Author"]=>
  string(18) "Chris Fraley et al"
  ["CreationDate"]=>
  string(25) "2011-06-23T19:20:24+01:00"
  ["Creator"]=>
  string(26) "pdftk 1.41 - www.pdftk.com"
  ["ModDate"]=>
  string(25) "2019-07-11T14:56:29+02:00"
  ["Producer"]=>
  string(45) "itext-paulo-155 (itextpdf.sf.net-lowagie.com)"
  ["Title"]=>
  string(38) "Probabilistic Weather Forecasting in R"
  ["Pages"]=>
  int(9)
}
于 2019-07-11T13:07:18.987 回答