php apache tika
该工具为PHP提供了Apache Tika绑定,可以从文档,图像和其他格式中提取文本和元数据。
支持以下模式:
- 应用模式:通过命令行接口运行应用程序JAR
- 服务器模式:向JSR 311网络服务器提出HTTP请求
建议使用服务器模式,因为要快5倍,但是有些共享主机不允许在后台运行过程。
尽管该库包含支持版本的列表,但只要Tika Team维护向后兼容,Apache Tika的任何版本都应兼容。因此,不必等待库的更新与该工具的新版本一起使用。
特征
- 简单的类接口到Apache Tika功能:
- 文本和HTML提取
- 元数据提取
- OCR识别
- 标准的元数据文件
- 支持本地和远程资源
- 没有重量级图书馆依赖性
- 与Apache Tika 1.15或更高
- 测试高达1.28.5、2.9.3和3.1.0
- 在Linux,MacOS,Windows以及FreeBSD上工作
要求
- PHP 7.3或更高
- 多键字符串支持
- 卷曲扩展
- Apache Tika 1.15或更高
- Oracle Java或OpenJDK
- tika 1.19或更高的Java 8
- tika的Java 7从1.15到1.18
- Tesseract(OCR识别可选)
注意:受支持的PHP版本将与PHP团队的最新支持保持同步
安装
使用作曲家安装:
composer require vaites/php-apache-tika
如果要使用OCR,则必须安装Tesseract:
- fedora/centos :
sudo yum install tesseract(在22或更高的Fedora上使用DNF代替YUM) - debian/ubuntu :
sudo apt-get install tesseract-ocr - MacOS :
brew install tesseract(使用自制) - Windows :
scoop install tesseract(使用scoop)
该库假设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://l*o*c*alhost:9998 \' ); $ client = \\ Vaites \\ ApacheTika \\Client:: prepare ( \' http://l*o*c*alhost: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 ();
设置/获取Secutient的块大小:
$ client -> setChunkSize ( $ size ); $ client -> getChunkSize ();
启用/禁用内部远程文件下载器:
$ client -> setDownloadRemote ( true ); $ client -> getDownloadRemote ();
设置Fetcher名称:
$ 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 ();
设置/获取卷曲客户端选项
$ 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/tika-pipes)
$ client -> setFetcherName ( $ fetcherName )
打破变化
由于1.0版本有一些破坏的变化:
- 不支持1.15之前的Apache tika版本(使用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()方法允许设置预期的编码。
测试
测试旨在涵盖App模式和服务器模式下Apache Tika的所有受支持版本的所有功能。有一些样本可以测试:
- 样本1 :文档元数据和文本提取
- 样本2 :图像元数据
- 样本3 :文本识别
- 样本4 :不支持的媒体
- 示例5 :回调的巨大文字
- 示例6 :远程通话
- 示例7 :文本编码
- 样本8 :递归元数据
已知问题
在测试过程中发现了一些问题,与此库无关:
- apache tika 1.17及较低无法从tika-2509中所述从OCR提取文本
- Tesseract减慢文档解析,如Tika-2359中所述
集成
- Symfony2捆绑包
