pip install python-pptx
pip install pdfplumber
pip install python-docx
apt-get install antiword
apt-get install libreoffice
def _parse_pptx(self):
if not os.path.isfile(self.file_path):
print(f"[WARNING] can't find {self.file_path}")
txt_list = []
prs = Presentation(self.file_path)
for slide in prs.slides:
for shape in slide.shapes:
if not shape.has_text_frame:
continue
for paragraph in shape.text_frame.paragraphs:
for run in paragraph.runs:
txt_list.append(run.text)
return txt_list
def _parse_docx(self):
if not os.path.isfile(self.file_path):
print(f"[WARNING] can't find {self.file_path}")
txt_list = []
doc = Document(self.file_path)
for paragraph in doc.paragraphs:
txt_list.append(paragraph.text + '\n')
return txt_list
def _parse_pdf(self):
if not os.path.isfile(self.file_path):
print(f"[WARNING] can't find {self.file_path}")
txt_list = []
with pdfplumber.open(self.file_path) as pdf:
for page in pdf.pages:
txt_list.append(page.extract_text())
return txt_list
pip install pypiwin32
INFO: pip is looking at multiple versions of pypiwin32 to determine which version is compatible with other requirements. This could take a while.
Using cached pypiwin32-219.zip (4.8 MB)
Preparing metadata (setup.py) ... error
error: subprocess-exited-with-error
× python setup.py egg_info did not run successfully.
│ exit code: 1
╰─> [7 lines of output]
Traceback (most recent call last):
File "" , line 2, in <module>
File "" , line 34, in <module>
File "/tmp/pip-install-5ufsbmju/pypiwin32_d42420d9531d46289d9e8ad3dd35073f/setup.py", line 121
print "Building pywin32", pywin32_version
^
SyntaxError: Missing parentheses in call to 'print'. Did you mean print("Building pywin32", pywin32_version)?
[end of output]
note: This error originates from a subprocess, and is likely not a problem with pip.
error: metadata-generation-failed
× Encountered error while generating package metadata.
╰─> See above for output.
note: This is an issue with the package mentioned above, not pip.
hint: See above for details.
以下方法可以解决,但是python解析doc文档,文字的中间会有莫名的换行符,建议输入尽量用最新版的docx格式的文档。
在 Ubuntu 上读取 .doc 文件可以使用 antiword 工具,它可以将 Microsoft Word 文档转换为文本。你可以通过安装 antiword 并在 Python 中使用 subprocess 模块来实现。
以下是一个示例代码:
sudo apt-get install antiword
import subprocess
def doc_to_text(doc_file):
process = subprocess.Popen(['antiword', doc_file], stdout=subprocess.PIPE)
output, _ = process.communicate()
return output.decode('utf-8')
# 示例用法
doc_file = 'example.doc' # 替换成你的.doc文件名
text = doc_to_text(doc_file)
# 将文本保存到txt文件
with open('output.txt', 'w', encoding='utf-8') as file:
file.write(text)
在上述代码中,我们定义了一个名为 doc_to_text 的函数,它接受一个 .doc 文件的路径作为参数。函数使用 subprocess.Popen 调用 antiword,将其输出捕获,并将其解码为 UTF-8 字符串。
示例用法中,你需要将 ‘example.doc’ 替换为你的 .doc 文件名。运行这段代码后,它会将 .doc 文件的内容转换为文本,并保存到名为 output.txt 的文本文件中。
请注意,antiword 可能无法处理包含复杂格式、表格等的 .doc 文件。如果你需要处理这些特殊情况,可能需要考虑使用更复杂的工具或库。
直接解析ppt发现很难,这里把ppt转为pdf,然后再把pdf转txt
sudo apt install libreoffice
@staticmethod
def convert_ppt_to_pdf(ppt_file, output_folder="/home/gykj/thomascai/data/Archive1024/new_Archive.zip"):
output_file = os.path.join(output_folder, os.path.splitext(os.path.basename(ppt_file))[0] + ".pdf")
cmd = f"soffice --headless --convert-to pdf --outdir {output_folder} {ppt_file}"
subprocess.run(cmd, shell=True)
print(f"Successfully converted {ppt_file} to {output_file}")
return output_file
def _parse_ppt(self):
output_file = self.convert_ppt_to_pdf(self.file_path)
self._set_file_path(output_file)
self._parse_pdf()
pip install PyMuPDF
由于页与页之间的连接原因,pdf转markdown先
(未完待续,关注不迷路,谢谢~)