hocvt/php-apache-tika

PHP Apache Tika绑定:从文档和图片中提取文本(含OCR)、元数据等...

v0.9.2 2020-04-24 00:28 UTC

README

Current release Package at Packagist Build status Code coverage Code quality Code insight License

PHP Apache Tika

此工具提供Apache Tika绑定,允许从文档、图片和其他格式中提取文本和元数据。

支持以下模式

  • 应用程序模式:通过命令行界面运行应用程序JAR
  • 服务器模式:向JSR 311网络服务器发送HTTP请求

服务器模式推荐,因为它比应用程序模式快5倍,但一些共享主机不允许在后台运行进程。

尽管库包含支持的版本列表,但只要Tika团队保持向后兼容性,任何版本的Apache Tika都应该兼容。因此,无需等待库更新即可使用工具的新版本。

特性

  • Apache Tika特性的简单类接口
    • 文本和HTML提取
    • 元数据提取
    • OCR识别
  • 文档的标准化元数据
  • 支持本地和远程资源
  • 无重型库依赖
  • 与Apache Tika 1.7或更高版本兼容
    • 已测试至1.24

要求

安装

使用Composer进行安装

composer require vaites/php-apache-tika

如果您想使用OCR,必须安装Tesseract

  • Fedora/CentOSsudo yum install tesseract(在Fedora 22或更高版本上使用dnf代替yum)
  • Debian/Ubuntusudo apt-get install tesseract-ocr
  • Mac OS Xbrew install tesseract(使用Homebrew

库假设tesseract二进制文件在路径中,因此您可以自行编译或使用任何其他方法安装它。

使用方法

谨慎启动Apache Tika服务器

java -jar tika-server-x.xx.jar

如果您使用的是JRE而不是JDK,则必须在Java 9或更高版本上运行

java --add-modules java.se.ee -jar tika-server-x.xx.jar

实例化类,检查JAR是否存在或服务器是否正在运行

$client = \Vaites\ApacheTika\Client::make('localhost', 9998);           // server mode (default)
$client = \Vaites\ApacheTika\Client::make('/path/to/tika-app.jar');     // app mode 

如果您想使用依赖注入,则序列化类或仅延迟检查

$client = \Vaites\ApacheTika\Client::prepare('localhost', 9998);
$client = \Vaites\ApacheTika\Client::prepare('/path/to/tika-app.jar'); 

您也可以使用URL

$client = \Vaites\ApacheTika\Client::make('http://localhost:9998');
$client = \Vaites\ApacheTika\Client::prepare('http://localhost:9998');

使用类从文档中提取文本

$language = $client->getLanguage('/path/to/your/document');
$metadata = $client->getMetadata('/path/to/your/document');

$html = $client->getHTML('/path/to/your/document');
$text = $client->getText('/path/to/your/document');

或使用它从图片中提取文本

$client = \Vaites\ApacheTika\Client::make($host, $port);
$metadata = $client->getMetadata('/path/to/your/image');

$text = $client->getText('/path/to/your/image');

您可以使用URL代替文件路径,库将下载文件并将其传递给Apache Tika。启动服务器时,不需要像这里所述的那样添加-enableUnsecureFeatures -enableFileUrl到命令行。

方法

以下是可用的完整方法列表

通用

Tika文件相关方法

$client->getMetadata($file);
$client->getRecursiveMetadata($file, 'text');
$client->getLanguage($file);
$client->getMIME($file);
$client->getHTML($file);
$client->getText($file);
$client->getMainText($file);

其他Tika相关方法

$client->getSupportedMIMETypes();
$client->getAvailableDetectors();
$client->getAvailableParsers();
$client->getVersion();

编码方法

$client->getEncoding();
$client->setEncoding('UTF-8');

支持版本相关方法

$client->getSupportedVersions();
$client->isVersionSupported($version);

设置/获取响应顺序读取的回调

$client->setCallback($callback);
$client->getCallback();

设置/获取顺序读取的块大小

$client->setChunkSize($size);
$client->getChunkSize();

启用/禁用内部远程文件下载器

$client->setDownloadRemote(true);
$client->getDownloadRemote();

命令行客户端

设置/获取JAR/Java路径(仅CLI模式)

$client->setPath($path);
$client->getPath();

$client->setJava($java);
$client->getJava();

Web客户端

设置/获取主机属性

$client->setHost($host);
$client->getHost();

$client->setPort($port);
$client->getPort();

$client->setUrl($url);
$client->getUrl();

$client->setRetries($retries);
$client->getRetries();

设置/获取 cURL 客户端选项

$client->setOptions($options);
$client->getOptions();
$client->setOption($option, $value);
$client->getOption($option);

设置/获取 cURL 客户端常用选项

$client->setTimeout($seconds);
$client->getTimeout();

故障排除

空响应或意外结果

此库仅是一个 代理,因此如果您收到空响应或意外结果,最常见的原因是 Tika 本身。一个简单的测试是使用 GUI 检查响应

  1. 不带参数运行 Tika 应用程序: java -jar tika-app-x.xx.jar
  2. 拖放您的文件或使用 文件 -> 打开 选择它
  3. 等待直到元数据出现
  4. 使用 查看 菜单获取文本或 HTML

如果结果相同,您必须查看 Tika 的 Jira 并根据需要打开一个问题。

编码

默认情况下,返回的文本使用 UTF-8 编码,但使用应用程序模式时存在一些编码问题。`Client::setEncoding()` 方法允许设置预期的编码(这将会在即将发布的 1.0 版本中修复)。

测试

测试旨在 覆盖应用程序模式和服务器模式下所有支持的 Apache Tika 版本的所有功能。有一些样本用于测试

  • sample1:文档元数据和文本提取
  • sample2:图像元数据
  • sample3:文本识别
  • sample4:不支持的媒体
  • sample5:用于回调的大量文本
  • sample6:远程调用
  • sample7:文本编码

已知问题

在测试过程中发现了一些问题,这些问题与该库无关

  • 1.9 版本在服务器模式下运行 Java 7 抛出随机的 500 错误(Unexpected RuntimeException
  • 1.14 版本在服务器模式下解析图像元数据时抛出随机错误(Expected ';', got ','
  • TIKA-2359 中所述,Tesseract 会减慢文档解析速度

集成