跳转到主要内容

Apache Tika Python库

项目描述

Build Status Coverage Status

tika-python

Apache Tika库的Python端口,它通过Tika REST服务器使Tika可用。

这使得Apache Tika可作为Python库通过Setuptools、Pip和Easy Install安装。

要使用此库,您需要在您的系统上安装Java 7+,因为tika-python将在后台启动Tika REST服务器。

Aptivate Tika启发。

安装(使用pip)

  1. pip安装tika

安装(不使用pip)

  1. python setup.py build
  2. python setup.py install

断网环境设置

要在断网环境中运行此程序,请下载一个tika服务器文件(包括tika-server.jar和tika-server.jar.md5,可以在这里找到)并将环境变量TIKA_SERVER_JAR设置为TIKA_SERVER_JAR="file:////tika-server.jar",这成功告诉python-tika“下载”此文件并将其移动到/tmp/tika-server.jar,并在后台运行。

这是在没有互联网访问的情况下运行 python-tika 的唯一方法。如果没有此设置,默认情况下会检查 Tika 版本并在每次从 Apache 拉取最新版本。

环境变量

这些变量只读取一次,当 tika/tika.py 首次加载并使用后,会一直使用这些变量。

  1. TIKA_VERSION - 设置版本字符串,例如 1.12,或默认为当前的 Tika 版本。
  2. TIKA_SERVER_JAR - 设置远程 Tika 服务器 jar 的完整 URL,用于下载和缓存。
  3. TIKA_SERVER_ENDPOINT - 设置运行 Tika 服务器 jar 的主机(本地或远程)。
  4. TIKA_CLIENT_ONLY - 如果设置为 True,则忽略 TIKA_SERVER_JAR,并依赖于 TIKA_SERVER_ENDPOINT 的值,将 Tika 作为 REST 客户端处理。
  5. TIKA_TRANSLATOR - 设置 Tika 翻译器实现的完全限定类名(默认为 Lingo24)。
  6. TIKA_SERVER_CLASSPATH - 设置字符串(每个额外路径由 ':' 分隔),用于预置于 Tika 服务器 jar 路径之前。
  7. TIKA_LOG_PATH - 设置具有写入权限的目录,tika.logtika-server.log 文件将放置在这个目录中。
  8. TIKA_PATH - 设置具有写入权限的目录,tika_server.jar 文件将放置在这个目录中。
  9. TIKA_JAVA - 设置 Java 运行时名称,例如 javajava9
  10. TIKA_STARTUP_SLEEP - 每次检查是否在运行时启动 Tika 服务器时要等待的秒数(float)。
  11. TIKA_STARTUP_MAX_RETRY - 尝试启动运行时 Tika 服务器启动的检查次数(int)。
  12. TIKA_JAVA_ARGS - 设置 Java 运行时参数,例如 -Xmx4g
  13. TIKA_LOG_FILE - 设置日志文件的名称。默认:tika.log。如果它是空字符串(''),则不创建日志文件。

测试它

解析器接口(在 REST 之前的向后兼容)

#!/usr/bin/env python
import tika
tika.initVM()
from tika import parser
parsed = parser.from_file('/path/to/file')
print(parsed["metadata"])
print(parsed["content"])

解析器接口

解析器接口使用 /rmeta 接口提取文本和元数据。这是获取内部 XHTML 内容的较好方法之一。

注意:Alert Icon 解析器接口需要在控制台上设置以下环境变量以打印提取的内容。 export PYTHONIOENCODING=utf8

#!/usr/bin/env python
import tika
from tika import parser
parsed = parser.from_file('/path/to/file')
print(parsed["metadata"])
print(parsed["content"])

可选地,您可以将 Tika 服务器 URL 与调用一起传递,这在多实例执行或 Tika 被docker化/链接时很有用。

parsed = parser.from_file('/path/to/file', 'http://tika:9998/tika')
string_parsed = parser.from_buffer('Good evening, Dave', 'http://tika:9998/tika')

您还可以传递一个二进制流

