如何使用 Apache Tika(在 Scala 中)逐张提取文本?

How can I extract text slide by slide using Apache Tika (in Scala)?

我正在尝试使用 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 上等

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

提前感谢您的指导。

正在提升对答案的评论...

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

您需要做的是将 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,在其中您将能够看到幻灯片本身是什么,以及幻灯片母版(如果有)的内容。通过幻灯片 divs 拆分它,然后抓取文本,你就在那里!