text-media/file-parser

v1.8.5 2022-04-26 07:42 UTC

README

Packagist Packagist

从不同类型的文件中获取文本。

安装

安装所有必需的命令行工具(如果缺少,安装器将提示需要安装什么以及如何安装)

sudo apt-get install antiword unrtf poppler-utils

在composer.json中添加依赖

composer require text-media/file-parser

composer.json中的修改,用于自动检查必需的命令行工具

{
    "scripts": {
        "post-install-cmd": ["file-parser-check-commands.php"],
        "post-update-cmd":  ["file-parser-check-commands.php"]
    }
}

默认将检查file-parser-check-commands.php中定义的所有工具。如果需要检查特定类型,请在末尾列出文件类型。要排除某个命令,需要以"-"为前缀。例如

{
    "scripts": {
        "post-install-cmd": ["file-parser-check-commands.php doc rtf -url"],
        "post-update-cmd":  ["file-parser-check-commands.php doc rtf -url"]
    }
}

使用

使用示例

use \TextMedia\FileParser\Parser;
use \TextMedia\FileParser\ParserException;
use \TextMedia\FileParser\Parser\Parser\Pdf;

// получение списка поддерживаемых типов файлов
$types = Parser::getAvailableTypes();

// парсинг с авто-определением типа
$text = Parser::parse('/tmp/test.rtf');

// парсинг с явным указанием типа
$text = Parser::parse('/tmp/uploaded_file', 'docx');

// парсинг заранее прочитанного из файла текста
// тип - желателен, т.к. может оказаться не определён автоматически
$text = Parser::parse('<html>…</html>', 'html', false);

// явное указание парсера
$text = Pdf::parse(file_get_contents($pdf), false);

// проверка возможности парсинга файла указанного типа
try {
    $parser = Parser::getParserByType('htm');
    $text = $parser::parse($file);
} catch (ParserException $e) {
    // …
}

// проверка возможности парсинга указанного файла
try {
    $parser = Parser::getParserByFile($file);
    $text = $parser::parse($file);
} catch (ParserException $e) {
    // …
}

支持使用gzipzip解析压缩文件:存档应仅包含一个文件,该文件将在临时目录中解压,然后应用Parser::parseFile方法进行自动类型识别。

添加类型

要添加新的解析器类型,只需在src/FileParser/Parser中创建一个新的类,继承自AbstractParser(或其抽象后代)。

composer不支持安装来自命令行工具的依赖——用于检查的工具是scripts/file-parser-check-commands.php.php脚本。添加新解析器时,如果其工作需要额外的命令行工具,需要将其添加到该脚本中的$checkCommands中。