vaites / php-apache-tika
PHP Apache Tika绑定:从文档和图像(带OCR)中提取文本、元数据等...
Requires
- php: >=7.3.0
- ext-curl: *
Requires (Dev)
- filp/whoops: ^2.7
- nunomaduro/collision: ^5.11
- nunomaduro/phpinsights: ^1.14
- phpstan/phpstan: ^0.12.26
- phpunit/phpunit: ^9.0
- psy/psysh: ^0.10.8
- symfony/var-dumper: ^5.1
- dev-master
- 2.x-dev
- 1.x-dev
- v1.3.2
- v1.3.1
- v1.3.0
- v1.2.5
- v1.2.4
- v1.2.3
- v1.2.2
- v1.2.1
- v1.2.0
- v1.1.1
- v1.1.0
- v1.0.2
- v1.0.1
- v1.0.0
- 0.x-dev
- v0.9.3
- v0.9.2
- v0.9.1
- v0.9.0
- v0.8.0
- v0.7.2
- v0.7.1
- v0.7.0
- v0.6.0
- v0.5.1
- v0.5.0
- v0.4.6
- v0.4.5
- v0.4.4
- v0.4.3
- v0.4.2
- v0.4.1
- v0.4.0
- v0.3.7
- v0.3.6
- v0.3.5
- v0.3.4
- v0.3.3
- 0.3.2
- 0.3.0
- 0.2.0
- 0.1.0
- dev-TIKA-9
- dev-TIKA-8
- dev-TIKA-7
- dev-TIKA-1
- dev-TIKA-5
This package is auto-updated.
Last update: 2024-08-28 22:34:24 UTC
README
PHP Apache Tika
此工具提供了Apache Tika的PHP绑定,允许从文档、图像和其他格式中提取文本和元数据。
支持以下模式
- 应用程序模式:通过命令行界面运行应用程序JAR
- 服务器模式:向JSR 311网络服务器发送HTTP请求
建议使用服务器模式,因为它比应用程序模式快5倍,但一些共享主机不允许在后台运行进程。
尽管库包含支持的版本列表,但只要Tika团队保持向后兼容性,任何版本的Apache Tika都应该是兼容的。因此,无需等待库更新即可与工具的新版本一起工作。
特性
- Apache Tika特性的简单类接口
- 文本和HTML提取
- 元数据提取
- OCR识别
- 文档的标准化元数据
- 支持本地和远程资源
- 无重量级库依赖
- 兼容Apache Tika 1.15或更高版本
- 已测试到1.28.5和2.9.2
- 适用于Linux、macOS、Windows,可能也适用于FreeBSD
需求
- PHP 7.3或更高版本
- Apache Tika 1.15或更高版本
- Oracle Java或OpenJDK
- Java 8用于Tika 1.19或更高版本
- Java 7用于Tika 1.15至1.18
- Tesseract(用于OCR识别,可选)
注意:支持的PHP版本将与PHP团队支持的最新版本保持同步
安装
使用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`
- macOS:`brew install tesseract`(使用Homebrew)
- Windows:`scoop install tesseract`(使用Scoop)
库假设`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
添加到命令行,具体说明请参阅此处。
如果您使用Apache Tika >= 2.0.0,您可以定义一个HttpFetcher并使用选项-enableUnsecureFeatures -enableFileUrl
在启动服务器时,使服务器在传递URL而不是文件名时下载远程文件。为此,您必须使用$client->setFetcherName('yourFetcherName')
设置HttpFetcher的名称。
方法
以下是可用的方法完整列表
常见
Tika文件相关方法
$client->getMetadata($file); $client->getRecursiveMetadata($file, 'text'); $client->getLanguage($file); $client->getMIME($file); $client->getHTML($file); $client->getXHTML($file); // only CLI mode $client->getText($file); $client->getMainText($file);
其他Tika相关方法
$client->getSupportedMIMETypes(); $client->getIsMIMETypeSupported('application/pdf'); $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();
$client->setFetcherName($fetcher); // one of FileSystemFetcher, HttpFetcher, S3Fetcher, GCSFetcher, or SolrFetcher $client->getFetcherName();
命令行客户端
设置/获取JAR/Java路径(仅限CLI模式)
$client->setPath($path); $client->getPath(); $client->setJava($java); $client->getJava(); $client->setJavaArgs('-JXmx4g'); $client->getJavaArgs(); $client->setEnvVars(['LANG' => 'es_ES.UTF-8']); $client->getEnvVars();
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);
设置/获取超时
$client->setTimeout($seconds); $client->getTimeout();
设置/获取HTTP头(见TikaServer)
$client->setHeader('Foo', 'bar'); $client->getHeader('Foo'); $client->setHeaders(['Foo' => 'bar', 'Bar' => 'baz']); $client->getHeaders();
设置/获取OCR语言(见TikaOCR)
$client->setOCRLanguage($language); $client->setOCRLanguages($languages); $client->getOCRLanguages();
设置HTTP fetcher名称(仅限Tika >= 2.0.0,见https://cwiki.apache.org/confluence/display/TIKA/tika-pipes)
$client->setFetcherName($fetcherName)
破坏性更改
从1.0版本开始有一些破坏性更改
- 不支持Apache Tika版本1.15之前的版本(使用0.x版本用于1.14和更早版本)
- PHP最低要求为7.3或更高(使用0.x版本用于7.1和更早版本)
$client->getRecursiveMetadata()
返回一个预期的数组Client::getSupportedVersions()
和Client::isVersionSupported()
方法不能静态调用Client::getAvailableDetectors()
和Client::getAvailableParsers()
返回的值相同,并且有新的定义
有关更多详细信息,请参阅CHANGELOG.md。
故障排除
空响应或意外结果
此库仅是一个代理,因此如果您收到空响应或意外结果,最常见的原因是Tika本身。一个简单的测试是使用GUI来检查响应
- 不带参数运行Tika应用程序:
java -jar tika-app-x.xx.jar
- 放下您的文件或使用文件 -> 打开选择它
- 等待直到元数据出现
- 使用查看菜单获取文本或HTML
如果结果相同,您必须查看Tika的Jira并在必要时打开一个问题。
编码
默认情况下,返回的文本使用UTF-8编码,而Client::setEncoding()
方法允许设置预期的编码。
测试
测试旨在覆盖Apache Tika在app模式和服务器模式下的所有功能的所有支持版本。有几个样本用于测试
- sample1:文档元数据和文本提取
- sample2:图像元数据
- sample3:文本识别
- sample4:不支持的媒体
- sample5:用于回调的大文本
- sample6:远程调用
- sample7:文本编码
- sample8:递归元数据
已知问题
测试过程中发现了一些问题,这些问题与该库无关