Apache Tika Python 库
项目描述
蒂卡蟒蛇
Apache Tika库的 Python 端口,可使用Tika REST Server 使 Tika 可用 。
这使得 Apache Tika 可作为 Python 库使用,可通过 Setuptools、Pip 和 Easy Install 安装。
要使用这个库,您需要在系统上安装 Java 7+,因为 tika-python 在后台启动 Tika REST 服务器。
灵感来自Aptivate Tika。
安装(带点子)
pip install tika
安装(无pip)
python setup.py build
python setup.py install
气隙环境设置
要使其在断开连接的环境中工作,请下载 tika 服务器文件并将 TIKA_SERVER_JAR 环境变量设置为 TIKA_SERVER_JAR="file:///<yourpath>/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 的值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
float
-每次检查 Tika 服务器是否在运行时启动时等待的秒数 ( )TIKA_STARTUP_MAX_RETRY
int
-如果在运行时启动,则尝试启动 Tika 服务器的检查次数 ( )TIKA_JAVA_ARGS
- 设置 java 运行时参数,例如,-Xmx4g
测试一下
解析器接口(在 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 被 dockerzed/linked 有用。
parsed = parser.from_file('/path/to/file', 'http://tika:9998/tika')
string_parsed = parser.from_buffer('Good evening, Dave', 'http://tika:9998/tika')
指定 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.
解包界面
解包接口在单个调用中处理元数据和文本提取,并在内部返回一个内部解包的元数据和文本条目的压缩包,从而减少提取的线路负载。
#!/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'))
配置界面
config 界面允许您检查 Tika Server 环境的配置,包括服务器已配置的解析器、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) 方法在 Python 中动态解析字符串缓冲区和/或检测其 MIME 类型。如果您已经将内容加载到内存中,这将很有用。
使用仅客户端模式
您可以通过设置将 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 服务器请求
您可以通过设置和方法(解析器、解包、检测、配置、语言、翻译)requestOptions
来自定义对 Tika 服务器的传出 HTTP 请求。它应该是一个将传递给请求方法的参数字典。请求方法文档指定了有效参数。这将覆盖除和/之外的任何默认值。.from_file
.from_buffer
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-python
不带任何参数键入来查看命令行工具的选项和帮助。这还将下载 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。
贡献者
- 克里斯 A. 马特曼,喷气推进实验室
- 布莱恩·D·威尔逊,喷气推进实验室
- 南加州大学赵冬妮
- 马里兰大学 Kenneth Durri
- Tyler Palsulich,纽约大学和谷歌
- Joe Germuska,西北大学
- 弗拉德·什维多夫,Profinda.com
- Diogo Vieira, Globo.com
- Aron Ahmadia,连续分析
- 南加州大学卡兰吉特·辛格
- 雷纳特·纳西罗夫,Yandex
- 黑胡子詹姆斯·布鲁金
- 亚什·坦纳,南加州大学
- 伊戈尔·托卡列夫,自由职业者
- 伊姆兰·帕克,自由职业者
- 安妮 K.迪迪埃,喷气推进实验室
- Juan Elosua,TEGRA 网络安全中心
谢谢
感谢DARPA MEMEX计划为这项工作的大部分原始部分提供资金。