hocvt / php-apache-tika
PHP Apache Tika绑定:从文档和图片中提取文本(含OCR)、元数据等...
Requires
- php: >=5.4.0
- ext-curl: *
Requires (Dev)
- phpunit/phpunit: ^4.8
README
PHP Apache Tika
此工具提供Apache Tika绑定,允许从文档、图片和其他格式中提取文本和元数据。
支持以下模式
- 应用程序模式:通过命令行界面运行应用程序JAR
- 服务器模式:向JSR 311网络服务器发送HTTP请求
服务器模式推荐,因为它比应用程序模式快5倍,但一些共享主机不允许在后台运行进程。
尽管库包含支持的版本列表,但只要Tika团队保持向后兼容性,任何版本的Apache Tika都应该兼容。因此,无需等待库更新即可使用工具的新版本。
特性
- Apache Tika特性的简单类接口
- 文本和HTML提取
- 元数据提取
- OCR识别
- 文档的标准化元数据
- 支持本地和远程资源
- 无重型库依赖
- 与Apache Tika 1.7或更高版本兼容
- 已测试至1.24
要求
- PHP 5.4或更高版本
- Apache Tika 1.7或更高版本
- Oracle Java或OpenJDK
- Tika至1.9使用Java 6
- Tika 1.10或更高版本使用Java 7
- Tesseract(可选,用于OCR识别)
安装
使用Composer进行安装
composer require vaites/php-apache-tika
如果您想使用OCR,必须安装Tesseract
- Fedora/CentOS:
sudo yum install tesseract
(在Fedora 22或更高版本上使用dnf代替yum) - Debian/Ubuntu:
sudo apt-get install tesseract-ocr
- Mac OS X:
brew install tesseract
(使用Homebrew)
库假设tesseract
二进制文件在路径中,因此您可以自行编译或使用任何其他方法安装它。
使用方法
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 检查响应
- 不带参数运行 Tika 应用程序:
java -jar tika-app-x.xx.jar
- 拖放您的文件或使用 文件 -> 打开 选择它
- 等待直到元数据出现
- 使用 查看 菜单获取文本或 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 会减慢文档解析速度