Разбор PDF и получение информации о заголовке - PullRequest
0 голосов
/ 11 июля 2019

Пытаюсь разобрать содержимое PDF-файлов.В основном это научные исследования.

Вот часть, которую я пытаюсь получить:

enter image description here

Мне нужны только название статьи иИмя автора (ов).

Я использовал 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]
    );
}

Я только что проанализировал полный текст первой страницы, и тогда он вернет весь текст в простом формате.Поскольку требуемое содержимое находится перед словом ABSTRACT, я попытался разбить текст, а затем разбить строки.

И я предполагаю, что первые две строки - это заголовок, а третья строка - имя автора.До сих пор документы, подобные приведенным на скриншоте выше, дают правильные результаты.

Но проблемы возникают при следующих сценариях:

  1. Если заголовок статьи состоит из одной строки, я не понимаюне знаю это раньше руки.Так что мой код всегда будет возвращать первые две строки в виде бумажной плитки.И это может дать как название, так и имя автора как paper_title

  2. Если заголовок статьи состоит из трех строк, снова это вызовет проблемы.

  3. Если существует более 1 автора, мой код не вернет правильные данные.

Поэтому любые предложения о том, как эффективно я могу получить данные, такие как название статьи и имя автора (ов)) из научной статьи в PDF?Уверен, что все они следуют одному и тому же шаблону при создании PDF-файлов с использованием инструментов LateX.Какие-нибудь лучшие решения или подсказки?

Пожалуйста, обратите внимание, что я пытаюсь сделать это на бумаге, загруженной на моем сайте.И я использую PHP в качестве языка на стороне сервера.

Спасибо

1 Ответ

0 голосов
/ 11 июля 2019

Вы можете попробовать использовать метаданные 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)
}
...