with open(file, 'rb') as file_obj:
    response = tika.parser.from_file(file_obj)

Gzip 压缩

从 Tika 1.24.1 开始,允许输入和输出流的 gzip 压缩。

输入压缩可以使用 gzip 或 zlib 实现

    import zlib 

    with open(file, 'rb') as file_obj:
        return tika.parser.from_buffer(zlib.compress(file_obj.read()))

...

    import gzip
 
    with open(file, 'rb') as file_obj:
        return tika.parser.from_buffer(gzip.compress(file_obj.read()))

输出时使用头部

    with open(file, 'rb') as file_obj:
        return tika.parser.from_file(file_obj, headers={'Accept-Encoding': 'gzip, deflate'})

指定输出格式为 XHTML

解析器接口可选地将内容输出为 XHTML 而不是纯文本。

注意:Alert Icon 解析器接口需要在控制台上设置以下环境变量以打印提取的内容。 export PYTHONIOENCODING=utf8

#!/usr/bin/env python
import tika
from tika import parser
parsed = parser.from_file('/path/to/file', xmlContent=True)
print(parsed["metadata"])
print(parsed["content"])

# Note: This is also available when parsing from the buffer.

解包接口

解包接口在一个调用中处理元数据和文本提取,并在内部返回一个包含元数据和文本条目的 tarball,这些条目在内部解包,从而减少了提取的负载。

#!/usr/bin/env python
import tika
from tika import unpack
parsed = unpack.from_file('/path/to/file')

检测接口

检测接口为提供的文件提供 IANA MIME 类型分类。

#!/usr/bin/env python
import tika
from tika import detector
print(detector.from_file('/path/to/file'))

配置接口

配置接口允许您检查 Tika 服务器环境配置,包括服务器配置了哪些解析器、MIME 类型和解码器。

#!/usr/bin/env python
import tika
from tika import config
print(config.getParsers())
print(config.getMimeTypes())
print(config.getDetectors())

语言检测接口

语言检测接口根据提供的文件中的文本提供 2 个字符的语言代码。

#!/usr/bin/env python
from tika import language
print(language.from_file('/path/to/file'))

翻译接口

翻译接口自动将 Tika 从源语言翻译到目标语言提取的文本。

#!/usr/bin/env python
from tika import translate
print(translate.from_file('/path/to/spanish', 'es', 'en'))

使用缓冲区

注意,您还可以使用Parser和Detector的.from_buffer(string|BufferedIOBase)方法在Python中动态解析字符串或字节缓冲区,并检测其MIME类型。如果您已经将内容加载到内存中,这很有用。

string_parsed = parser.from_buffer('Good evening, Dave')
byte_data: bytes = b'B\xc3\xa4ume'
parsed = parser.from_buffer(io.BytesIO(byte_data))

使用仅客户端模式

您可以通过设置以下内容将Tika设置为仅客户端模式:

import tika
tika.TikaClientOnly = True

然后您可以运行任何方法,它将完全跳过检查本地主机上的服务是否正在运行,并跳过打印检查消息。

更改Tika类路径

您可以通过将类路径设置为以':'分隔的字符串集合来更新Tika服务器使用的类路径。例如,如果您想将Tika-Python与GeoTopicParsing一起使用,您可以这样做,将下面的路径替换为您自己的路径,如此处所述,并确保您已经这样做

停止Tika服务器(如果已经在运行)

ps aux | grep java | grep Tika
kill -9 PID
import tika.tika
import os
from tika import parser
home = os.getenv('HOME')
tika.tika.TikaServerClasspath = home + '/git/geotopicparser-utils/mime:'+home+'/git/geotopicparser-utils/models/polar'
parsed = parser.from_file(home + '/git/geotopicparser-utils/geotopics/polar.geot')
print parsed["metadata"]

自定义Tika服务器请求

