#!/usr/bin/env python3 """ Batch extract OCR text layer from PDF using PyMuPDF. Outputs per-page .txt files and per-section combined files. Book: 科研費獲得の方法とコツ 第9版 """ import fitz import os PDF_PATH = "pdf/科研費方法とコツ.pdf" OUTPUT_DIR = "raw_text" # Sections: (filename_prefix, start_page, end_page) - 1-indexed SECTIONS = [ # 前付け (Front matter) ("ch00_はじめに", 3, 5), ("ch00_本書の活用法", 10, 10), ("ch00_ToDoCheckリスト", 11, 16), ("ch00_研究費一覧", 17, 19), # 第1章 科研費の概略 (p.20-74) ("ch01_1.1_科研費とは", 20, 25), ("ch01_1.2_科研費の種類", 26, 36), ("ch01_1.3_審査区分の種類", 37, 39), ("ch01_1.4_審査のしくみ", 40, 46), ("ch01_1.5_申請から採択まで", 47, 50), ("ch01_1.6_科研費の現状", 51, 59), ("ch01_1.7_基金化と制度", 60, 66), ("ch01_1.8_科研費に関する資料", 66, 69), ("ch01_1.9_他の研究費", 70, 74), # 第2章 科研費応募の戦略 (p.76-104) ("ch02_2.1_応募種目の選び方", 76, 84), ("ch02_2.2_審査区分の選び方", 85, 90), ("ch02_2.3_探究課題の調査", 91, 92), ("ch02_2.4_審査委員は誰", 93, 95), ("ch02_2.5_研究パートナー", 96, 97), ("ch02_2.6_アイデアのまとめ方", 98, 104), # 第3章 申請書の書き方 (p.106-213) ("ch03_3.1_書く前の注意点", 106, 120), ("ch03_3.2_研究課題名", 121, 127), ("ch03_3.3_研究目的と方法", 128, 139), ("ch03_3.4_学術的背景と問い", 140, 146), ("ch03_3.5_独自性と創造性", 147, 152), ("ch03_3.6_研究動向と位置づけ", 153, 154), ("ch03_3.7_何をどのように", 155, 169), ("ch03_3.8_準備状況", 170, 171), ("ch03_3.9_国際性", 172, 173), ("ch03_3.10_遂行能力と研究環境", 174, 184), ("ch03_3.11_人権の保護", 185, 186), ("ch03_3.12_最終年度前年", 186, 187), ("ch03_3.13_研究経費", 187, 190), ("ch03_3.14_研究費の実績", 191, 193), ("ch03_3.15_挑戦的研究", 194, 199), ("ch03_3.16_学振の申請書", 200, 213), # 第4章 申請書の仕上げと電子申請 (p.216-248) ("ch04_4.1_申請書の見栄え", 216, 223), ("ch04_4.2_図の挿入", 224, 229), ("ch04_4.3_電子申請の実際", 230, 243), ("ch04_4.4_最後のチェック", 244, 248), # 第5章 採択と不採択 (p.250-270) ("ch05_5.1_採択されたとき", 250, 255), ("ch05_5.2_不採択のとき", 256, 261), ("ch05_5.3_次回の応募準備", 262, 264), ("ch05_5.4_科研費以外の研究費", 265, 270), # 付録 ("appendix_QA", 271, 284), ("appendix_実例1_基盤C", 285, 298), ("appendix_実例2_挑戦的萌芽", 299, 310), ] def main(): os.makedirs(OUTPUT_DIR, exist_ok=True) doc = fitz.open(PDF_PATH) print(f"PDF has {doc.page_count} pages") # Extract per-page text files (all pages) for page_num in range(doc.page_count): page = doc[page_num] text = page.get_text("text") out_file = os.path.join(OUTPUT_DIR, f"page_{page_num+1:04d}.txt") with open(out_file, "w", encoding="utf-8") as f: f.write(text) print(f"Extracted {doc.page_count} per-page text files") # Combine per-section for name, start, end in SECTIONS: combined = [] for pg in range(start, end + 1): pg_file = os.path.join(OUTPUT_DIR, f"page_{pg:04d}.txt") with open(pg_file, "r", encoding="utf-8") as f: combined.append(f"===== Page {pg} =====\n{f.read()}") section_file = os.path.join(OUTPUT_DIR, f"{name}.txt") with open(section_file, "w", encoding="utf-8") as f: f.write("\n\n".join(combined)) print(f" {name}: pages {start}-{end}") doc.close() print("Done!") if __name__ == "__main__": main()