如何使用 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 拆分它,然后抓取文本,你就在那里!
我正在尝试使用 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 拆分它,然后抓取文本,你就在那里!