Uma porta Python da biblioteca Apache Tika que disponibiliza o Tika usando o servidor Tika Rest.
Isso disponibiliza o Apache Tika como uma biblioteca Python, instalável via setuptools, pip e instalação fácil.
Para usar esta biblioteca, você precisa instalar o Java 7+ no seu sistema, pois o Tika-Python inicia o servidor Tika Rest em segundo plano.
Inspirado pela Aptivate Tika.
pip install tikapython setup.py buildpython setup.py install Para fazer isso funcionar em um ambiente desconectado, faça o download de um arquivo de servidor tika (ambos tika-server.jar e tika-server.jar.md5, que podem ser encontrados aqui) e definir a variável de ambiente tika_server_jars-sherver-standard.jart.jarning.jarnkanjar python-tika ". para /tmp/tika-server-standard.jar e execute como processo em segundo plano.
Esta é a única maneira de executar python-tika sem acesso à Internet. Sem esse conjunto, o padrão é verificar a versão Tika e puxar o mais recente do Apache.
Estes são lidos uma vez, quando o tika/tika.py é carregado inicialmente e usado por toda parte.
TIKA_VERSION - Defina como a string de versão, por exemplo, 1.12 ou padrão para a versão Tika atual.TIKA_SERVER_JAR - Defina como o URL completo como o Jar do servidor Tika remoto para baixar e cache.TIKA_SERVER_ENDPOINT - Defina como o host (local ou remoto) para o JAR do servidor Tika em execução.TIKA_CLIENT_ONLY - Se definido como true, então TIKA_SERVER_JAR é ignorado e depende do valor para TIKA_SERVER_ENDPOINT e trata o Tika como um cliente REST.TIKA_TRANSLATOR - Defina como o nome da classe totalmente qualificado (padrão para Lingo24) para a implementação do Tika Translator.TIKA_SERVER_CLASSPATH - Defina como uma string (delimitada por ':' para cada caminho adicional) para prender o caminho do frasco do servidor tika.TIKA_LOG_PATH - Defina como um diretório com permissões de gravação e os arquivos tika.log e tika-server.log serão colocados neste diretório.TIKA_PATH - Defina como um diretório com permissões de gravação e o arquivo tika_server.jar será colocado neste diretório.TIKA_JAVA - Defina o nome de tempo de execução Java, por exemplo, java ou java9TIKA_STARTUP_SLEEP - número de segundos ( float ) para esperar por verificação se o servidor Tika é lançado no tempo de execuçãoTIKA_STARTUP_MAX_RETRY - número de verificações ( int ) para tentar a inicialização do servidor Tika se lançado no tempo de execuçãoTIKA_JAVA_ARGS - Defina argumentos de tempo de execução do Java, por exemplo, -Xmx4gTIKA_LOG_FILE - Defina o nome do arquivo para o arquivo de log. Padrão: tika.log . Se for uma string vazia ( '' ), nenhum arquivo de log será criado. #!/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" ])A interface do analisador extrai texto e metadados usando a interface /rmeta. Esta é uma das melhores maneiras de extrair o conteúdo XHTML interno.
Observação:
A interface do analisador precisa da seguinte variável de ambiente definida no console para impressão do conteúdo extraído. 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" ])Opcionalmente, você pode passar o URL do servidor Tika, juntamente com a chamada, o que é útil para a execução de múltiplas instâncias ou quando o tika é prejudicado/vinculado.
parsed = parser . from_file ( '/path/to/file' , 'http://tika:9998/tika' )
string_parsed = parser . from_buffer ( 'Good evening, Dave' , 'http://tika:9998/tika' )Você também pode passar um fluxo binário
with open(file, 'rb') as file_obj:
response = tika.parser.from_file(file_obj)
Como o Tika 1.24.1 GZIP Compressão dos fluxos de entrada e saída é permitido.
A compactação de entrada pode ser alcançada com Gzip ou 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()))
E saída com o cabeçalho:
with open(file, 'rb') as file_obj:
return tika.parser.from_file(file_obj, headers={'Accept-Encoding': 'gzip, deflate'})
A interface do analisador é opcionalmente capaz de produzir o conteúdo como XHTML em vez de texto simples.
Observação:
A interface do analisador precisa da seguinte variável de ambiente definida no console para impressão do conteúdo extraído. 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. A interface Unpack lida com os metadados e a extração de texto em uma única chamada e retorna internamente um tarball de metadados e entradas de texto que são internamente descompactadas, reduzindo a carga do fio para extração.
#!/usr/bin/env python
import tika
from tika import unpack
parsed = unpack . from_file ( '/path/to/file' )A interface de detecção fornece uma classificação do tipo MIME da IANA para o arquivo fornecido.
#!/usr/bin/env python
import tika
from tika import detector
print ( detector . from_file ( '/path/to/file' ))A interface de configuração permite inspecionar a configuração do ambiente do servidor Tika, incluindo o que analisadores, tipos de MIME e detectores nos quais o servidor foi configurado.
#!/usr/bin/env python
import tika
from tika import config
print ( config . getParsers ())
print ( config . getMimeTypes ())
print ( config . getDetectors ())A interface de detecção de idiomas fornece um código de idioma de 2 caracteres texto com base no texto no arquivo fornecido.
#!/usr/bin/env python
from tika import language
print ( language . from_file ( '/path/to/file' ))A interface traduzida traduz o texto extraído automaticamente por tika do idioma de origem para o idioma de destino.
#!/usr/bin/env python
from tika import translate
print ( translate . from_file ( '/path/to/spanish' , 'es' , 'en' ))NOTA Você também pode usar um analisador e detector .From_Buffer (String | Bufferiobase) para analisar dinamicamente um buffer de string ou bytes no Python e/ou detectar seu tipo MIME. Isso é útil se você já carregou o conteúdo na memória.
string_parsed = parser . from_buffer ( 'Good evening, Dave' )
byte_data : bytes = b'B xc3 xa4 ume'
parsed = parser . from_buffer ( io . BytesIO ( byte_data ))Você pode definir o Tika para usar o modo apenas do cliente, configurando
import tika
tika . TikaClientOnly = TrueEm seguida, você pode executar qualquer um dos métodos e ele omitirá completamente a verificação para verificar se o serviço no localhost está em execução e omita imprimindo as mensagens de verificação.
Você pode atualizar o caminho de classe que o servidor Tika usa configurando o caminho de classe como um conjunto de strings delimitados. Por exemplo, se você deseja fazer com que o Tika-Python trabalhe com o GeotopicParSing, pode fazer isso, substitua os caminhos abaixo por seus próprios caminhos, conforme identificado aqui e certifique-se de ter feito isso:
Mate o servidor Tika (se já estiver em execução):
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" ] Você pode personalizar a solicitação HTTP de saída para o servidor Tika, definindo o requestOptions nos métodos .from_file e .from_buffer (analisador, descompactar, detectar, configurar, idioma, traduzir). Deve ser um dicionário de argumentos que serão passados para o método de solicitação. A documentação do método de solicitação especifica argumentos válidos. Isso substituirá quaisquer padrões, exceto url e params / data .
from tika import parser
parsed = parser . from_file ( '/path/to/file' , requestOptions = { 'timeout' : 120 }) Ao instalar o Tika-Python, você também recebe uma nova ferramenta de cliente da linha de comando, tika-python instalado no seu diretório/path/to/python/bin.
As opções e ajuda para a ferramenta de linha de comando podem ser vistas digitando tika-python sem nenhum argumento. Isso também baixará uma cópia do Jar Tika-Server e iniciará, se você ainda não o fez.
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)Envie -os para Chris A. Mattmann.
Graças ao programa DARPA MEMEX por financiar a maioria das partes originais deste trabalho.
Licença Apache, versão 2