【发布时间】:2016-03-15 00:08:32
【问题描述】:
我有一个小型库,它利用 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 实现的人。
【问题讨论】:
-
Tika 1.2 绝对是古老的!当你升级到最近的东西时会发生什么?
-
@Gagravarr - 我会更新并回复你。谢谢!
-
@Gagravarr - 我更新到了最新的 Tika .NET 库和其他依赖项,它就像一个魅力。谢谢! - 如果您想发布答案,我会给您。
-
如果您想要为您做这件事的东西,请查看 TikaOnDotnet。 kevm.github.io/tikaondotnet
标签: java c# noclassdeffounderror apache-tika ikvm