【问题标题】:Can I use Tika for content extraction on Google App Engine?我可以在 Google App Engine 上使用 Tika 进行内容提取吗?
【发布时间】:2013-12-05 07:29:06
【问题描述】:
我正在开发一项网络服务,该服务需要从上传的文档(PDF、PowerPoint、Word 等)中提取内容,并且我想将其托管在 Google App Engine 上以降低成本。如果没有运行 Google Compute VM 来运行 Solr/Tika 作为服务器,我有哪些选择?我可以使用 App Engine 的 Java 托管来包装 Tika 并返回内容吗?
应用流程如下所示:
- 用户上传文档。 Worker 任务被放入队列中。
- Worker 任务被消耗,触发将文件名发送到 Solr 以进行 Tika 提取。这个过程可以假设是一个 Java 应用程序读取文件的内容并将它们发送到 Tika。
- 内容存储在全文搜索引擎和数据库中。
使用任务队列执行 Tika 命令行应用似乎是不可能的。
【问题讨论】:
标签:
java
google-app-engine
solr
apache-tika
【解决方案1】:
简答:
它的大部分功能都不是开箱即用的。
太多的代码依赖于File 对象,并创建了 GAE 中不存在的临时File 对象。
长答案:
它是开源的,您可以修改代码并将调用采用 File 对象的方法的内容更改为采用 InputStream 对象,然后您可以处理存在于 Blobstore 或 @987654326 中的内容@。
这是我现在正在破解的一个示例:
@NotNull
public static Metadata readMetadata(@NotNull File file) throws JpegProcessingException, IOException
{
JpegSegmentReader segmentReader = new JpegSegmentReader(file);
return extractMetadataFromJpegSegmentReader(segmentReader.getSegmentData());
}
哪里有这个与File 对象无关的完美调用:
@NotNull
public static Metadata readMetadata(@NotNull InputStream inputStream, final boolean waitForBytes) throws JpegProcessingException
{
JpegSegmentReader segmentReader = new JpegSegmentReader(inputStream, waitForBytes);
return extractMetadataFromJpegSegmentReader(segmentReader.getSegmentData());
}