如何使用Apache Tika(在Scala中)通过幻灯片提取文本幻灯片?

时间:2015-10-23 15:05:27

标签: scala powerpoint apache-tika

我正在尝试使用Apache Tika从PPT中提取文本。下面的代码允许我这样做。

 val pptInputStream = new FileInputStream(pptFile)

 val autoDetectParser = new AutoDetectParser()

 val metadata = new Metadata()

 val stringWriter = new StringWriter()

 val handlerBody = new BodyContentHandler(-1)      //takes whole text (-1 == all)

 val pC = new ParseContext

 autoDetectParser.parse(pptInputStream, handlerBody, metadata, pC)

 val allSlideText = handlerWrite.toString

但是,我希望通过幻灯片分隔提取的文本。它可以通过幻灯片或作为一个整体在幻灯片中流式传输(我使用的文件根本不大),但重要的是我可以确定幻灯片#1上的文本,幻灯片#2上的文本等等。

我认为可能会有一些元数据可以帮助解决这个问题,但我没有这方面的经验。

提前感谢任何指导。

1 个答案:

答案 0 :(得分:2)

宣传回答评论......

它无法在纯文本级别完成,因为页面周围的语义信息已被丢弃

您需要做的是将PowerPoint文件解压缩为XHTML examples on how to do that from Java here on the Tika website。然后,一旦你知道了,你就会发现HTML的结构如下:

<body>
<div class="slideShow">
    <div class="slide">
       <div class="slide-master-content">
       </div>
       <div class="slide-content">
       </div>
    </div>
    <div class="slide">
       <div class="slide-content">
       </div>
    </div>
</div>
<div class="slide-notes">
</div>
</body>

因此,您将为每张幻灯片找到一个div,在其中您可以看到幻灯片本身的内容以及幻灯片母版(如果有)的内容。通过幻灯片拆分,然后抓出文本,你就在那里!