Gekeken of dit te doen is.
Download de Smalot PdfParser en de NL stopwoorden
https://github.com/smalot/pdfparser/archive/refs/heads/master.zip
https://github.com/stopwords-iso/stopwords-nl/archive/refs/heads/master.zip
+ Smalot [map]
+ + PdfParser [map]
+ + + [alle mappen/bestanden van PdfParser]
+ index.php [dit bestand]
+ stopwords-nl.txt [NL stopwoorden]
De 3 database functies heb ik niet uitgewerkt.
Een efficiente opslag zou er zo uit kunnen zien
Tabel "bestanden" met velden id_b en bestand (lijst met unieke pad/naar/bestand.pdf)
Tabel "woorden" met velden id_w en woord (lijst met unieke woorden)
Tabel "zoeken" met velden id_b, id_w en pagina
[CODE]
<?php
// maak recursief een array met alle pad/naar/bestand.pdf
function getPdfFilenames ($path) {
$rIterator = new RecursiveIteratorIterator(
new RecursiveDirectoryIterator($path, FilesystemIterator::SKIP_DOTS)
);
$pdfs = [];
foreach ($rIterator as $file) {
if ($file->isFile() && strtolower($file->getExtension()) == 'pdf') {
$pdfs[] = $file->getPathname();
}
}
return $pdfs;
}
// maak een array met alle woorden
function createWordArray ($text, $stopwords) {
// naar lowercase en vervang accenten
$text = mb_strtolower($text);
$accents = [
'a' => 'àáâãäå', 'c' => 'ç', 'e' => 'èéêë', 'i' => 'ìíîï',
'n' => 'ñ', 'o' => 'òóôõö', 'u' => 'ùúûü', 'y' => 'ýÿ'
];
foreach ($accents as $key => $value) {
preg_replace('/['.$value.']/u', $key, $text);
}
// verwijder alles behalve letters/cijfers/spaties
$text = preg_replace('/[^a-z0-9\s]/u', ' ', $text);
// meerdere spaties vervangen door enkele spatie
$text = preg_replace('/\s+/', ' ', $text);
// split in array van woorden
$words = explode(' ', trim($text));
// verwijder stopwoorden
$words = array_filter($words, function($word) use ($stopwords) {
return !in_array($word, $stopwords);
});
// verwijder lege strings en korte woorden
$words = array_filter($words, function($word) {
return strlen($word) >= 3;
});
// sorteer woorden en verwijder duplicaten
sort($words);
return array_unique($words);
}
// PdfParser
$dir = str_replace('\\', '/', __DIR__);
require_once $dir.'/alt_autoload.php';
use Smalot\PdfParser\Parser;
$parser = new \Smalot\PdfParser\Parser();
// array met alle pdf's (pad/naar/bestand.pdf)
$pdfFolder = 'files/clubbladen/';
$pdfFiles = getPdfFilenames ($pdfFolder);
// stopwords file
https://github.com/stopwords-iso/stopwords-nl/
$stopwords = file('stopwords-nl.txt', FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);
$stopwords = array_map('trim', $stopwords);
// maak db connectie
//$conn = dbConnect($conf);
// doorloop alle pdf's
foreach ($pdfFiles as $pdfFile) {
$pdf = $parser->parseFile($pdfFile);
$text = '';
$metaData = $pdf->getDetails();
if (isset($metaData['Pages'])) {
for ($page = 0; $page < $metaData['Pages']; $page++) {
$text = $pdf->getPages()[$page]->getText();
$words = createWordArray($text, $stopwords);
$realPage = $page + 1;
echo '<pre>';
print_r (['Bestand' => $pdfFile, 'Pagina' => $realPage]);
print_r ($words);
echo '</pre>';
//dbUpdateWords ($conn, $pdfFile, $realPage, $words);
}
}
}
// verbreek db connectie
// dbDisconnect($conn)