php apache tika

其他类别 2025-08-17

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/centossudo yum install tesseract (在22或更高的Fedora上使用DNF代替YUM)
  • debian/ubuntusudo apt-get install tesseract-ocr
  • MacOSbrew install tesseract (使用自制)
  • Windowsscoop 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检查响应:

  1. 在没有参数的情况下运行tika应用程序: java -jar tika-app-x.xx.jar
  2. 放下文件或使用文件 - >打开
  3. 等到元数据出现
  4. 使用视图菜单获取文本或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捆绑包
下载源码

通过命令行克隆项目:

git clone https://github.com/vaites/php-apache-tika.git