Как я могу сделать полнотекстовый поиск файлов PDF от Perl?

Невозможно присвоить значение типа 'Array < _>' для типа 'Any?

Ошибка говорит о том, что imgl2 имеет тип Any?, но вы' пытаемся присвоить ему значение типа Array. Swift не позволяет изменять тип переменной после ее инициализации. Что вы можете сделать, это назначить imgl2 as! Array новой переменной, чтобы избежать этой ошибки.

Я также предлагаю вам взглянуть на протокол Decodable для создания моделей, соответствующих структуре JSON.

8
задан brian d foy 17 November 2008 в 03:34
поделиться

6 ответов

Поток PerlMonks здесь говорит об этой проблеме.

Кажется, что для Вашей ситуации, могло бы быть самым простым получить pdftotext (инструмент командной строки), затем можно сделать что-то как:

my @search_results = `pdftotext myfile.pdf - | grep -i -l \"$string\"`;
9
ответ дан 5 December 2019 в 10:45
поделиться

Я второе решение Adam Bellaire. Я использовал pdftotext утилиту для создания полнотекстового индекса моей библиотеки электронной книги. Это несколько медленно, но делает свое задание. Что касается полнотекстового, попробуйте PLucene или KinoSearch для хранения полнотекстового индекса.

2
ответ дан 5 December 2019 в 10:45
поделиться

Моя библиотека, CAM:: PDF, имеет поддержку извлечения текста, но это - по сути тяжелая проблема, учитывая графическую ориентацию синтаксиса PDF. Так, вывод иногда является мусором. CAM:: PDF связывает getpdftext.pl программу, или можно вызвать функциональность как так:

my $doc = CAM::PDF->new($filename) || die "$CAM::PDF::errstr\n";
for my $pagenum (1 .. $doc->numPages()) {
   my $text = $doc->getPageText($pagenum);
   print $text;
}
2
ответ дан 5 December 2019 в 10:45
поделиться

Можно хотеть посмотреть на PDF:: Ядро.

2
ответ дан 5 December 2019 в 10:45
поделиться

Самый легкий полнотекстовый индекс/seach, который я использовал, является mysql. Вы просто вставляете в таблицу с соответствующим индексом на нем. Необходимо провести некоторое время, разрабатывая относительные коэффициенты для полей (соответствие в заголовке могло бы выиграть выше, чем соответствие в теле), но это все возможно, хотя с некоторым волосатым sql.

Plucene удерживается от использования (не было никакой активной работы над ним за прошлые два года afaik) в пользу KinoSearch. KinoSearch вырос, частично, из понимания архитектурных ограничений Plucene.

Если у Вас есть ~300 pdfs, то, после того как Вы извлекли текст из PDF (принимающий PDF имеет текст и не только изображения текста ;) и в зависимости от Ваших объемов запроса, которые можно найти, grep достаточен.

Однако я настоятельно рекомендовал бы маршрут mysql/kinosearch, поскольку они охватили многие вопросы (стемминг, стоп-слова, взвешивание термина, маркерный парсинг), что Вы не извлекаете выгоду из увязания с.

KinoSearch, вероятно, быстрее, чем маршрут mysql, но маршрут mysql дает, Вы более широко использовали стандарт software/tools/developer-experience. И Вы получаете способность использовать питание sql к augement Ваши freetext поисковые запросы.

Таким образом, если Вы не говорите ОГРОМНЫЕ наборы данных и безумные объемы запроса, мои деньги были бы на mysql.

1
ответ дан 5 December 2019 в 10:45
поделиться

Вы могли попробовать Lucene (порт Perl называют Plucene). Поиски невероятно быстры, и я знаю, что PDFBox уже знает, как индексировать файлы PDF с Lucene. PDFBox является Java, но возможности существует что-то очень похожее где-нибудь в CPAN. Даже если Вы не можете найти что-то, что уже добавляет файлы PDF к индексу Lucene, это не должны быть больше, чем несколько строк кода, чтобы сделать это сами. Lucene даст Вам еще довольно много параметров поиска, чем простой поиск строки в файле.

Существует также очень быстрый и грязный путь. Текст в файле PDF на самом деле хранится как простой текст. Если Вы открываете PDF в текстовом редакторе или используете 'строки', Вы видите текст там. Двоичный спам является обычно встроенными шрифтами, изображениями, и т.д.

0
ответ дан 5 December 2019 в 10:45
поделиться
Другие вопросы по тегам:

Похожие вопросы: