Pythonならライブラリ使うことで、Excel, word, powerpoint, PDFから簡単に文字列抽出できます。
いちいち全てのファイル形式について検索とか面倒だったのでこの記事にまとめます。
目次
Word/Excel/PowerPoint/PDF抽出のサンプルコード
# Excel
import xlrd
# Word
import docx
# PowerPoint
from pptx import Presentation
# PDF
from pdfminer.converter import PDFPageAggregator
from pdfminer.layout import LAParams, LTContainer, LTTextBox
from pdfminer.pdfinterp import PDFPageInterpreter, PDFResourceManager
from pdfminer.pdfpage import PDFPage
# Word
def get_all_text_from_docx(filepath: str):
"""
Wordファイルから全文字列を取得する
"""
document = docx.Document(filepath)
return "\n".join(list(map(lambda par: par.text, document.paragraphs)))
# Excel
def print_excel_file_data(filepath: str, sheet_index: int):
"""
Excelファイルの指定したシートの文字列を出力する
"""
wb = xlrd.open_workbook(filepath)
print("sheets: {}".format(str(wb.sheet_names())))
sheet = wb.sheet_by_index(sheet_index)
for row in sheet.get_rows():
print(row)
# powerpoint
def get_all_text_from_pptx(filepath: str):
"""
PoerPointファイルの文字列を取得する
"""
presentation = Presentation(filepath)
results = []
for slide in presentation.slides:
for shape in slide.shapes:
# 文字列以外は飛ばす
if not shape.has_text_frame:
continue
for par in shape.text_frame.paragraphs:
for run in par.runs:
results.append(run.text)
return results
# PDF
def get_all_text_from_pdf(filepath: str):
# ここら辺おまじない
laparams = LAParams(detect_vertical=True)
resource_manager = PDFResourceManager()
device = PDFPageAggregator(resource_manager, laparams=laparams)
interpreter = PDFPageInterpreter(resource_manager, device)
results = []
with open(filepath, "rb") as file:
for page in PDFPage.get_pages(file):
interpreter.process_page(page)
layout = device.get_result()
results.append(get_text_list_recursively(layout))
return results
def get_text_list_recursively(layout):
# テキストならそのまま返す
if isinstance(layout, LTTextBox):
return [layout.get_text()]
# Containerはテキストなどを内包ため再帰探索
if isinstance(layout, LTContainer):
text_list = []
for child in layout:
text_list.extend(get_text_list_recursively(child))
return text_list
return []
print(get_all_text_from_docx("ファイルパス"))
print(print_excel_file_data("ファイルパス", スライド数))
print(get_all_text_from_pptx("ファイルパス"))
print(get_all_text_from_pdf("ファイルパス"))
Excel
xlrdというライブラリを使いました。
ちなみにxlwtという書き込み用のライブラリもあります。BSDライセンスです。
pip install xlwt
サンプル↓
https://note.nkmk.me/python-xlrd-xlwt-usage/
Word
python-docxというライブラリを使いした。MITライセンスです。
pip install python-docx
サンプル↓
https://pg-chain.com/python-word
Power Point
python-pptxというライブラリを使いました。MITライセンスです。
pip install python-pptx
サンプル↓
https://qiita.com/code_440/items/9998d97b480db82ef738
pdfminerというライブラリを使いました。MITライセンスです。
pip install pdfminer.six
サンプル↓