使用Python从多个PowerPoint文件中提取文本

11

我正在尝试寻找一种方法来查看一个文件夹并搜索其中所有幻灯片文档的内容,以查找特定的字符串,最好使用Python。当找到这些字符串时,我希望报告该字符串之后的文本以及在其中发现的文档。我想编译信息并在CSV文件中报告。

到目前为止,我只找到了olefil包,https://bitbucket.org/decalage/olefileio_pl/wiki/Home。它提供了特定文档中包含的所有文本,这不是我要做的。请帮忙。


4
嗨Kacey!欢迎来到Stackoverflow!在这里,我们帮助人们修复和有时重写他们现有的代码,以使其正确运行。恐怕你的问题有点不适合在SO网站上提问。这是为什么:你基本上正在问“如何编写一些代码来执行x,然后y,然后z”。尽管这类问题可能是适当的,但你应该展示一下你已经尝试过什么。在提问之前,先试着解决你的问题。谁知道呢,也许你自己就可以解决它!如果你尝试过的方法没有起作用,我们会很乐意帮助你解决问题。祝你好运! - Christian Dean
文件类型为“.pptx”的文件是压缩文件。 - Marichyasana
5个回答

12

实际工作

如果你想提取文本:

  • 从pptx中导入Presentation(pip install python-pptx)
  • 对于文件目录中的每个文件(使用glob模块)
  • 查看每个幻灯片和每个形状中的所有内容
  • 如果有一个带有文本属性的形状,打印出shape.text

from pptx import Presentation
import glob

for eachfile in glob.glob("*.pptx"):
    prs = Presentation(eachfile)
    print(eachfile)
    print("----------------------")
    for slide in prs.slides:
        for shape in slide.shapes:
            if hasattr(shape, "text"):
                print(shape.text)

1
另外,如果抛出 PackageNotFoundError 错误,可以通过传递文件对象来修复它:f = open (<filepath>,“rb”),然后 prs = Presentation(f) - Viseshini Reddy
Python 2.7中的os.listdir()命令如果没有读取类似于'os.listdir('。'的内容,则不会起作用。除此之外,它对我来说非常有效。 - Tensigh
是的,在Python 2.7中你必须使用os.listdir('.')。我打算改变这段代码。 - PythonProgrammi
1
这个解决方案对我很有效。唯一需要注意的是,Python包被称为python-pptx,因此安装命令应该是“pip install python-pptx”。 - mskoryk

6

tika-python

Python版本的Apache Tika库,根据文档,Apache Tika支持从超过1500个文件格式中提取文本。

注意: 它还可以与 pyinstaller 非常好地兼容。

使用pip安装:

pip install tika

示例:

#!/usr/bin/env python
from tika import parser
parsed = parser.from_file('/path/to/file')
print(parsed["metadata"]) #To get the meta data of the file
print(parsed["content"]) # To get the content of the file

官方链接到GitHub


这个工作得很好,谢谢!我忘记过滤到pptx了,它包括了pdf。从目前的情况来看,我可以完美地阅读它们。 - Jeremy Giaco

4

python-pptx可以用来实现你所提出的功能。大致上,你需要像这样做(以下是整体思路,不是可用代码):

from pptx import Presentation

for pptx_filename in directory:
    prs = Presentation(pptx_filename)
    for slide in prs.slides:
        for shape in slide.shapes:
            print shape.text

您需要添加有关搜索形状文本以查找关键字符串并将其添加到CSV文件或其他文件的部分,但是这种一般方法应该完全可行。我会留给您处理更细节的问题 :)


这不适用于PPT文件,仅适用于PPTX文件。 - Arun Kumar
由于并非所有形状(例如图像)都具有文本属性,因此简单的检查可以避免异常: if hasattr(shape, 'text'): print(shape.text) - Ray Walker

0

Textract-Plus

使用 textract-plus,它可以从大多数文档扩展名中提取文本,包括 pptx 和 pptm。参考文档

安装-

pip install textract-plus

示例-

import textractplus as tp
text=tp.process('path/to/yourfile.pptx')

针对您的情况 -

import os
import pandas as pd
import textractplus as tp
files_csv=[]
your_dir='.'
for f in os.listdir(your_dir):
    if f.endswith('pptx') or f.endswith('pptm'):
        text=tp.process(os.join(your_dir,f))
        files_csv.append([f,text])
pd.Dataframe(files_csv,columns=['filename','text']).to_csv('your_csv.csv')

这段代码将从目录中获取所有的pptx和pptm文件,并创建一个CSV文件,其中第一列为文件名,第二列为从该文件中提取的文本。


0
import os
import textract
files_csv = []
your_dir = '.'

for f in os.listdir(your_dir):
   if f.endswith('pptx') or f.endswith('pptm'):
      text = tp.process(os.path.join('sample.pptx'))
         print(text)
        

对于已经有很好答案的老问题,新的回答应该包含足够的解释,说明它们如何补充其他答案。 - Gert Arnold

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接