我有一个小型库,利用IKVM运行Tika(1.2),以便提取在Lucene中使用的文本和元数据。我从我们正在使用的CMS中获取文档和图像路径,并将它们传递到此处:
public TextExtractionResult Extract(string filePath)
{
var parser = new AutoDetectParser();
var metadata = new Metadata();
var parseContext = new ParseContext();
Class parserClass = parser.GetType();
parseContext.set(parserClass, parser);
try
{
// Attempt to fix ImageParser "NoClassDefFoundError"
java.lang.System.setProperty("java.awt.headless", "true");
var file = new File(filePath);
var url = file.toURI().toURL();
using (InputStream inputStream = TikaInputStream.get(url, metadata))
{
parser.parse(inputStream, getTransformerHandler(), metadata, parseContext);
inputStream.close();
}
return AssembleExtractionResult(_outputWriter.toString(), metadata);
}
catch (Exception ex)
{
throw new ApplicationException("Extraction of text from the file '{0}' failed.".ToFormat(filePath), ex);
}
}
仅当文件为.png
时,才会出现此错误:
好像很可能来自Tika的ImageParser
。
对于那些感兴趣的人 - 您可以在此处看到getTransformerHandler()
:
private TransformerHandler getTransformerHandler()
{
var factory = TransformerFactory.newInstance() as SAXTransformerFactory;
TransformerHandler handler = factory.newTransformerHandler();
handler.getTransformer().setOutputProperty(OutputKeys.METHOD, "text");
handler.getTransformer().setOutputProperty(OutputKeys.INDENT, "yes");
handler.getTransformer().setOutputProperty(OutputKeys.INDENT, "UTF-8");
_outputWriter = new StringWriter();
handler.setResult(new StreamResult(_outputWriter));
return handler;
}
我环顾四周,一直指着无头跑,所以我已经试过没有运气了。因为这是IKVM中的C#实现,所以缺少什么?据我所知,它适用于所有其他文档(.jpeg
,.docx
,.pdf
等。
感谢那些比我更了解Tika + IKVM实施的人。
答案 0 :(得分:1)
Apache Tika 1.2于2012年7月17日发布,此后there have been a lot of fixes and improvements发布
你应该升级到最多recent version of Apache Tika(写作时为1.12),这应该可以解决你的问题