您可以通过在.from_file和.from_buffer方法(解析器、解包、检测、配置、语言、翻译)上设置.requestOptions来自定义发送到Tika服务器的HTTP请求。它应该是一个字典,其中包含将传递给请求方法的参数。有关有效参数的说明,请参阅请求方法文档。这将为除.url和.params / data之外的所有默认值提供覆盖。

from tika import parser
parsed = parser.from_file('/path/to/file', requestOptions={'timeout': 120})

新的命令行客户端工具

当您安装Tika-Python时,您还会得到一个新的命令行客户端工具,tika-python,安装在您的/path/to/python/bin目录中。

可以通过不传递任何参数来查看命令行工具的选项和帮助。这将还会下载tika-server jar的副本并在您尚未这样做的情况下启动它。

tika.py [-v] [-o <outputDir>] [--server <TikaServerEndpoint>] [--install <UrlToTikaServerJar>] [--port <portNumber>] <command> <option> <urlOrPathToFile>

tika.py parse all test.pdf test2.pdf                   (write output JSON metadata files for test1.pdf_meta.json and test2.pdf_meta.json)
tika.py detect type test.pdf                           (returns mime-type as text/plain)
tika.py language file french.txt                       (returns language e.g., fr as text/plain)
tika.py translate fr:en french.txt                     (translates the file french.txt from french to english)
tika.py config mime-types                              (see what mime-types the Tika Server can handle)

A simple python and command-line client for Tika using the standalone Tika server (JAR file).
All commands return results in JSON format by default (except text in text/plain).

To parse docs, use:
tika.py parse <meta | text | all> <path>

To check the configuration of the Tika server, use:
tika.py config <mime-types | detectors | parsers>

Commands:
  parse  = parse the input file and write a JSON doc file.ext_meta.json containing the extracted metadata, text, or both
  detect type = parse the stream and 'detect' the MIME/media type, return in text/plain
  language file = parse the file stream and identify the language of the text, return its 2 character code in text/plain
  translate src:dest = parse and extract text and then translate the text from source language to destination language
  config = return a JSON doc describing the configuration of the Tika server (i.e. mime-types it
             can handle, or installed detectors or parsers)

Arguments:
  urlOrPathToFile = file to be parsed, if URL it will first be retrieved and then passed to Tika

Switches:
  --verbose, -v                  = verbose mode
  --encode, -e           = encode response in UTF-8
  --csv, -c    = report detect output in comma-delimited format
  --server <TikaServerEndpoint>  = use a remote Tika Server at this endpoint, otherwise use local server
  --install <UrlToTikaServerJar> = download and exec Tika Server (JAR file), starting server on default port 9998

Example usage as python client:
-- from tika import runCommand, parse1
-- jsonOutput = runCommand('parse', 'all', filename)
 or
-- jsonOutput = parse1('all', filename)

问题,评论?

发送给Chris A. Mattmann

贡献者

  • Chris A. Mattmann,JPL
  • Brian D. Wilson,JPL
  • Dongni Zhao,USC
  • Kenneth Durri,马里兰大学
  • Tyler Palsulich,纽约大学 & Google
  • Joe Germuska,西北大学
  • Vlad Shvedov,Profinda.com
  • Diogo Vieira,Globo.com
  • Aron Ahmadia,Continuum Analytics
  • Karanjeet Singh,USC
  • Renat Nasyrov,Yandex
  • James Brooking,Blackbeard
  • Yash Tanna,USC
  • Igor Tokarev,自由职业者
  • Imraan Parker,自由职业者
  • Annie K. Didier,JPL
  • Juan Elosua,TEGRA网络安全中心
  • Carina de Oliveira Antunes,CERN

感谢

感谢DARPA MEMEX计划为这项工作的绝大部分提供资金。

许可证

Apache许可证,版本2

项目详情


下载文件

下载适用于您的平台的文件。如果您不确定要选择哪一个,请了解安装包的更多信息。

源分布

tika-2.6.0.tar.gz (27.5 kB 查看哈希值)

上传时间

构建发行版

tika-2.6.0-py2.7.egg (59.5 kB 查看哈希值)

上传时间

由以下支持