Apache Tika Python库
项目描述
tika-python
Apache Tika库的Python端口,它通过Tika REST服务器使Tika可用。
这使得Apache Tika可作为Python库通过Setuptools、Pip和Easy Install安装。
要使用此库,您需要在您的系统上安装Java 7+,因为tika-python将在后台启动Tika REST服务器。
受Aptivate Tika启发。
安装(使用pip)
pip安装tika
安装(不使用pip)
python setup.py build
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 首次加载并使用后,会一直使用这些变量。
TIKA_VERSION
- 设置版本字符串,例如 1.12,或默认为当前的 Tika 版本。TIKA_SERVER_JAR
- 设置远程 Tika 服务器 jar 的完整 URL,用于下载和缓存。TIKA_SERVER_ENDPOINT
- 设置运行 Tika 服务器 jar 的主机(本地或远程)。TIKA_CLIENT_ONLY
- 如果设置为 True,则忽略TIKA_SERVER_JAR
,并依赖于TIKA_SERVER_ENDPOINT
的值,将 Tika 作为 REST 客户端处理。TIKA_TRANSLATOR
- 设置 Tika 翻译器实现的完全限定类名(默认为 Lingo24)。TIKA_SERVER_CLASSPATH
- 设置字符串(每个额外路径由 ':' 分隔),用于预置于 Tika 服务器 jar 路径之前。TIKA_LOG_PATH
- 设置具有写入权限的目录,tika.log
和tika-server.log
文件将放置在这个目录中。TIKA_PATH
- 设置具有写入权限的目录,tika_server.jar
文件将放置在这个目录中。TIKA_JAVA
- 设置 Java 运行时名称,例如java
或java9
TIKA_STARTUP_SLEEP
- 每次检查是否在运行时启动 Tika 服务器时要等待的秒数(float
)。TIKA_STARTUP_MAX_RETRY
- 尝试启动运行时 Tika 服务器启动的检查次数(int
)。TIKA_JAVA_ARGS
- 设置 Java 运行时参数,例如-Xmx4g
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 内容的较好方法之一。
注意: 解析器接口需要在控制台上设置以下环境变量以打印提取的内容。
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 而不是纯文本。
注意: 解析器接口需要在控制台上设置以下环境变量以打印提取的内容。
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,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计划为这项工作的绝大部分提供资金。
许可证
项目详情
下载文件
下载适用于您的平台的文件。如果您不确定要选择哪一个,请了解安装包的更多信息。
源分布
构建发行版
tika-2.6.0.tar.gz的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 56670eb812944eb25ed73f1b3b075aa41e7a135b74b240822f28b819e5b373da |
|
MD5 | 91983902aed1a204166611ec713a2d25 |
|
BLAKE2b-256 | fdb8055ed37d6413fef4e4af99cd7e0edc4ddfb8fc167b730b25005d212e2049 |
tika-2.6.0-py2.7.egg的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 3b136ae517db6c69c5ddee3a6a5c98e8966fedfc7c9155ebaaf3b9269121f992 |
|
MD5 | e1ca01b31ded15debea428c262edff2a |
|
BLAKE2b-256 | 86b9058aa771149aee189addfa51e0cccca7bbd1a8674505f018b3b5ab9b068d |