Невозможно присвоить значение типа 'Array < _>' для типа 'Any?
blockquote>Ошибка говорит о том, что
imgl2
имеет типAny?
, но вы' пытаемся присвоить ему значение типаArray
. Swift не позволяет изменять тип переменной после ее инициализации. Что вы можете сделать, это назначитьimgl2 as! Array
новой переменной, чтобы избежать этой ошибки.Я также предлагаю вам взглянуть на протокол
Decodable
для создания моделей, соответствующих структуре JSON.
Поток PerlMonks здесь говорит об этой проблеме.
Кажется, что для Вашей ситуации, могло бы быть самым простым получить pdftotext (инструмент командной строки), затем можно сделать что-то как:
my @search_results = `pdftotext myfile.pdf - | grep -i -l \"$string\"`;
Я второе решение Adam Bellaire. Я использовал pdftotext утилиту для создания полнотекстового индекса моей библиотеки электронной книги. Это несколько медленно, но делает свое задание. Что касается полнотекстового, попробуйте PLucene или KinoSearch для хранения полнотекстового индекса.
Моя библиотека, 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;
}
Самый легкий полнотекстовый индекс/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.
Вы могли попробовать Lucene (порт Perl называют Plucene). Поиски невероятно быстры, и я знаю, что PDFBox уже знает, как индексировать файлы PDF с Lucene. PDFBox является Java, но возможности существует что-то очень похожее где-нибудь в CPAN. Даже если Вы не можете найти что-то, что уже добавляет файлы PDF к индексу Lucene, это не должны быть больше, чем несколько строк кода, чтобы сделать это сами. Lucene даст Вам еще довольно много параметров поиска, чем простой поиск строки в файле.
Существует также очень быстрый и грязный путь. Текст в файле PDF на самом деле хранится как простой текст. Если Вы открываете PDF в текстовом редакторе или используете 'строки', Вы видите текст там. Двоичный спам является обычно встроенными шрифтами, изображениями, и т.д.