3

尝试使用 jnius 运行 tike-app 但遇到问题(macOS Sierra、Java 1.8 JDK、Python 2.7 和 Python 3.6)一切正常(tika.detect 的输出正常)直到parseToString命令。如果您运行此命令,似乎会弹出一个炫耀的窗口(也使用 java 程序进行了测试,并且可以正常工作)。但是使用 jnius 运行它会停止工作,并且没有输出也没有错误。

import os

os.environ['CLASSPATH'] = "tika-app-1.14.jar"
from jnius import autoclass
from jnius import JavaException

# Import the Java classes
Tika = autoclass('org.apache.tika.Tika')
Metadata = autoclass('org.apache.tika.metadata.Metadata')
File = autoclass('java.io.File')

# Raise an exception and continue if parsing fails
try:
    file = File('./source/test.doc')
    tika = Tika()
    meta = Metadata()
    detectText = tika.detect(file)
    print(detectText) # Working the output is: application/msword
    contentText = tika.parseToString(file) #here it stops no further steps are executed
    print(contentText)
except (JavaException,UnicodeDecodeError) as e:
    print("ERROR: %s" % (e))
4

1 回答 1

1

最后我找到了解决方案。JVM 缺少告诉 tiki.jar 使用无头模式的选项。

#Config have to be before import minus
import jnius_config
jnius_config.add_options('-Djava.awt.headless=true')

import os
os.environ['CLASSPATH'] = "tika-app-1.14.jar"

from jnius import autoclass

## Import the Java classes we are going to need
Tika = autoclass('org.apache.tika.Tika')
Metadata = autoclass('org.apache.tika.metadata.Metadata')
FileInputStream = autoclass('java.io.FileInputStream')

tika = Tika()
meta = Metadata()
text = tika.parseToString(FileInputStream("./source/test.doc"), meta)
print(text)
于 2017-05-15T08:25:56.203 回答