import%20marimo%0A%0A__generated_with%20%3D%20%220.24.0%22%0Aapp%20%3D%20marimo.App(width%3D%22medium%22)%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_(mo)%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20%23%20RAG%20%E3%82%B7%E3%82%B9%E3%83%86%E3%83%A0%E5%90%91%E3%81%91%20PDF%20%E3%81%8B%E3%82%89%20Markdown%20%E3%81%B8%E3%81%AE%E5%A4%89%E6%8F%9B%0A%0A%20%20%20%20PDF%20%E3%82%92%20Markdown%20%E3%81%AB%E5%A4%89%E6%8F%9B%E3%81%99%E3%82%8B%E5%B7%A5%E7%A8%8B%E3%81%AF%E3%80%81RAG%20(Retrieval-Augmented%20Generation)%0A%20%20%20%20%E3%82%B7%E3%82%B9%E3%83%86%E3%83%A0%E3%81%AE%E6%A4%9C%E7%B4%A2%E5%93%81%E8%B3%AA%E3%82%92%E5%B7%A6%E5%8F%B3%E3%81%97%E3%81%BE%E3%81%99%E3%80%82Markdown%20%E3%81%AF%E8%A6%8B%E5%87%BA%E3%81%97%E3%80%81%E3%83%AA%E3%82%B9%E3%83%88%E3%80%81%E8%A1%A8%E3%80%81%E3%82%B3%E3%83%BC%E3%83%89%E3%80%81%0A%20%20%20%20%E6%95%B0%E5%BC%8F%E3%81%AA%E3%81%A9%E3%81%AE%E6%A7%8B%E9%80%A0%E3%82%92%E4%BF%9D%E3%81%A1%E3%81%AA%E3%81%8C%E3%82%89%E8%BB%BD%E9%87%8F%E3%81%A7%E3%81%82%E3%82%8A%E3%80%81%E8%BF%BD%E5%8A%A0%E3%81%AE%E5%89%8D%E5%87%A6%E7%90%86%E3%81%AA%E3%81%97%E3%81%A7%20LLM%20%E3%81%AB%E6%B8%A1%E3%81%9B%E3%81%BE%E3%81%99%E3%80%82%0A%0A%20%20%20%20%E3%81%93%E3%81%AE%E3%83%8E%E3%83%BC%E3%83%88%E3%83%96%E3%83%83%E3%82%AF%E3%81%AF%E3%83%AD%E3%83%BC%E3%82%AB%E3%83%AB%E5%AE%9F%E8%A1%8C%E7%94%A8%E3%81%A7%E3%81%99%E3%80%82%E5%85%A5%E5%8A%9B%20PDF%20%E3%81%A8%E5%87%BA%E5%8A%9B%E5%85%88%E3%82%92%E6%8C%87%E5%AE%9A%E3%81%97%E3%81%A6%E3%81%8B%E3%82%89%E3%80%81%0A%20%20%20%20%E5%A4%89%E6%8F%9B%E3%82%92%E5%AE%9F%E8%A1%8C%E3%81%97%E3%81%A6%E3%81%8F%E3%81%A0%E3%81%95%E3%81%84%E3%80%82%E5%A4%89%E6%8F%9B%E5%87%A6%E7%90%86%E3%81%A8%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E6%9B%B8%E3%81%8D%E8%BE%BC%E3%81%BF%E3%81%AF%E5%AE%9F%E8%A1%8C%E3%83%9C%E3%82%BF%E3%83%B3%E3%82%92%E6%8A%BC%E3%81%97%E3%81%9F%0A%20%20%20%20%E3%81%A8%E3%81%8D%E3%81%A0%E3%81%91%E8%A1%8C%E3%82%8F%E3%82%8C%E3%81%BE%E3%81%99%E3%80%82%0A%0A%20%20%20%20%23%23%20PDF%20%E3%81%AE%E8%A4%87%E9%9B%91%E3%81%95%E3%81%AB%E3%82%88%E3%82%8B%E5%88%86%E9%A1%9E%0A%0A%20%20%20%20%7C%20%E5%88%86%E9%A1%9E%20%7C%20%E5%AF%BE%E8%B1%A1%20%7C%20%E6%8E%A8%E5%A5%A8%E3%83%84%E3%83%BC%E3%83%AB%20%7C%0A%20%20%20%20%7C%20---%20%7C%20---%20%7C%20---%20%7C%0A%20%20%20%20%7C%20%E3%82%AB%E3%83%86%E3%82%B4%E3%83%AA%201%3A%20%E5%8D%98%E7%B4%94%20%7C%20%E9%81%B8%E6%8A%9E%E5%8F%AF%E8%83%BD%E3%81%AA%E3%83%86%E3%82%AD%E3%82%B9%E3%83%88%E3%82%92%E6%8C%81%E3%81%A4%E3%80%81%E6%A8%99%E6%BA%96%E7%9A%84%E3%81%AA%E3%83%AC%E3%82%A4%E3%82%A2%E3%82%A6%E3%83%88%E3%81%AE%E3%83%87%E3%82%B8%E3%82%BF%E3%83%AB%20PDF%20%7C%20PyMuPDF4LLM%20%7C%0A%20%20%20%20%7C%20%E3%82%AB%E3%83%86%E3%82%B4%E3%83%AA%202%3A%20%E4%B8%AD%E7%A8%8B%E5%BA%A6%20%7C%20%E3%82%B9%E3%82%AD%E3%83%A3%E3%83%B3%E6%96%87%E6%9B%B8%E3%80%81%E8%A1%A8%E3%80%81%E8%A4%87%E6%95%B0%E6%AE%B5%E7%B5%84%E3%81%BF%E3%80%81%E6%99%82%E6%8A%98%E7%94%BB%E5%83%8F%E3%82%92%E5%90%AB%E3%82%80%20PDF%20%7C%20Docling%20%7C%0A%20%20%20%20%7C%20%E3%82%AB%E3%83%86%E3%82%B4%E3%83%AA%203%3A%20%E8%A4%87%E9%9B%91%20%7C%20%E5%9B%B3%E8%A1%A8%E3%80%81%E3%83%80%E3%82%A4%E3%82%A2%E3%82%B0%E3%83%A9%E3%83%A0%E3%80%81%E3%82%A4%E3%83%B3%E3%83%95%E3%82%A9%E3%82%B0%E3%83%A9%E3%83%95%E3%82%A3%E3%83%83%E3%82%AF%E3%81%AA%E3%81%A9%E3%80%81%E8%A6%96%E8%A6%9A%E6%83%85%E5%A0%B1%E3%81%8C%E9%87%8D%E8%A6%81%E3%81%AA%20PDF%20%7C%20VLM%20(Gemini)%20%7C%0A%0A%20%20%20%20%E3%82%B9%E3%82%AD%E3%83%A3%E3%83%B3%E3%81%95%E3%82%8C%E3%81%9F%20PDF%20%E3%81%AF%E3%83%AC%E3%82%A4%E3%82%A2%E3%82%A6%E3%83%88%E3%81%8C%E5%8D%98%E7%B4%94%E3%81%A7%E3%82%82%20OCR%20%E3%81%8C%E5%BF%85%E8%A6%81%E3%81%AA%E3%81%9F%E3%82%81%E3%80%81%E3%82%AB%E3%83%86%E3%82%B4%E3%83%AA%202%0A%20%20%20%20%E3%81%A8%E3%81%97%E3%81%A6%E6%89%B1%E3%81%84%E3%81%BE%E3%81%99%E3%80%82%E3%81%BE%E3%81%9A%E5%AE%9F%E9%9A%9B%E3%81%AE%20PDF%20%E3%81%8B%E3%82%89%E3%83%86%E3%82%AD%E3%82%B9%E3%83%88%E3%82%92%E9%81%B8%E6%8A%9E%E3%81%A7%E3%81%8D%E3%82%8B%E3%81%8B%E3%82%92%E7%A2%BA%E8%AA%8D%E3%81%97%E3%81%A6%E3%81%8F%E3%81%A0%E3%81%95%E3%81%84%E3%80%82%0A%0A%20%20%20%20%E4%BB%A5%E9%99%8D%E3%81%AF%E3%80%8C%E8%A7%A3%E8%AA%AC%20%E2%86%92%20%E3%81%9D%E3%81%AE%E5%AE%9F%E8%A3%85%E3%80%8D%E3%81%AE%E9%A0%86%E3%81%AB%E4%B8%A6%E3%82%93%E3%81%A7%E3%81%84%E3%81%BE%E3%81%99%E3%80%82%E6%9C%80%E5%88%9D%E3%81%AE%E3%82%BB%E3%83%AB%E3%81%A7%E3%81%AF%E3%80%81%E3%81%A9%E3%81%AE%E3%82%AB%E3%83%86%E3%82%B4%E3%83%AA%0A%20%20%20%20%E3%81%A7%E3%82%82%E4%BD%BF%E3%81%86%E6%A8%99%E6%BA%96%E3%83%A9%E3%82%A4%E3%83%96%E3%83%A9%E3%83%AA%E3%81%A8%20marimo%20%E3%82%92%E8%AA%AD%E3%81%BF%E8%BE%BC%E3%81%BF%E3%81%BE%E3%81%99%E3%80%82%60importlib%60%20%E3%81%AF%E4%BB%BB%E6%84%8F%E4%BE%9D%E5%AD%98%E9%96%A2%E4%BF%82%E3%82%92%0A%20%20%20%20%E9%81%85%E5%BB%B6%E8%AA%AD%E3%81%BF%E8%BE%BC%E3%81%BF%E3%81%99%E3%82%8B%E3%81%9F%E3%82%81%E3%81%AB%E4%BD%BF%E3%81%84%E3%81%BE%E3%81%99%E3%80%82%0A%0A%20%20%20%20%23%23%20%E5%89%8D%E6%8F%90%E6%9D%A1%E4%BB%B6%0A%0A%20%20%20%20%7C%20%E3%82%AB%E3%83%86%E3%82%B4%E3%83%AA%20%7C%20%E5%BF%85%E8%A6%81%E3%81%AA%E3%82%82%E3%81%AE%20%7C%0A%20%20%20%20%7C%20---%20%7C%20---%20%7C%0A%20%20%20%20%7C%20%E3%82%AB%E3%83%86%E3%82%B4%E3%83%AA%201%20%7C%20%E8%BF%BD%E5%8A%A0%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB%E4%B8%8D%E8%A6%81%EF%BC%88%60pymupdf4llm%60%20%E3%81%AF%E5%9F%BA%E6%9C%AC%E4%BE%9D%E5%AD%98%EF%BC%89%20%7C%0A%20%20%20%20%7C%20%E3%82%AB%E3%83%86%E3%82%B4%E3%83%AA%202%20%7C%20%60uv%20sync%20--extra%20docling%60%20%7C%0A%20%20%20%20%7C%20%E3%82%AB%E3%83%86%E3%82%B4%E3%83%AA%203%20%7C%20%60uv%20sync%20--extra%20vlm%60%20%E3%81%A8%E3%80%81%E7%92%B0%E5%A2%83%E5%A4%89%E6%95%B0%20%60GEMINI_API_KEY%60%20%7C%0A%0A%20%20%20%20%E4%BB%BB%E6%84%8F%E4%BE%9D%E5%AD%98%E9%96%A2%E4%BF%82%E3%81%AF%E3%81%9D%E3%81%AE%E3%82%AB%E3%83%86%E3%82%B4%E3%83%AA%E3%82%92%E9%81%B8%E3%82%93%E3%81%A7%E5%AE%9F%E8%A1%8C%E3%81%97%E3%81%9F%E3%81%A8%E3%81%8D%E3%81%AB%E3%81%A0%E3%81%91%E8%AA%AD%E3%81%BF%E8%BE%BC%E3%81%BF%E3%81%BE%E3%81%99%E3%80%82%E6%9C%AA%E5%B0%8E%E5%85%A5%E3%81%A7%E3%82%82%0A%20%20%20%20%E3%83%8E%E3%83%BC%E3%83%88%E3%83%96%E3%83%83%E3%82%AF%E3%81%AE%E8%AA%AD%E3%81%BF%E8%BE%BC%E3%81%BF%E3%82%84%E4%BB%96%E3%81%AE%E3%82%AB%E3%83%86%E3%82%B4%E3%83%AA%E3%81%AE%E5%88%A9%E7%94%A8%E3%81%AB%E3%81%AF%E5%BD%B1%E9%9F%BF%E3%81%97%E3%81%BE%E3%81%9B%E3%82%93%E3%80%82API%20%E3%82%AD%E3%83%BC%E3%81%AF%E7%92%B0%E5%A2%83%E5%A4%89%E6%95%B0%0A%20%20%20%20%E3%81%8B%E3%82%89%E3%81%AE%E3%81%BF%E8%AA%AD%E3%81%BF%E5%8F%96%E3%82%8A%E3%80%81%E7%94%BB%E9%9D%A2%E3%82%84%E4%BF%9D%E5%AD%98%E5%85%88%E3%81%B8%E5%87%BA%E5%8A%9B%E3%81%97%E3%81%BE%E3%81%9B%E3%82%93%E3%80%82%0A%20%20%20%20%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_()%3A%0A%20%20%20%20import%20importlib%0A%20%20%20%20import%20os%0A%20%20%20%20from%20pathlib%20import%20Path%0A%0A%20%20%20%20import%20marimo%20as%20mo%0A%0A%20%20%20%20return%20Path%2C%20importlib%2C%20mo%2C%20os%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_(mo)%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20%23%23%20%E5%85%A5%E5%8A%9B%E3%81%A8%E5%87%BA%E5%8A%9B%E3%81%AE%E6%8C%87%E5%AE%9A%0A%0A%20%20%20%20%E5%A4%89%E6%8F%9B%E5%AF%BE%E8%B1%A1%E3%81%A8%E5%87%BA%E5%8A%9B%E5%85%88%E3%82%92%E3%81%93%E3%81%93%E3%81%A7%E6%8C%87%E5%AE%9A%E3%81%97%E3%81%BE%E3%81%99%E3%80%82%0A%0A%20%20%20%20-%20**%E5%85%A5%E5%8A%9B%E3%83%91%E3%82%B9**%3A%20PDF%20%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%201%20%E4%BB%B6%E3%80%81%E3%81%BE%E3%81%9F%E3%81%AF%20PDF%20%E3%82%92%E5%90%AB%E3%82%80%E3%83%87%E3%82%A3%E3%83%AC%E3%82%AF%E3%83%88%E3%83%AA%0A%20%20%20%20-%20**%E5%87%BA%E5%8A%9B%E3%83%87%E3%82%A3%E3%83%AC%E3%82%AF%E3%83%88%E3%83%AA**%3A%20Markdown%20%E3%81%AE%E4%BF%9D%E5%AD%98%E5%85%88%EF%BC%88%E5%AD%98%E5%9C%A8%E3%81%97%E3%81%AA%E3%81%91%E3%82%8C%E3%81%B0%E4%BD%9C%E6%88%90%E3%81%97%E3%81%BE%E3%81%99%EF%BC%89%0A%0A%20%20%20%20%E5%85%A5%E5%8A%9B%E6%AC%84%E3%82%92%E7%B7%A8%E9%9B%86%E3%81%97%E3%81%9F%E3%81%A0%E3%81%91%E3%81%A7%E3%81%AF%E3%80%81PDF%20%E3%81%AE%E8%AA%AD%E3%81%BF%E8%BE%BC%E3%81%BF%E3%82%82%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%81%AE%E6%9B%B8%E3%81%8D%E8%BE%BC%E3%81%BF%E3%82%82%E7%99%BA%E7%94%9F%E3%81%97%E3%81%BE%E3%81%9B%E3%82%93%E3%80%82%0A%20%20%20%20%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(mo)%3A%0A%20%20%20%20source_path%20%3D%20mo.ui.text(%0A%20%20%20%20%20%20%20%20value%3D%22.%2Fsimple_pdfs%22%2C%0A%20%20%20%20%20%20%20%20label%3D%22%E5%85%A5%E5%8A%9B%20PDF%20%E3%81%BE%E3%81%9F%E3%81%AF%20PDF%20%E3%82%92%E5%90%AB%E3%82%80%E3%83%87%E3%82%A3%E3%83%AC%E3%82%AF%E3%83%88%E3%83%AA%22%2C%0A%20%20%20%20%20%20%20%20full_width%3DTrue%2C%0A%20%20%20%20)%0A%20%20%20%20output_path%20%3D%20mo.ui.text(%0A%20%20%20%20%20%20%20%20value%3D%22.%2Fmd_output%22%2C%0A%20%20%20%20%20%20%20%20label%3D%22Markdown%20%E3%81%AE%E5%87%BA%E5%8A%9B%E3%83%87%E3%82%A3%E3%83%AC%E3%82%AF%E3%83%88%E3%83%AA%22%2C%0A%20%20%20%20%20%20%20%20full_width%3DTrue%2C%0A%20%20%20%20)%0A%20%20%20%20return%20output_path%2C%20source_path%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_(mo)%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20%23%23%20%E5%A4%89%E6%8F%9B%E6%96%B9%E6%B3%95%E3%81%AE%E9%81%B8%E6%8A%9E%0A%0A%20%20%20%20%E3%83%89%E3%83%AD%E3%83%83%E3%83%97%E3%83%80%E3%82%A6%E3%83%B3%E3%81%AE%E9%81%B8%E6%8A%9E%E8%82%A2%E3%81%AF%E3%80%81%E4%B8%8A%E8%A1%A8%E3%81%AE%E3%82%AB%E3%83%86%E3%82%B4%E3%83%AA%201%20%2F%202%20%2F%203%20%E3%81%AB%E5%AF%BE%E5%BF%9C%E3%81%97%E3%81%BE%E3%81%99%E3%80%82%E6%97%A2%E5%AE%9A%E5%80%A4%E3%81%AF%0A%20%20%20%20%E8%BF%BD%E5%8A%A0%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB%E3%81%AA%E3%81%97%E3%81%A7%E5%8B%95%E3%81%8F%E3%82%AB%E3%83%86%E3%82%B4%E3%83%AA%201%20%E3%81%A7%E3%81%99%E3%80%82Gemini%20%E3%81%AE%E3%83%A2%E3%83%87%E3%83%AB%E5%90%8D%E3%81%AF%E3%80%81%E3%82%AB%E3%83%86%E3%82%B4%E3%83%AA%203%0A%20%20%20%20%E3%82%92%E9%81%B8%E3%82%93%E3%81%A0%E3%81%A8%E3%81%8D%E3%81%A0%E3%81%91%E4%BD%BF%E3%82%8F%E3%82%8C%E3%81%BE%E3%81%99%E3%80%82%0A%20%20%20%20%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(mo)%3A%0A%20%20%20%20conversion_method%20%3D%20mo.ui.dropdown(%0A%20%20%20%20%20%20%20%20options%3D%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%22%E3%82%AB%E3%83%86%E3%82%B4%E3%83%AA%201%3A%20PyMuPDF4LLM%EF%BC%88%E5%8D%98%E7%B4%94%E3%81%AA%E3%83%87%E3%82%B8%E3%82%BF%E3%83%AB%20PDF%EF%BC%89%22%3A%20%22pymupdf4llm%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%22%E3%82%AB%E3%83%86%E3%82%B4%E3%83%AA%202%3A%20Docling%EF%BC%88OCR%E3%83%BB%E8%A1%A8%E3%83%BB%E8%A4%87%E6%95%B0%E6%AE%B5%E7%B5%84%E3%81%BF%EF%BC%89%22%3A%20%22docling%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%22%E3%82%AB%E3%83%86%E3%82%B4%E3%83%AA%203%3A%20Gemini%20VLM%EF%BC%88%E8%A6%96%E8%A6%9A%E6%83%85%E5%A0%B1%E3%81%8C%E9%87%8D%E8%A6%81%E3%81%AA%20PDF%EF%BC%89%22%3A%20%22gemini%22%2C%0A%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20value%3D%22%E3%82%AB%E3%83%86%E3%82%B4%E3%83%AA%201%3A%20PyMuPDF4LLM%EF%BC%88%E5%8D%98%E7%B4%94%E3%81%AA%E3%83%87%E3%82%B8%E3%82%BF%E3%83%AB%20PDF%EF%BC%89%22%2C%0A%20%20%20%20%20%20%20%20label%3D%22%E5%A4%89%E6%8F%9B%E6%96%B9%E6%B3%95%22%2C%0A%20%20%20%20%20%20%20%20full_width%3DTrue%2C%0A%20%20%20%20)%0A%20%20%20%20model_name%20%3D%20mo.ui.text(%0A%20%20%20%20%20%20%20%20value%3D%22gemini-2.5-flash%22%2C%0A%20%20%20%20%20%20%20%20label%3D%22Gemini%20%E3%83%A2%E3%83%87%E3%83%AB%E5%90%8D%EF%BC%88%E3%82%AB%E3%83%86%E3%82%B4%E3%83%AA%203%20%E3%81%AE%E3%81%BF%EF%BC%89%22%2C%0A%20%20%20%20%20%20%20%20full_width%3DTrue%2C%0A%20%20%20%20)%0A%20%20%20%20return%20conversion_method%2C%20model_name%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_(mo)%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20%23%23%20API%20%E3%82%AD%E3%83%BC%E3%81%AE%E7%8A%B6%E6%85%8B%E3%81%A8%E5%AE%9F%E8%A1%8C%E3%83%9C%E3%82%BF%E3%83%B3%0A%0A%20%20%20%20API%20%E3%82%AD%E3%83%BC%E3%81%AF%E3%81%93%E3%81%AE%E3%83%8E%E3%83%BC%E3%83%88%E3%83%96%E3%83%83%E3%82%AF%E3%81%AB%E5%85%A5%E5%8A%9B%E3%81%97%E3%81%BE%E3%81%9B%E3%82%93%E3%80%82%E7%92%B0%E5%A2%83%E5%A4%89%E6%95%B0%20%60GEMINI_API_KEY%60%20%E3%81%AE%0A%20%20%20%20%E6%9C%89%E7%84%A1%E3%81%A0%E3%81%91%E3%82%92%E7%A2%BA%E8%AA%8D%E3%81%97%E3%81%A6%E8%A1%A8%E7%A4%BA%E3%81%97%E3%80%81%E5%80%A4%E3%81%9D%E3%81%AE%E3%82%82%E3%81%AE%E3%81%AF%E8%A1%A8%E7%A4%BA%E3%82%82%E4%BF%9D%E5%AD%98%E3%82%82%E3%81%97%E3%81%BE%E3%81%9B%E3%82%93%E3%80%82%0A%0A%20%20%20%20%E5%A4%89%E6%8F%9B%E3%81%A8%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E6%9B%B8%E3%81%8D%E8%BE%BC%E3%81%BF%E3%81%AF%20**%E5%A4%89%E6%8F%9B%E3%82%92%E5%AE%9F%E8%A1%8C**%20%E3%83%9C%E3%82%BF%E3%83%B3%E3%82%92%E6%8A%BC%E3%81%99%E3%81%BE%E3%81%A7%E9%96%8B%E5%A7%8B%E3%81%95%E3%82%8C%E3%81%BE%E3%81%9B%E3%82%93%E3%80%82%0A%20%20%20%20%E6%AC%A1%E3%81%AE%E3%82%BB%E3%83%AB%E3%81%A7%E3%80%81%E3%81%93%E3%81%93%E3%81%BE%E3%81%A7%E3%81%AE%E5%85%A5%E5%8A%9B%E6%AC%84%E3%81%A8%E5%AE%9F%E8%A1%8C%E3%83%9C%E3%82%BF%E3%83%B3%E3%82%92%E3%81%BE%E3%81%A8%E3%82%81%E3%81%A6%E8%A1%A8%E7%A4%BA%E3%81%97%E3%81%BE%E3%81%99%E3%80%82%0A%20%20%20%20%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(conversion_method%2C%20mo%2C%20model_name%2C%20os%2C%20output_path%2C%20source_path)%3A%0A%20%20%20%20api_key_status%20%3D%20(%0A%20%20%20%20%20%20%20%20%22GEMINI_API_KEY%20%E3%81%AF%E7%92%B0%E5%A2%83%E5%A4%89%E6%95%B0%E3%81%AB%E8%A8%AD%E5%AE%9A%E3%81%95%E3%82%8C%E3%81%A6%E3%81%84%E3%81%BE%E3%81%99%E3%80%82%22%0A%20%20%20%20%20%20%20%20if%20os.getenv(%22GEMINI_API_KEY%22)%0A%20%20%20%20%20%20%20%20else%20%22GEMINI_API_KEY%20%E3%81%AF%E7%92%B0%E5%A2%83%E5%A4%89%E6%95%B0%E3%81%AB%E8%A8%AD%E5%AE%9A%E3%81%95%E3%82%8C%E3%81%A6%E3%81%84%E3%81%BE%E3%81%9B%E3%82%93%E3%80%82%22%0A%20%20%20%20)%0A%20%20%20%20run_conversion%20%3D%20mo.ui.run_button(%0A%20%20%20%20%20%20%20%20label%3D%22%E5%A4%89%E6%8F%9B%E3%82%92%E5%AE%9F%E8%A1%8C%22%2C%0A%20%20%20%20%20%20%20%20kind%3D%22success%22%2C%0A%20%20%20%20%20%20%20%20full_width%3DTrue%2C%0A%20%20%20%20)%0A%20%20%20%20mo.vstack(%0A%20%20%20%20%20%20%20%20%5B%0A%20%20%20%20%20%20%20%20%20%20%20%20source_path%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20output_path%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20conversion_method%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20model_name%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20mo.md(f%22**API%20%E3%82%AD%E3%83%BC%E3%81%AE%E7%8A%B6%E6%85%8B%3A**%20%7Bapi_key_status%7D%20%E5%80%A4%E3%81%AF%E8%A1%A8%E7%A4%BA%E3%81%97%E3%81%BE%E3%81%9B%E3%82%93%E3%80%82%22)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20run_conversion%2C%0A%20%20%20%20%20%20%20%20%5D%0A%20%20%20%20)%0A%20%20%20%20return%20(run_conversion%2C)%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_(mo)%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20%23%23%20%E3%83%AD%E3%83%BC%E3%82%AB%E3%83%AB%E7%92%B0%E5%A2%83%E3%81%AE%E4%BE%9D%E5%AD%98%E9%96%A2%E4%BF%82%E3%81%A8%E5%85%B1%E9%80%9A%E3%83%98%E3%83%AB%E3%83%91%E3%83%BC%0A%0A%20%20%20%20%60pymupdf4llm%60%20%E3%81%AF%E3%81%93%E3%81%AE%E3%83%97%E3%83%AD%E3%82%B8%E3%82%A7%E3%82%AF%E3%83%88%E3%81%AE%E5%9F%BA%E6%9C%AC%E4%BE%9D%E5%AD%98%E9%96%A2%E4%BF%82%E3%81%A7%E3%81%99%E3%80%82%E3%82%AB%E3%83%86%E3%82%B4%E3%83%AA%202%20%E3%81%A8%E3%82%AB%E3%83%86%E3%82%B4%E3%83%AA%203%0A%20%20%20%20%E3%81%AF%E4%BB%BB%E6%84%8F%E3%81%AE%E4%BE%9D%E5%AD%98%E9%96%A2%E4%BF%82%E3%81%A7%E3%81%82%E3%82%8A%E3%80%81%E5%AF%BE%E5%BF%9C%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95%E3%82%92%E9%81%B8%E6%8A%9E%E3%81%97%E3%81%9F%E5%A0%B4%E5%90%88%E3%81%AB%E3%81%A0%E3%81%91%E5%BF%85%E8%A6%81%E3%81%AB%E3%81%AA%E3%82%8A%E3%81%BE%E3%81%99%E3%80%82%0A%20%20%20%20%E3%83%8E%E3%83%BC%E3%83%88%E3%83%96%E3%83%83%E3%82%AF%E5%86%85%E3%81%A7%E3%83%91%E3%83%83%E3%82%B1%E3%83%BC%E3%82%B8%E3%82%92%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB%E3%81%99%E3%82%8B%E3%81%93%E3%81%A8%E3%81%AF%E3%81%82%E3%82%8A%E3%81%BE%E3%81%9B%E3%82%93%E3%80%82%0A%0A%20%20%20%20-%20%E3%82%AB%E3%83%86%E3%82%B4%E3%83%AA%202%3A%20%60uv%20sync%20--extra%20docling%60%0A%20%20%20%20-%20%E3%82%AB%E3%83%86%E3%82%B4%E3%83%AA%203%3A%20%60uv%20sync%20--extra%20vlm%60%0A%20%20%20%20-%20%E3%82%AB%E3%83%86%E3%82%B4%E3%83%AA%203%20%E3%81%AE%20API%20%E3%82%AD%E3%83%BC%3A%20%E3%83%AD%E3%83%BC%E3%82%AB%E3%83%AB%E3%82%B7%E3%82%A7%E3%83%AB%E3%81%A7%20%60GEMINI_API_KEY%60%20%E3%82%92%E7%92%B0%E5%A2%83%E5%A4%89%E6%95%B0%E3%81%B8%E8%A8%AD%E5%AE%9A%0A%0A%20%20%20%20%E6%AC%A1%E3%81%AE%E3%82%BB%E3%83%AB%E3%81%A7%E3%81%AF%E3%80%813%20%E3%81%A4%E3%81%AE%E3%82%AB%E3%83%86%E3%82%B4%E3%83%AA%E3%81%8C%E5%85%B1%E9%80%9A%E3%81%A7%E4%BD%BF%E3%81%86%E3%83%98%E3%83%AB%E3%83%91%E3%83%BC%E3%82%92%E5%AE%9A%E7%BE%A9%E3%81%97%E3%81%BE%E3%81%99%E3%80%82%0A%0A%20%20%20%20-%20%60import_required%60%3A%20%E3%83%A2%E3%82%B8%E3%83%A5%E3%83%BC%E3%83%AB%E3%82%92%E9%81%85%E5%BB%B6%E8%AA%AD%E3%81%BF%E8%BE%BC%E3%81%BF%E3%81%97%E3%80%81%E8%A6%8B%E3%81%A4%E3%81%8B%E3%82%89%E3%81%AA%E3%81%84%E5%A0%B4%E5%90%88%E3%81%AF%E5%BF%85%E8%A6%81%E3%81%AA%0A%20%20%20%20%20%20%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB%E3%82%B3%E3%83%9E%E3%83%B3%E3%83%89%E3%82%92%E7%A4%BA%E3%81%97%E3%81%A6%E5%81%9C%E6%AD%A2%E3%81%97%E3%81%BE%E3%81%99%E3%80%82%E3%81%93%E3%82%8C%E3%81%AB%E3%82%88%E3%82%8A%E3%80%81%E4%BB%BB%E6%84%8F%E4%BE%9D%E5%AD%98%E9%96%A2%E4%BF%82%E3%81%8C%E7%84%A1%E3%81%8F%E3%81%A6%E3%82%82%0A%20%20%20%20%20%20%E3%83%8E%E3%83%BC%E3%83%88%E3%83%96%E3%83%83%E3%82%AF%E8%87%AA%E4%BD%93%E3%81%AF%E8%AA%AD%E3%81%BF%E8%BE%BC%E3%82%81%E3%80%81%E3%81%9D%E3%81%AE%E6%96%B9%E6%B3%95%E3%82%92%E5%AE%9F%E8%A1%8C%E3%81%97%E3%81%9F%E3%81%A8%E3%81%8D%E3%81%AB%E3%81%A0%E3%81%91%E5%A4%B1%E6%95%97%E3%81%97%E3%81%BE%E3%81%99%E3%80%82%0A%20%20%20%20-%20%60iter_pdf_files%60%3A%20%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%201%20%E4%BB%B6%E3%81%A7%E3%82%82%E3%83%87%E3%82%A3%E3%83%AC%E3%82%AF%E3%83%88%E3%83%AA%E3%81%A7%E3%82%82%E3%80%81%E5%A4%89%E6%8F%9B%E5%AF%BE%E8%B1%A1%E3%81%AE%20PDF%20%E4%B8%80%E8%A6%A7%E3%81%AB%0A%20%20%20%20%20%20%E3%81%9D%E3%82%8D%E3%81%88%E3%81%BE%E3%81%99%E3%80%82%0A%20%20%20%20-%20%60write_markdown%60%3A%20%E5%87%BA%E5%8A%9B%E3%83%87%E3%82%A3%E3%83%AC%E3%82%AF%E3%83%88%E3%83%AA%E3%82%92%E4%BD%9C%E6%88%90%E3%81%97%E3%80%81UTF-8%20%E3%81%A7%20Markdown%20%E3%82%92%E4%BF%9D%E5%AD%98%E3%81%97%E3%81%BE%E3%81%99%E3%80%82%0A%20%20%20%20%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(Path%2C%20importlib)%3A%0A%20%20%20%20def%20import_required(module_name%3A%20str%2C%20installation%3A%20str)%3A%0A%20%20%20%20%20%20%20%20%22%22%22%E9%81%B8%E6%8A%9E%E3%81%97%E3%81%9F%E5%A4%89%E6%8F%9B%E6%96%B9%E6%B3%95%E3%81%AB%E5%BF%85%E8%A6%81%E3%81%AA%E3%83%A2%E3%82%B8%E3%83%A5%E3%83%BC%E3%83%AB%E3%81%A0%E3%81%91%E3%82%92%E8%AA%AD%E3%81%BF%E8%BE%BC%E3%82%80%E3%80%82%22%22%22%0A%20%20%20%20%20%20%20%20try%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20return%20importlib.import_module(module_name)%0A%20%20%20%20%20%20%20%20except%20ModuleNotFoundError%20as%20error%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20raise%20RuntimeError(%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20f%22%7Bmodule_name%7D%20%E3%81%8C%E8%A6%8B%E3%81%A4%E3%81%8B%E3%82%8A%E3%81%BE%E3%81%9B%E3%82%93%E3%80%82%E3%83%AD%E3%83%BC%E3%82%AB%E3%83%AB%E7%92%B0%E5%A2%83%E3%81%A7%20%60%7Binstallation%7D%60%20%E3%82%92%E5%AE%9F%E8%A1%8C%E3%81%97%E3%81%A6%E3%81%8B%E3%82%89%E3%80%81%E3%82%82%E3%81%86%E4%B8%80%E5%BA%A6%E8%A9%A6%E3%81%97%E3%81%A6%E3%81%8F%E3%81%A0%E3%81%95%E3%81%84%E3%80%82%22%0A%20%20%20%20%20%20%20%20%20%20%20%20)%20from%20error%0A%0A%20%20%20%20def%20iter_pdf_files(pdf_input%3A%20str)%20-%3E%20list%5BPath%5D%3A%0A%20%20%20%20%20%20%20%20%22%22%22PDF%20%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%81%BE%E3%81%9F%E3%81%AF%20PDF%20%E3%82%92%E5%90%AB%E3%82%80%E3%83%87%E3%82%A3%E3%83%AC%E3%82%AF%E3%83%88%E3%83%AA%E3%81%8B%E3%82%89%E5%85%A5%E5%8A%9B%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%82%92%E5%8F%96%E5%BE%97%E3%81%99%E3%82%8B%E3%80%82%22%22%22%0A%20%20%20%20%20%20%20%20input_path%20%3D%20Path(pdf_input).expanduser()%0A%20%20%20%20%20%20%20%20if%20input_path.is_file()%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20if%20input_path.suffix.lower()%20!%3D%20%22.pdf%22%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20raise%20ValueError(f%22PDF%20%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%82%92%E6%8C%87%E5%AE%9A%E3%81%97%E3%81%A6%E3%81%8F%E3%81%A0%E3%81%95%E3%81%84%3A%20%7Binput_path%7D%22)%0A%20%20%20%20%20%20%20%20%20%20%20%20return%20%5Binput_path%5D%0A%20%20%20%20%20%20%20%20if%20input_path.is_dir()%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20pdf_files%20%3D%20sorted(%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20item%20for%20item%20in%20input_path.iterdir()%20if%20item.suffix.lower()%20%3D%3D%20%22.pdf%22%0A%20%20%20%20%20%20%20%20%20%20%20%20)%0A%20%20%20%20%20%20%20%20%20%20%20%20if%20pdf_files%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20return%20pdf_files%0A%20%20%20%20%20%20%20%20%20%20%20%20raise%20FileNotFoundError(f%22PDF%20%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%81%8C%E8%A6%8B%E3%81%A4%E3%81%8B%E3%82%8A%E3%81%BE%E3%81%9B%E3%82%93%3A%20%7Binput_path%7D%22)%0A%20%20%20%20%20%20%20%20raise%20FileNotFoundError(f%22%E5%85%A5%E5%8A%9B%E3%83%91%E3%82%B9%E3%81%8C%E8%A6%8B%E3%81%A4%E3%81%8B%E3%82%8A%E3%81%BE%E3%81%9B%E3%82%93%3A%20%7Binput_path%7D%22)%0A%0A%20%20%20%20def%20write_markdown(output_folder%3A%20str%2C%20pdf_file%3A%20Path%2C%20content%3A%20str)%20-%3E%20Path%3A%0A%20%20%20%20%20%20%20%20%22%22%22Markdown%20%E3%82%92%20UTF-8%20%E3%81%A7%E4%BF%9D%E5%AD%98%E3%81%97%E3%80%81%E4%BF%9D%E5%AD%98%E5%85%88%E3%82%92%E8%BF%94%E3%81%99%E3%80%82%22%22%22%0A%20%20%20%20%20%20%20%20destination%20%3D%20Path(output_folder).expanduser()%0A%20%20%20%20%20%20%20%20destination.mkdir(parents%3DTrue%2C%20exist_ok%3DTrue)%0A%20%20%20%20%20%20%20%20output_file%20%3D%20destination%20%2F%20f%22%7Bpdf_file.stem%7D.md%22%0A%20%20%20%20%20%20%20%20output_file.write_text(content%2C%20encoding%3D%22utf-8%22)%0A%20%20%20%20%20%20%20%20return%20output_file%0A%0A%20%20%20%20return%20import_required%2C%20iter_pdf_files%2C%20write_markdown%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_(mo)%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20%23%23%20%E3%82%AB%E3%83%86%E3%82%B4%E3%83%AA%201%3A%20PyMuPDF4LLM%EF%BC%88%E5%8D%98%E7%B4%94%E3%81%AA%E3%83%87%E3%82%B8%E3%82%BF%E3%83%AB%20PDF%EF%BC%89%0A%0A%20%20%20%20%E5%AF%BE%E8%B1%A1%E3%81%AF%E3%80%81%E3%83%86%E3%82%AD%E3%82%B9%E3%83%88%E3%82%92%E9%81%B8%E6%8A%9E%E3%81%A7%E3%81%8D%E3%80%81%E6%AE%B5%E7%B5%84%E3%81%BF%E3%82%84%E8%A1%A8%E3%81%8C%E5%8D%98%E7%B4%94%E3%81%AA%E3%83%87%E3%82%B8%E3%82%BF%E3%83%AB%20PDF%20%E3%81%A7%E3%81%99%E3%80%82%0A%20%20%20%20PyMuPDF4LLM%20%E3%81%AF%20PDF%20%E3%81%AE%E5%86%85%E9%83%A8%E3%83%86%E3%82%AD%E3%82%B9%E3%83%88%E3%82%92%E3%81%9D%E3%81%AE%E3%81%BE%E3%81%BE%E8%AA%AD%E3%81%BF%E5%8F%96%E3%82%8A%E3%80%81%E8%A6%8B%E5%87%BA%E3%81%97%E3%82%84%E3%83%AA%E3%82%B9%E3%83%88%E3%82%92%0A%20%20%20%20Markdown%20%E3%81%AB%E5%A4%89%E6%8F%9B%E3%81%97%E3%81%BE%E3%81%99%E3%80%82OCR%20%E3%82%82%E6%8E%A8%E8%AB%96%E3%82%82%E8%A1%8C%E3%82%8F%E3%81%AA%E3%81%84%E3%81%9F%E3%82%81%E3%80%81%E3%83%AD%E3%83%BC%E3%82%AB%E3%83%AB%E3%81%A7%E9%AB%98%E9%80%9F%E3%81%AB%E5%8B%95%E4%BD%9C%E3%81%97%E3%80%81%0A%20%20%20%20API%20%E3%82%AD%E3%83%BC%E3%82%82%E3%83%8D%E3%83%83%E3%83%88%E3%83%AF%E3%83%BC%E3%82%AF%E3%82%82%E4%B8%8D%E8%A6%81%E3%81%A7%E3%81%99%E3%80%82%0A%0A%20%20%20%20%E3%82%B9%E3%82%AD%E3%83%A3%E3%83%B3%E7%94%BB%E5%83%8F%E3%81%AE%20PDF%20%E3%82%84%E3%80%81%E5%9B%B3%E8%A1%A8%E3%81%AE%E6%84%8F%E5%91%B3%E3%82%92%E8%AA%AD%E3%81%BF%E5%8F%96%E3%82%8B%E5%BF%85%E8%A6%81%E3%81%8C%E3%81%82%E3%82%8B%20PDF%20%E3%81%AB%E3%81%AF%E5%90%91%E3%81%8D%E3%81%BE%E3%81%9B%E3%82%93%E3%80%82%0A%20%20%20%20%E3%81%9D%E3%81%AE%E5%A0%B4%E5%90%88%E3%81%AF%E3%82%AB%E3%83%86%E3%82%B4%E3%83%AA%202%20%E3%81%BE%E3%81%9F%E3%81%AF%E3%82%AB%E3%83%86%E3%82%B4%E3%83%AA%203%20%E3%82%92%E9%81%B8%E3%82%93%E3%81%A7%E3%81%8F%E3%81%A0%E3%81%95%E3%81%84%E3%80%82%0A%0A%20%20%20%20**%E5%8F%82%E7%85%A7**%0A%0A%20%20%20%20-%20PyMuPDF4LLM%3A%20https%3A%2F%2Fgithub.com%2Fpymupdf%2FPyMuPDF4LLM%0A%20%20%20%20-%20PyMuPDF4LLM%20documentation%3A%20https%3A%2F%2Fpymupdf.readthedocs.io%2Fen%2Flatest%2Fpymupdf4llm%2Findex.html%0A%20%20%20%20%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(Path%2C%20import_required%2C%20iter_pdf_files%2C%20write_markdown)%3A%0A%20%20%20%20def%20convert_simple_pdfs_pymupdf4llm(%0A%20%20%20%20%20%20%20%20pdf_input%3A%20str%2C%20output_folder%3A%20str%0A%20%20%20%20)%20-%3E%20list%5BPath%5D%3A%0A%20%20%20%20%20%20%20%20%22%22%22PyMuPDF4LLM%20%E3%81%A7%E5%8D%98%E7%B4%94%E3%81%AA%E3%83%86%E3%82%AD%E3%82%B9%E3%83%88%E4%B8%AD%E5%BF%83%20PDF%20%E3%82%92%20Markdown%20%E3%81%AB%E5%A4%89%E6%8F%9B%E3%81%99%E3%82%8B%E3%80%82%22%22%22%0A%20%20%20%20%20%20%20%20pymupdf4llm%20%3D%20import_required(%22pymupdf4llm%22%2C%20%22uv%20sync%22)%0A%20%20%20%20%20%20%20%20return%20%5B%0A%20%20%20%20%20%20%20%20%20%20%20%20write_markdown(%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20output_folder%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20pdf_file%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20pymupdf4llm.to_markdown(str(pdf_file))%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20)%0A%20%20%20%20%20%20%20%20%20%20%20%20for%20pdf_file%20in%20iter_pdf_files(pdf_input)%0A%20%20%20%20%20%20%20%20%5D%0A%0A%20%20%20%20return%20(convert_simple_pdfs_pymupdf4llm%2C)%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_(mo)%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20%23%23%20%E3%82%AB%E3%83%86%E3%82%B4%E3%83%AA%202%3A%20Docling%EF%BC%88OCR%E3%83%BB%E8%A1%A8%E3%83%BB%E8%A4%87%E6%95%B0%E6%AE%B5%E7%B5%84%E3%81%BF%EF%BC%89%0A%0A%20%20%20%20%E3%82%B9%E3%82%AD%E3%83%A3%E3%83%B3%E6%96%87%E6%9B%B8%E3%80%81%E7%BD%AB%E7%B7%9A%E3%81%AE%E3%81%82%E3%82%8B%E8%A1%A8%E3%80%81%E8%A4%87%E6%95%B0%E6%AE%B5%E7%B5%84%E3%81%BF%E3%81%AE%E3%83%AC%E3%82%A4%E3%82%A2%E3%82%A6%E3%83%88%E3%82%92%E5%90%AB%E3%82%80%20PDF%20%E3%81%8C%E5%AF%BE%E8%B1%A1%E3%81%A7%E3%81%99%E3%80%82%0A%20%20%20%20Docling%20%E3%81%AF%E3%83%AC%E3%82%A4%E3%82%A2%E3%82%A6%E3%83%88%E8%A7%A3%E6%9E%90%E3%81%A8%20OCR%20%E3%82%92%E7%B5%84%E3%81%BF%E5%90%88%E3%82%8F%E3%81%9B%E3%80%81%E8%AA%AD%E3%81%BF%E9%A0%86%E3%81%A8%E8%A1%A8%E6%A7%8B%E9%80%A0%E3%82%92%E4%BF%9D%E3%81%A3%E3%81%9F%E3%81%BE%E3%81%BE%0A%20%20%20%20Markdown%20%E3%82%92%E5%87%BA%E5%8A%9B%E3%81%97%E3%81%BE%E3%81%99%E3%80%82%0A%0A%20%20%20%20%E6%AC%A1%E3%81%AE%E3%82%BB%E3%83%AB%E3%81%A7%E8%A8%AD%E5%AE%9A%E3%81%97%E3%81%A6%E3%81%84%E3%82%8B%E3%83%91%E3%82%A4%E3%83%97%E3%83%A9%E3%82%A4%E3%83%B3%E3%81%AE%E8%A6%81%E7%82%B9%E3%81%AF%E4%BB%A5%E4%B8%8B%E3%81%AE%E3%81%A8%E3%81%8A%E3%82%8A%E3%81%A7%E3%81%99%E3%80%82%0A%0A%20%20%20%20-%20%60do_table_structure%60%3A%20%E8%A1%A8%E3%81%AE%E3%82%BB%E3%83%AB%E6%A7%8B%E9%80%A0%E3%82%92%E8%AA%8D%E8%AD%98%E3%81%97%E3%80%81Markdown%20%E3%81%AE%E8%A1%A8%E3%81%A8%E3%81%97%E3%81%A6%E5%87%BA%E5%8A%9B%E3%81%99%E3%82%8B%0A%20%20%20%20-%20%60do_ocr%60%3A%20%E3%82%B9%E3%82%AD%E3%83%A3%E3%83%B3%E7%94%BB%E5%83%8F%E3%81%8B%E3%82%89%E3%83%86%E3%82%AD%E3%82%B9%E3%83%88%E3%82%92%E6%8A%BD%E5%87%BA%E3%81%99%E3%82%8B%0A%20%20%20%20-%20%60images_scale%60%3A%20%E3%83%9A%E3%83%BC%E3%82%B8%E3%82%92%202%20%E5%80%8D%E3%81%AB%E6%8B%A1%E5%A4%A7%E3%81%97%E3%81%A6%E3%81%8B%E3%82%89%E8%A7%A3%E6%9E%90%E3%81%97%E3%80%81%E7%B4%B0%E3%81%8B%E3%81%84%E6%96%87%E5%AD%97%E3%81%AE%E8%AA%8D%E8%AD%98%E7%B2%BE%E5%BA%A6%E3%82%92%E4%B8%8A%E3%81%92%E3%82%8B%0A%20%20%20%20-%20%60generate_picture_images%60%3A%20%E3%83%9A%E3%83%BC%E3%82%B8%E5%86%85%E3%81%AE%E7%94%BB%E5%83%8F%E3%82%92%E5%88%87%E3%82%8A%E5%87%BA%E3%81%97%E3%81%A6%E4%BF%9D%E6%8C%81%E3%81%99%E3%82%8B%0A%0A%20%20%20%20Docling%20%E3%81%AF%E4%BB%BB%E6%84%8F%E4%BE%9D%E5%AD%98%E9%96%A2%E4%BF%82%E3%81%A7%E3%81%99%E3%80%82%E6%9C%AA%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB%E3%81%AE%E3%81%BE%E3%81%BE%E3%81%93%E3%81%AE%E6%96%B9%E6%B3%95%E3%82%92%E5%AE%9F%E8%A1%8C%E3%81%99%E3%82%8B%E3%81%A8%E3%80%81%0A%20%20%20%20%60import_required%60%20%E3%81%8C%20%60uv%20sync%20--extra%20docling%60%20%E3%81%AE%E5%AE%9F%E8%A1%8C%E3%82%92%E4%BF%83%E3%81%97%E3%81%A6%E5%81%9C%E6%AD%A2%E3%81%97%E3%81%BE%E3%81%99%E3%80%82%0A%0A%20%20%20%20**%E5%8F%82%E7%85%A7**%0A%0A%20%20%20%20-%20Docling%3A%20https%3A%2F%2Fgithub.com%2FDS4SD%2Fdocling%0A%20%20%20%20-%20Docling%20documentation%3A%20https%3A%2F%2Fdocling-project.github.io%2Fdocling%2F%0A%20%20%20%20%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(Path%2C%20import_required%2C%20iter_pdf_files%2C%20write_markdown)%3A%0A%20%20%20%20def%20convert_medium_pdfs_docling(pdf_input%3A%20str%2C%20output_folder%3A%20str)%20-%3E%20list%5BPath%5D%3A%0A%20%20%20%20%20%20%20%20%22%22%22Docling%20%E3%81%AE%20OCR%20%E3%81%A8%E8%A1%A8%E6%A7%8B%E9%80%A0%E8%AA%8D%E8%AD%98%E3%81%A7%E4%B8%AD%E7%A8%8B%E5%BA%A6%E3%81%AE%E8%A4%87%E9%9B%91%E3%81%95%E3%81%AE%20PDF%20%E3%82%92%E5%A4%89%E6%8F%9B%E3%81%99%E3%82%8B%E3%80%82%22%22%22%0A%20%20%20%20%20%20%20%20document_converter%20%3D%20import_required(%0A%20%20%20%20%20%20%20%20%20%20%20%20%22docling.document_converter%22%2C%20%22uv%20sync%20--extra%20docling%22%0A%20%20%20%20%20%20%20%20)%0A%20%20%20%20%20%20%20%20base_models%20%3D%20import_required(%0A%20%20%20%20%20%20%20%20%20%20%20%20%22docling.datamodel.base_models%22%2C%20%22uv%20sync%20--extra%20docling%22%0A%20%20%20%20%20%20%20%20)%0A%20%20%20%20%20%20%20%20pipeline_options_module%20%3D%20import_required(%0A%20%20%20%20%20%20%20%20%20%20%20%20%22docling.datamodel.pipeline_options%22%2C%20%22uv%20sync%20--extra%20docling%22%0A%20%20%20%20%20%20%20%20)%0A%20%20%20%20%20%20%20%20pipeline_options%20%3D%20pipeline_options_module.PdfPipelineOptions()%0A%20%20%20%20%20%20%20%20pipeline_options.do_table_structure%20%3D%20True%0A%20%20%20%20%20%20%20%20pipeline_options.do_ocr%20%3D%20True%0A%20%20%20%20%20%20%20%20pipeline_options.images_scale%20%3D%202.0%0A%20%20%20%20%20%20%20%20pipeline_options.generate_picture_images%20%3D%20True%0A%20%20%20%20%20%20%20%20converter%20%3D%20document_converter.DocumentConverter(%0A%20%20%20%20%20%20%20%20%20%20%20%20format_options%3D%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20base_models.InputFormat.PDF%3A%20document_converter.PdfFormatOption(%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20pipeline_options%3Dpipeline_options%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20)%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20)%0A%20%20%20%20%20%20%20%20return%20%5B%0A%20%20%20%20%20%20%20%20%20%20%20%20write_markdown(%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20output_folder%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20pdf_file%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20converter.convert(str(pdf_file)).document.export_to_markdown()%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20)%0A%20%20%20%20%20%20%20%20%20%20%20%20for%20pdf_file%20in%20iter_pdf_files(pdf_input)%0A%20%20%20%20%20%20%20%20%5D%0A%0A%20%20%20%20return%20(convert_medium_pdfs_docling%2C)%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_(mo)%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20%23%23%20%E3%82%AB%E3%83%86%E3%82%B4%E3%83%AA%203%3A%20Gemini%20VLM%EF%BC%88%E8%A6%96%E8%A6%9A%E6%83%85%E5%A0%B1%E3%81%8C%E9%87%8D%E8%A6%81%E3%81%AA%20PDF%EF%BC%89%0A%0A%20%20%20%20%E5%9B%B3%E8%A1%A8%E3%80%81%E3%83%80%E3%82%A4%E3%82%A2%E3%82%B0%E3%83%A9%E3%83%A0%E3%80%81%E3%82%A4%E3%83%B3%E3%83%95%E3%82%A9%E3%82%B0%E3%83%A9%E3%83%95%E3%82%A3%E3%83%83%E3%82%AF%E3%81%AA%E3%81%A9%E3%80%81%E8%A6%8B%E3%81%9F%E7%9B%AE%E3%81%AE%E6%84%8F%E5%91%B3%E3%82%92%E8%A7%A3%E9%87%88%E3%81%97%E3%81%AA%E3%81%84%E3%81%A8%0A%20%20%20%20%E5%86%85%E5%AE%B9%E3%81%8C%E5%A4%B1%E3%82%8F%E3%82%8C%E3%82%8B%20PDF%20%E3%81%8C%E5%AF%BE%E8%B1%A1%E3%81%A7%E3%81%99%E3%80%82%E3%83%9A%E3%83%BC%E3%82%B8%E3%82%92%E7%94%BB%E5%83%8F%E3%81%A8%E3%81%97%E3%81%A6%20VLM%20%E3%81%AB%E6%B8%A1%E3%81%97%E3%80%81%E3%83%86%E3%82%AD%E3%82%B9%E3%83%88%E6%8A%BD%E5%87%BA%E3%81%A8%0A%20%20%20%20%E7%94%BB%E5%83%8F%E3%81%AE%E8%AA%AC%E6%98%8E%E3%82%92%E5%90%8C%E6%99%82%E3%81%AB%E8%A1%8C%E3%82%8F%E3%81%9B%E3%81%BE%E3%81%99%E3%80%82%0A%0A%20%20%20%20%23%23%23%20%E3%82%AB%E3%83%86%E3%82%B4%E3%83%AA%203-1%3A%20%E3%82%B7%E3%82%B9%E3%83%86%E3%83%A0%E3%83%97%E3%83%AD%E3%83%B3%E3%83%97%E3%83%88%0A%0A%20%20%20%20%E6%AC%A1%E3%81%AE%E3%82%BB%E3%83%AB%E3%81%AE%20%60SYSTEM_PROMPT%60%20%E3%81%8C%E5%A4%89%E6%8F%9B%E5%93%81%E8%B3%AA%E3%82%92%E6%B1%BA%E3%82%81%E3%81%BE%E3%81%99%E3%80%82%E6%8A%BD%E5%87%BA%E3%81%AE%E6%96%B9%E9%87%9D%E3%81%A8%E3%81%97%E3%81%A6%E3%80%81%0A%20%20%20%20%E5%8E%9F%E6%96%87%E3%81%A9%E3%81%8A%E3%82%8A%E3%81%AE%E3%83%86%E3%82%AD%E3%82%B9%E3%83%88%E3%80%81%E8%AA%AD%E3%81%BF%E9%A0%86%E3%80%81%E8%A6%8B%E5%87%BA%E3%81%97%E9%9A%8E%E5%B1%A4%E3%80%81%E8%A1%A8%E3%81%AE%20Markdown%20%E5%8C%96%E3%80%81%E6%95%B0%E5%BC%8F%E3%81%AE%20LaTeX%20%E5%8C%96%E3%80%81%0A%20%20%20%20%E7%94%BB%E5%83%8F%E3%81%AE%E8%AA%AC%E6%98%8E%E4%BB%98%E3%81%8D%E3%83%97%E3%83%AC%E3%83%BC%E3%82%B9%E3%83%9B%E3%83%AB%E3%83%80%E3%83%BC%E3%82%92%E6%8C%87%E7%A4%BA%E3%81%97%E3%80%81%E8%A6%81%E7%B4%84%E3%83%BB%E5%89%8D%E7%BD%AE%E3%81%8D%E3%83%BB%E6%8E%A8%E6%B8%AC%E3%81%AB%E3%82%88%E3%82%8B%E8%A3%9C%E5%AE%8C%E3%82%92%0A%20%20%20%20%E7%A6%81%E6%AD%A2%E3%81%97%E3%81%A6%E3%81%84%E3%81%BE%E3%81%99%E3%80%82%E5%87%BA%E5%8A%9B%E3%81%AF%20Markdown%20%E6%9C%AC%E6%96%87%E3%81%AE%E3%81%BF%E3%81%A7%E3%81%99%E3%80%82%0A%0A%20%20%20%20**%E5%8F%82%E7%85%A7**%0A%0A%20%20%20%20-%20Gemini%20API%20%E2%80%93%20Image%20Understanding%3A%20https%3A%2F%2Fai.google.dev%2Fgemini-api%2Fdocs%2Fimage-understanding%0A%20%20%20%20%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_()%3A%0A%20%20%20%20SYSTEM_PROMPT%20%3D%20%22%22%22You%20are%20an%20expert%20document%20parser%20specializing%20in%20converting%20PDF%20pages%20to%20markdown%20format.%0A%0A%20%20%20%20**Your%20task%3A**%0A%20%20%20%20Extract%20ALL%20content%20from%20the%20provided%20page%20image%20and%20return%20it%20as%20clean%2C%20well-structured%20markdown.%0A%0A%20%20%20%20**Text%20Extraction%20Rules%3A**%0A%20%20%20%201.%20Preserve%20the%20EXACT%20text%20as%20written%20(including%20typos%2C%20formatting%2C%20special%20characters)%0A%20%20%20%202.%20Maintain%20the%20logical%20reading%20order%20(top-to-bottom%2C%20left-to-right)%0A%20%20%20%203.%20Preserve%20hierarchical%20structure%20using%20appropriate%20markdown%20headers%20(%23%2C%20%23%23%2C%20%23%23%23)%0A%20%20%20%204.%20Keep%20paragraph%20breaks%20and%20line%20spacing%20as%20they%20appear%0A%20%20%20%205.%20Use%20markdown%20lists%20(-%2C%20*%2C%201.)%20for%20bullet%20points%20and%20numbered%20lists%0A%20%20%20%206.%20Preserve%20text%20emphasis%3A%20**bold**%2C%20*italic*%2C%20%60code%60%0A%20%20%20%207.%20For%20multi-column%20layouts%2C%20extract%20left%20column%20first%2C%20then%20right%20column%0A%0A%20%20%20%20**Tables%3A**%0A%20%20%20%20-%20Convert%20all%20tables%20to%20markdown%20table%20format%0A%20%20%20%20-%20Preserve%20column%20alignment%20and%20structure%0A%20%20%20%20-%20Use%20%7C%20for%20columns%20and%20-%20for%20headers%0A%0A%20%20%20%20**Mathematical%20Formulas%3A**%0A%20%20%20%20-%20Convert%20to%20LaTeX%20format%3A%20inline%20%60%24formula%24%60%2C%20display%20%60%24%24formula%24%24%60%0A%20%20%20%20-%20If%20LaTeX%20conversion%20is%20uncertain%2C%20describe%20the%20formula%20clearly%0A%0A%20%20%20%20**Images%2C%20Diagrams%2C%20Charts%3A**%0A%20%20%20%20-%20Insert%20markdown%20image%20placeholder%3A%20%60!%5BDescription%5D(image)%60%0A%20%20%20%20-%20Provide%20a%20detailed%2C%20informative%20description%20including%3A%0A%20%20%20%20%20%20*%20Type%20of%20visual%20(photo%2C%20diagram%2C%20chart%2C%20graph%2C%20illustration)%0A%20%20%20%20%20%20*%20Main%20subject%20or%20purpose%0A%20%20%20%20%20%20*%20Key%20elements%2C%20labels%2C%20or%20data%20points%0A%20%20%20%20%20%20*%20Colors%2C%20patterns%2C%20or%20notable%20visual%20features%0A%20%20%20%20%20%20*%20Context%20or%20relationship%20to%20surrounding%20text%0A%20%20%20%20-%20For%20charts%2Fgraphs%3A%20mention%20axes%2C%20data%20trends%2C%20and%20key%20values%0A%20%20%20%20-%20For%20diagrams%3A%20describe%20components%20and%20their%20relationships%0A%0A%20%20%20%20**Special%20Elements%3A**%0A%20%20%20%20-%20Footnotes%3A%20Use%20markdown%20footnote%20syntax%20%60%5B%5E1%5D%60%0A%20%20%20%20-%20Citations%3A%20Preserve%20as%20written%0A%20%20%20%20-%20Code%20blocks%3A%20Use%20triple%20backticks%20with%20language%20specification%0A%20%20%20%20-%20Quotes%3A%20Use%20%60%3E%60%20for%20blockquotes%0A%20%20%20%20-%20Links%3A%20Preserve%20as%20%60%5Btext%5D(url)%60%20if%20visible%0A%0A%20%20%20%20**Quality%20Guidelines%3A**%0A%20%20%20%20-%20DO%20NOT%20add%20explanations%2C%20comments%2C%20or%20meta-information%0A%20%20%20%20-%20DO%20NOT%20skip%20or%20summarize%20content%0A%20%20%20%20-%20DO%20NOT%20invent%20or%20hallucinate%20text%20not%20present%20in%20the%20image%0A%20%20%20%20-%20DO%20NOT%20include%20%22Here%20is%20the%20markdown...%22%20or%20similar%20preambles%0A%20%20%20%20-%20Output%20ONLY%20the%20markdown%20content%2C%20nothing%20else%0A%0A%20%20%20%20**Output%20Format%3A**%0A%20%20%20%20Return%20raw%20markdown%20with%20no%20wrapper%2C%20no%20code%20blocks%2C%20no%20explanations.%0A%20%20%20%20Start%20immediately%20with%20the%20page%20content.%0A%20%20%20%20%22%22%22.strip()%0A%20%20%20%20return%20(SYSTEM_PROMPT%2C)%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_(mo)%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20%23%23%23%20%E3%82%AB%E3%83%86%E3%82%B4%E3%83%AA%203-2%3A%20%E3%83%9A%E3%83%BC%E3%82%B8%E5%8D%98%E4%BD%8D%E3%81%AE%E5%A4%89%E6%8F%9B%E5%87%A6%E7%90%86%0A%0A%20%20%20%20%E6%AC%A1%E3%81%AE%E3%82%BB%E3%83%AB%E3%81%A7%E3%81%AF%E3%80%81PDF%20%E3%82%92%201%20%E3%83%9A%E3%83%BC%E3%82%B8%E3%81%9A%E3%81%A4%E7%94%BB%E5%83%8F%E5%8C%96%E3%81%97%E3%81%A6%20Gemini%20%E3%81%AB%E6%B8%A1%E3%81%97%E3%81%BE%E3%81%99%E3%80%82%0A%0A%20%20%20%201.%20%60fitz%60%EF%BC%88PyMuPDF%EF%BC%89%E3%81%A7%E3%83%9A%E3%83%BC%E3%82%B8%E3%82%92%20300%20DPI%20%E3%81%AE%20PNG%20%E3%81%AB%E3%83%AC%E3%83%B3%E3%83%80%E3%83%AA%E3%83%B3%E3%82%B0%E3%81%99%E3%82%8B%0A%20%20%20%202.%20%E7%94%BB%E5%83%8F%E3%81%A8%E6%8C%87%E7%A4%BA%E3%82%92%20%60SYSTEM_PROMPT%60%20%E3%81%A8%E3%81%82%E3%82%8F%E3%81%9B%E3%81%A6%E9%80%81%E4%BF%A1%E3%81%99%E3%82%8B%EF%BC%88%60temperature%3D0.1%60%20%E3%81%A7%0A%20%20%20%20%20%20%20%E5%87%BA%E5%8A%9B%E3%81%AE%E6%8F%BA%E3%82%8C%E3%82%92%E6%8A%91%E3%81%88%E3%82%8B%EF%BC%89%0A%20%20%20%203.%20%E5%BF%9C%E7%AD%94%E3%81%8C%E7%A9%BA%E3%81%AA%E3%82%89%E3%83%9A%E3%83%BC%E3%82%B8%E7%95%AA%E5%8F%B7%E4%BB%98%E3%81%8D%E3%81%A7%E5%A4%B1%E6%95%97%E3%81%95%E3%81%9B%E3%80%81%E6%AC%A0%E8%90%BD%E3%81%AB%E6%B0%97%E3%81%A5%E3%81%91%E3%82%8B%E3%82%88%E3%81%86%E3%81%AB%E3%81%99%E3%82%8B%0A%20%20%20%204.%20%E5%90%84%E3%83%9A%E3%83%BC%E3%82%B8%E3%81%AE%E5%85%88%E9%A0%AD%E3%81%AB%20%60%23%20%E3%83%9A%E3%83%BC%E3%82%B8%20N%60%20%E3%82%92%E4%BB%98%E3%81%91%E3%80%81%60---%60%20%E3%81%A7%E5%8C%BA%E5%88%87%E3%81%A3%E3%81%A6%201%20%E3%81%A4%E3%81%AE%20Markdown%20%E3%81%AB%0A%20%20%20%20%20%20%20%E3%81%BE%E3%81%A8%E3%82%81%E3%82%8B%0A%0A%20%20%20%20API%20%E3%82%AD%E3%83%BC%E3%81%AF%E5%BC%95%E6%95%B0%E3%81%A8%E3%81%97%E3%81%A6%E5%8F%97%E3%81%91%E5%8F%96%E3%82%8B%E3%81%A0%E3%81%91%E3%81%A7%E3%80%81%E3%83%8E%E3%83%BC%E3%83%88%E3%83%96%E3%83%83%E3%82%AF%E3%81%AB%E3%81%AF%E8%A1%A8%E7%A4%BA%E3%81%97%E3%81%BE%E3%81%9B%E3%82%93%E3%80%82%E3%82%AD%E3%83%BC%E3%81%8C%0A%20%20%20%20%E7%A9%BA%E3%81%AE%E5%A0%B4%E5%90%88%E3%81%AF%E3%83%AA%E3%82%AF%E3%82%A8%E3%82%B9%E3%83%88%E3%82%92%E9%80%81%E3%82%89%E3%81%9A%E3%81%AB%E5%81%9C%E6%AD%A2%E3%81%97%E3%81%BE%E3%81%99%E3%80%82%60google-genai%60%20%E3%81%AF%E4%BB%BB%E6%84%8F%E4%BE%9D%E5%AD%98%E9%96%A2%E4%BF%82%E3%81%A7%E3%80%81%0A%20%20%20%20%E6%9C%AA%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB%E3%81%AA%E3%82%89%20%60uv%20sync%20--extra%20vlm%60%20%E3%82%92%E4%BF%83%E3%81%97%E3%81%A6%E5%81%9C%E6%AD%A2%E3%81%97%E3%81%BE%E3%81%99%E3%80%82%0A%0A%20%20%20%20%E3%83%9A%E3%83%BC%E3%82%B8%E6%95%B0%E3%81%AB%E6%AF%94%E4%BE%8B%E3%81%97%E3%81%A6%20API%20%E5%91%BC%E3%81%B3%E5%87%BA%E3%81%97%E3%81%8C%E5%A2%97%E3%81%88%E3%82%8B%E3%81%9F%E3%82%81%E3%80%81%E3%81%BE%E3%81%9A%E6%95%B0%E3%83%9A%E3%83%BC%E3%82%B8%E3%81%AE%20PDF%20%E3%81%A7%E7%B5%90%E6%9E%9C%E3%82%92%0A%20%20%20%20%E7%A2%BA%E8%AA%8D%E3%81%97%E3%81%A6%E3%81%8B%E3%82%89%E3%80%81%E3%81%BE%E3%81%A8%E3%81%BE%E3%81%A3%E3%81%9F%E9%87%8F%E3%82%92%E5%87%A6%E7%90%86%E3%81%97%E3%81%A6%E3%81%8F%E3%81%A0%E3%81%95%E3%81%84%E3%80%82%0A%20%20%20%20%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(Path%2C%20SYSTEM_PROMPT%2C%20import_required%2C%20iter_pdf_files%2C%20write_markdown)%3A%0A%20%20%20%20def%20convert_complex_pdfs_vlm(%0A%20%20%20%20%20%20%20%20pdf_input%3A%20str%2C%20output_folder%3A%20str%2C%20api_key%3A%20str%2C%20model%3A%20str%0A%20%20%20%20)%20-%3E%20list%5BPath%5D%3A%0A%20%20%20%20%20%20%20%20%22%22%22Gemini%20VLM%20%E3%81%A7%E8%A6%96%E8%A6%9A%E6%83%85%E5%A0%B1%E3%81%8C%E9%87%8D%E8%A6%81%E3%81%AA%20PDF%20%E3%82%92%E3%83%9A%E3%83%BC%E3%82%B8%E3%81%94%E3%81%A8%E3%81%AB%E5%A4%89%E6%8F%9B%E3%81%99%E3%82%8B%E3%80%82%22%22%22%0A%20%20%20%20%20%20%20%20if%20not%20api_key%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20raise%20ValueError(%22%E3%82%AB%E3%83%86%E3%82%B4%E3%83%AA%203%20%E3%81%AE%E5%A4%89%E6%8F%9B%E3%81%AB%E3%81%AF%20GEMINI_API_KEY%20%E3%81%8C%E5%BF%85%E8%A6%81%E3%81%A7%E3%81%99%E3%80%82%22)%0A%20%20%20%20%20%20%20%20fitz%20%3D%20import_required(%22fitz%22%2C%20%22uv%20sync%22)%0A%20%20%20%20%20%20%20%20genai%20%3D%20import_required(%22google.genai%22%2C%20%22uv%20sync%20--extra%20vlm%22)%0A%20%20%20%20%20%20%20%20types%20%3D%20import_required(%22google.genai.types%22%2C%20%22uv%20sync%20--extra%20vlm%22)%0A%20%20%20%20%20%20%20%20client%20%3D%20genai.Client(api_key%3Dapi_key)%0A%20%20%20%20%20%20%20%20converted_files%20%3D%20%5B%5D%0A%0A%20%20%20%20%20%20%20%20for%20pdf_file%20in%20iter_pdf_files(pdf_input)%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20with%20fitz.open(pdf_file)%20as%20pdf_document%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20if%20pdf_document.page_count%20%3D%3D%200%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20raise%20ValueError(f%22%E3%83%9A%E3%83%BC%E3%82%B8%E3%81%8C%E3%81%82%E3%82%8A%E3%81%BE%E3%81%9B%E3%82%93%3A%20%7Bpdf_file%7D%22)%0A%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20markdown_pages%20%3D%20%5B%5D%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20for%20page_number%2C%20page%20in%20enumerate(pdf_document%2C%20start%3D1)%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20pixmap%20%3D%20page.get_pixmap(matrix%3Dfitz.Matrix(300%20%2F%2072%2C%20300%20%2F%2072))%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20image%20%3D%20types.Part.from_bytes(%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20data%3Dpixmap.tobytes(%22png%22)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20mime_type%3D%22image%2Fpng%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20)%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20response%20%3D%20client.models.generate_content(%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20config%3Dtypes.GenerateContentConfig(%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20system_instruction%3DSYSTEM_PROMPT%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20temperature%3D0.1%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20model%3Dmodel%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20contents%3D%5B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22Convert%20this%20PDF%20page%20to%20clean%2C%20structured%20markdown.%20%22%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22Extract%20all%20text%2C%20describe%20images%2C%20and%20preserve%20the%20layout.%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20image%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%5D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20)%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20if%20not%20response.text%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20raise%20RuntimeError(%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20f%22%E3%83%9A%E3%83%BC%E3%82%B8%20%7Bpage_number%7D%20%E3%81%AE%E5%A4%89%E6%8F%9B%E7%B5%90%E6%9E%9C%E3%81%8C%E7%A9%BA%E3%81%A7%E3%81%99%3A%20%7Bpdf_file%7D%22%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20)%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20markdown_pages.append(%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20f%22%23%20%E3%83%9A%E3%83%BC%E3%82%B8%20%7Bpage_number%7D%5Cn%5Cn%7Bresponse.text.strip()%7D%22%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20)%0A%0A%20%20%20%20%20%20%20%20%20%20%20%20converted_files.append(%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20write_markdown(output_folder%2C%20pdf_file%2C%20%22%5Cn%5Cn---%5Cn%5Cn%22.join(markdown_pages))%0A%20%20%20%20%20%20%20%20%20%20%20%20)%0A%0A%20%20%20%20%20%20%20%20return%20converted_files%0A%0A%20%20%20%20return%20(convert_complex_pdfs_vlm%2C)%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_(mo)%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20%23%23%20%E5%A4%89%E6%8F%9B%E6%96%B9%E6%B3%95%E3%81%AE%E5%88%87%E3%82%8A%E6%9B%BF%E3%81%88%0A%0A%20%20%20%20%E6%AC%A1%E3%81%AE%E3%82%BB%E3%83%AB%E3%81%AE%20%60convert_pdfs%60%20%E3%81%8C%E3%80%81%E9%81%B8%E6%8A%9E%E3%81%95%E3%82%8C%E3%81%9F%E6%96%B9%E6%B3%95%E3%81%AB%E5%BF%9C%E3%81%98%E3%81%A6%203%20%E3%81%A4%E3%81%AE%E5%AE%9F%E8%A3%85%E3%81%B8%E6%8C%AF%E3%82%8A%E5%88%86%E3%81%91%E3%81%BE%E3%81%99%E3%80%82%0A%20%20%20%20%E3%82%AB%E3%83%86%E3%82%B4%E3%83%AA%203%20%E3%81%AE%E3%81%A8%E3%81%8D%E3%81%A0%E3%81%91%E7%92%B0%E5%A2%83%E5%A4%89%E6%95%B0%20%60GEMINI_API_KEY%60%20%E3%82%92%E8%AA%AD%E3%81%BF%E5%8F%96%E3%82%8A%E3%80%81%E6%9C%AA%E8%A8%AD%E5%AE%9A%E3%81%AA%E3%82%89%E5%A4%89%E6%8F%9B%E3%82%92%0A%20%20%20%20%E5%A7%8B%E3%82%81%E3%82%8B%E5%89%8D%E3%81%AB%E5%81%9C%E6%AD%A2%E3%81%97%E3%81%BE%E3%81%99%E3%80%82%0A%0A%20%20%20%20%23%23%23%20%E9%81%B8%E3%81%B3%E6%96%B9%0A%0A%20%20%20%20%60%60%60text%0A%20%20%20%20PDF%20%E3%82%92%E7%A2%BA%E8%AA%8D%0A%20%20%20%20%20%20%E2%94%9C%E2%94%80%20%E9%81%B8%E6%8A%9E%E5%8F%AF%E8%83%BD%E3%81%AA%E3%83%86%E3%82%AD%E3%82%B9%E3%83%88%E3%81%AE%E3%81%BF%E3%81%A7%E5%8D%98%E7%B4%94%E3%81%AA%E3%83%AC%E3%82%A4%E3%82%A2%E3%82%A6%E3%83%88%20%E2%86%92%20PyMuPDF4LLM%0A%20%20%20%20%20%20%E2%94%9C%E2%94%80%20%E3%82%B9%E3%82%AD%E3%83%A3%E3%83%B3%E3%80%81OCR%E3%80%81%E8%A1%A8%E3%80%81%E8%A4%87%E6%95%B0%E6%AE%B5%E7%B5%84%E3%81%BF%E3%81%8C%E5%BF%85%E8%A6%81%20%E2%86%92%20Docling%0A%20%20%20%20%20%20%E2%94%94%E2%94%80%20%E5%9B%B3%E8%A1%A8%E3%82%84%E3%83%80%E3%82%A4%E3%82%A2%E3%82%B0%E3%83%A9%E3%83%A0%E3%81%AE%E6%84%8F%E5%91%B3%E3%82%92%E8%A7%A3%E9%87%88%E3%81%99%E3%82%8B%E5%BF%85%E8%A6%81%E3%81%8C%E3%81%82%E3%82%8B%20%E2%86%92%20VLM%20(Gemini)%0A%20%20%20%20%60%60%60%0A%0A%20%20%20%20%E4%BB%A3%E8%A1%A8%E7%9A%84%E3%81%AA%20PDF%20%E3%82%92%E5%B0%91%E6%95%B0%E3%81%9A%E3%81%A4%E5%A4%89%E6%8F%9B%E3%81%97%E3%80%81%E5%86%85%E5%AE%B9%E3%80%81%E8%A6%8B%E5%87%BA%E3%81%97%E3%80%81%E8%A1%A8%E3%80%81%E6%95%B0%E5%BC%8F%E3%80%81%E7%94%BB%E5%83%8F%E3%81%AE%E8%AA%AC%E6%98%8E%E3%81%8C%E7%9B%AE%E7%9A%84%E3%81%AB%0A%20%20%20%20%E5%90%88%E3%81%86%E3%81%93%E3%81%A8%E3%82%92%E7%A2%BA%E8%AA%8D%E3%81%97%E3%81%A6%E3%81%8B%E3%82%89%E3%80%81%E3%82%B3%E3%83%BC%E3%83%91%E3%82%B9%E5%85%A8%E4%BD%93%E3%82%92%E5%87%A6%E7%90%86%E3%81%97%E3%81%A6%E3%81%8F%E3%81%A0%E3%81%95%E3%81%84%E3%80%82%E3%82%AB%E3%83%86%E3%82%B4%E3%83%AA%203%20%E3%81%AF%E7%B2%BE%E5%BA%A6%E3%81%8C%0A%20%20%20%20%E9%AB%98%E3%81%84%E4%B8%80%E6%96%B9%E3%81%A7%E3%80%81%E5%87%A6%E7%90%86%E6%99%82%E9%96%93%E3%81%A8%20API%20%E3%82%B3%E3%82%B9%E3%83%88%E3%81%8C%E5%A2%97%E3%81%88%E3%81%BE%E3%81%99%E3%80%82%0A%0A%20%20%20%20%7C%20%E3%83%84%E3%83%BC%E3%83%AB%20%7C%20%E9%95%B7%E6%89%80%20%7C%20%E6%B3%A8%E6%84%8F%E7%82%B9%20%7C%20%E5%90%91%E3%81%8F%20PDF%20%7C%0A%20%20%20%20%7C%20---%20%7C%20---%20%7C%20---%20%7C%20---%20%7C%0A%20%20%20%20%7C%20PyMuPDF4LLM%20%7C%20%E9%AB%98%E9%80%9F%E3%80%81%E3%83%AD%E3%83%BC%E3%82%AB%E3%83%AB%E3%80%81%E3%83%86%E3%82%AD%E3%82%B9%E3%83%88%E6%8A%BD%E5%87%BA%E3%81%8C%E7%B0%A1%E6%BD%94%20%7C%20OCR%20%E3%82%84%E9%87%8D%E8%A6%81%E3%81%AA%E8%A6%96%E8%A6%9A%E6%83%85%E5%A0%B1%E3%81%AE%E8%A7%A3%E9%87%88%E3%81%AB%E3%81%AF%E4%B8%8D%E5%90%91%E3%81%8D%20%7C%20%E3%83%87%E3%82%B8%E3%82%BF%E3%83%AB%E3%81%AE%E3%83%86%E3%82%AD%E3%82%B9%E3%83%88%E4%B8%AD%E5%BF%83%E6%96%87%E6%9B%B8%20%7C%0A%20%20%20%20%7C%20Docling%20%7C%20OCR%E3%80%81%E8%A1%A8%E6%A7%8B%E9%80%A0%E3%80%81%E3%83%AC%E3%82%A4%E3%82%A2%E3%82%A6%E3%83%88%E8%AA%8D%E8%AD%98%20%7C%20%E4%BB%BB%E6%84%8F%E4%BE%9D%E5%AD%98%E9%96%A2%E4%BF%82%E3%81%A8%E5%87%A6%E7%90%86%E6%99%82%E9%96%93%E3%81%8C%E5%BF%85%E8%A6%81%20%7C%20%E3%82%B9%E3%82%AD%E3%83%A3%E3%83%B3%E6%96%87%E6%9B%B8%E3%80%81%E8%A1%A8%E3%80%81%E8%A4%87%E6%95%B0%E6%AE%B5%E7%B5%84%E3%81%BF%20%7C%0A%20%20%20%20%7C%20Gemini%20VLM%20%7C%20%E5%9B%B3%E8%A1%A8%E3%83%BB%E7%94%BB%E5%83%8F%E3%83%BB%E7%A9%BA%E9%96%93%E7%9A%84%E3%81%AA%E9%96%A2%E4%BF%82%E3%82%92%E8%A7%A3%E9%87%88%20%7C%20API%20%E3%82%AD%E3%83%BC%E3%80%81%E3%83%8D%E3%83%83%E3%83%88%E3%83%AF%E3%83%BC%E3%82%AF%E3%80%81%E3%82%B3%E3%82%B9%E3%83%88%E3%81%8C%E5%BF%85%E8%A6%81%20%7C%20%E5%9B%B3%E8%A1%A8%E3%82%84%E7%94%BB%E5%83%8F%E3%81%AE%E6%84%8F%E5%91%B3%E3%81%8C%E9%87%8D%E8%A6%81%E3%81%AA%E6%96%87%E6%9B%B8%20%7C%0A%0A%20%20%20%20%23%23%23%20%E3%81%9D%E3%81%AE%E3%81%BB%E3%81%8B%E3%81%AE%20PDF%20%E6%8A%BD%E5%87%BA%E3%83%BB%E5%87%A6%E7%90%86%E3%83%84%E3%83%BC%E3%83%AB%0A%0A%20%20%20%20%E3%81%93%E3%81%AE%E3%83%8E%E3%83%BC%E3%83%88%E3%83%96%E3%83%83%E3%82%AF%E3%81%AE%203%20%E3%81%A4%E4%BB%A5%E5%A4%96%E3%81%AB%E3%82%82%E3%80%81%E7%94%A8%E9%80%94%E3%81%AB%E5%BF%9C%E3%81%98%E3%81%A6%E6%AC%A1%E3%81%AE%E3%83%84%E3%83%BC%E3%83%AB%E3%82%92%E6%A4%9C%E8%A8%8E%E3%81%A7%E3%81%8D%E3%81%BE%E3%81%99%E3%80%82%0A%0A%20%20%20%20-%20PDFPlumber%3A%20https%3A%2F%2Fgithub.com%2Fjsvine%2Fpdfplumber%0A%20%20%20%20-%20MarkItDown%3A%20https%3A%2F%2Fgithub.com%2Fmicrosoft%2Fmarkitdown%0A%20%20%20%20-%20Marker%3A%20https%3A%2F%2Fgithub.com%2FVikParuchuri%2Fmarker%0A%20%20%20%20-%20Unstructured%3A%20https%3A%2F%2Fgithub.com%2FUnstructured-IO%2Funstructured%0A%20%20%20%20-%20DeepSeek%20OCR%3A%20https%3A%2F%2Fgithub.com%2Fdeepseek-ai%2FDeepSeek-OCR%0A%20%20%20%20-%20DeepSeek%20OCR%202%3A%20https%3A%2F%2Fgithub.com%2Fdeepseek-ai%2FDeepSeek-OCR-2%0A%20%20%20%20-%20Paddle%20OCR%3A%20https%3A%2F%2Fgithub.com%2FPaddlePaddle%2FPaddleOCR%0A%20%20%20%20-%20Surya%20OCR%3A%20https%3A%2F%2Fgithub.com%2FVikParuchuri%2Fsurya%0A%20%20%20%20-%20Dolphin%3A%20https%3A%2F%2Fgithub.com%2Fbytedance%2FDolphin%0A%20%20%20%20-%20LlamaParse%3A%20https%3A%2F%2Fgithub.com%2Frun-llama%2Fllama_parse%0A%20%20%20%20-%20Nougat%3A%20https%3A%2F%2Fgithub.com%2Ffacebookresearch%2Fnougat%0A%20%20%20%20-%20MinerU%3A%20https%3A%2F%2Fgithub.com%2Fopendatalab%2FMinerU%0A%20%20%20%20-%20Dots.ocr%3A%20https%3A%2F%2Fgithub.com%2Frednote-hilab%2Fdots.ocr%0A%20%20%20%20-%20GLM%20OCR%3A%20https%3A%2F%2Fgithub.com%2Fzai-org%2FGLM-OCR%0A%20%20%20%20-%20Liteparse%3A%20https%3A%2F%2Fgithub.com%2Frun-llama%2Fliteparse%0A%20%20%20%20-%20Chunky%3A%20https%3A%2F%2Fgithub.com%2FGiovanniPasq%2Fchunky%0A%20%20%20%20%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(%0A%20%20%20%20Path%2C%0A%20%20%20%20convert_complex_pdfs_vlm%2C%0A%20%20%20%20convert_medium_pdfs_docling%2C%0A%20%20%20%20convert_simple_pdfs_pymupdf4llm%2C%0A%20%20%20%20os%2C%0A)%3A%0A%20%20%20%20def%20convert_pdfs(%0A%20%20%20%20%20%20%20%20method%3A%20str%2C%20pdf_input%3A%20str%2C%20output_folder%3A%20str%2C%20model%3A%20str%0A%20%20%20%20)%20-%3E%20list%5BPath%5D%3A%0A%20%20%20%20%20%20%20%20%22%22%22%E9%81%B8%E6%8A%9E%E3%81%95%E3%82%8C%E3%81%9F%E6%96%B9%E6%B3%95%E3%81%A7%20PDF%20%E3%82%92%E5%A4%89%E6%8F%9B%E3%81%99%E3%82%8B%E3%80%82%22%22%22%0A%20%20%20%20%20%20%20%20if%20method%20%3D%3D%20%22pymupdf4llm%22%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20return%20convert_simple_pdfs_pymupdf4llm(pdf_input%2C%20output_folder)%0A%20%20%20%20%20%20%20%20if%20method%20%3D%3D%20%22docling%22%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20return%20convert_medium_pdfs_docling(pdf_input%2C%20output_folder)%0A%20%20%20%20%20%20%20%20if%20method%20%3D%3D%20%22gemini%22%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20api_key%20%3D%20os.getenv(%22GEMINI_API_KEY%22)%0A%20%20%20%20%20%20%20%20%20%20%20%20if%20not%20api_key%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20raise%20RuntimeError(%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22%E3%82%AB%E3%83%86%E3%82%B4%E3%83%AA%203%20%E3%82%92%E5%AE%9F%E8%A1%8C%E3%81%99%E3%82%8B%E5%89%8D%E3%81%AB%20GEMINI_API_KEY%20%E3%82%92%E7%92%B0%E5%A2%83%E5%A4%89%E6%95%B0%E3%81%B8%E8%A8%AD%E5%AE%9A%E3%81%97%E3%81%A6%E3%81%8F%E3%81%A0%E3%81%95%E3%81%84%E3%80%82%22%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20)%0A%20%20%20%20%20%20%20%20%20%20%20%20return%20convert_complex_pdfs_vlm(pdf_input%2C%20output_folder%2C%20api_key%2C%20model)%0A%20%20%20%20%20%20%20%20raise%20ValueError(f%22%E6%9C%AA%E5%AF%BE%E5%BF%9C%E3%81%AE%E5%A4%89%E6%8F%9B%E6%96%B9%E6%B3%95%E3%81%A7%E3%81%99%3A%20%7Bmethod%7D%22)%0A%0A%20%20%20%20return%20(convert_pdfs%2C)%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_(mo)%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20%23%23%20%E5%A4%89%E6%8F%9B%E3%81%AE%E5%AE%9F%E8%A1%8C%0A%0A%20%20%20%20%E3%81%93%E3%81%93%E3%81%BE%E3%81%A7%E3%81%AE%E8%A8%AD%E5%AE%9A%E3%81%A7%E5%A4%89%E6%8F%9B%E3%82%92%E5%AE%9F%E8%A1%8C%E3%81%97%E3%81%BE%E3%81%99%E3%80%82%E6%AC%A1%E3%81%AE%E3%82%BB%E3%83%AB%E3%81%AF%20%60mo.stop%60%20%E3%81%A7%E4%BF%9D%E8%AD%B7%E3%81%95%E3%82%8C%E3%81%A6%E3%81%8A%E3%82%8A%E3%80%81%0A%20%20%20%20**%E5%A4%89%E6%8F%9B%E3%82%92%E5%AE%9F%E8%A1%8C**%20%E3%83%9C%E3%82%BF%E3%83%B3%E3%82%92%E6%8A%BC%E3%81%99%E3%81%BE%E3%81%A7%20PDF%20%E3%81%AE%E8%AA%AD%E3%81%BF%E8%BE%BC%E3%81%BF%E3%82%82%20Markdown%20%E3%81%AE%E6%9B%B8%E3%81%8D%E8%BE%BC%E3%81%BF%E3%82%82%0A%20%20%20%20%E8%A1%8C%E3%81%84%E3%81%BE%E3%81%9B%E3%82%93%E3%80%82%E5%AE%9F%E8%A1%8C%E5%BE%8C%E3%81%AF%E3%80%81%E7%94%9F%E6%88%90%E3%81%95%E3%82%8C%E3%81%9F%20Markdown%20%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%81%AE%E4%B8%80%E8%A6%A7%E3%82%92%E8%A1%A8%E7%A4%BA%E3%81%97%E3%81%BE%E3%81%99%E3%80%82%0A%20%20%20%20%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(%0A%20%20%20%20conversion_method%2C%0A%20%20%20%20convert_pdfs%2C%0A%20%20%20%20mo%2C%0A%20%20%20%20model_name%2C%0A%20%20%20%20output_path%2C%0A%20%20%20%20run_conversion%2C%0A%20%20%20%20source_path%2C%0A)%3A%0A%20%20%20%20mo.stop(%0A%20%20%20%20%20%20%20%20not%20run_conversion.value%2C%0A%20%20%20%20%20%20%20%20mo.md(%22%E5%85%A5%E5%8A%9B%E5%86%85%E5%AE%B9%E3%82%92%E7%A2%BA%E8%AA%8D%E3%81%97%E3%81%A6%E3%81%8B%E3%82%89%20**%E5%A4%89%E6%8F%9B%E3%82%92%E5%AE%9F%E8%A1%8C**%20%E3%82%92%E6%8A%BC%E3%81%97%E3%81%A6%E3%81%8F%E3%81%A0%E3%81%95%E3%81%84%E3%80%82%22)%2C%0A%20%20%20%20)%0A%20%20%20%20converted_files%20%3D%20convert_pdfs(%0A%20%20%20%20%20%20%20%20conversion_method.value%2C%0A%20%20%20%20%20%20%20%20source_path.value%2C%0A%20%20%20%20%20%20%20%20output_path.value%2C%0A%20%20%20%20%20%20%20%20model_name.value%2C%0A%20%20%20%20)%0A%20%20%20%20mo.md(%0A%20%20%20%20%20%20%20%20%22%23%23%20%E5%A4%89%E6%8F%9B%E7%B5%90%E6%9E%9C%5Cn%5Cn%22%0A%20%20%20%20%20%20%20%20f%22%7Blen(converted_files)%7D%20%E4%BB%B6%E3%81%AE%20PDF%20%E3%82%92%E5%A4%89%E6%8F%9B%E3%81%97%E3%81%BE%E3%81%97%E3%81%9F%E3%80%82%5Cn%5Cn%22%0A%20%20%20%20%20%20%20%20%2B%20%22%5Cn%22.join(f%22-%20%60%7Bfile_path%7D%60%22%20for%20file_path%20in%20converted_files)%0A%20%20%20%20)%0A%20%20%20%20return%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_(mo)%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20%23%23%20%E5%A4%89%E6%8F%9B%E7%B5%90%E6%9E%9C%E3%81%AE%E5%93%81%E8%B3%AA%E7%A2%BA%E8%AA%8D%0A%0A%20%20%20%20%E5%A4%89%E6%8F%9B%E3%81%97%E3%81%9F%20Markdown%20%E3%81%8C%20RAG%20%E3%81%AE%E5%85%A5%E5%8A%9B%E3%81%A8%E3%81%97%E3%81%A6%E4%BD%BF%E3%81%88%E3%82%8B%E3%81%8B%E3%82%92%E3%80%81%E7%B0%A1%E6%98%93%E3%81%AA%E6%8C%87%E6%A8%99%E3%81%A7%E7%A2%BA%E8%AA%8D%E3%81%97%E3%81%BE%E3%81%99%E3%80%82%0A%20%20%20%20%E6%AC%A1%E3%81%AE%E3%82%BB%E3%83%AB%E3%81%AE%20%60validate_markdown_quality%60%20%E3%81%AF%E3%80%81%E5%8D%98%E8%AA%9E%E6%95%B0%E3%80%81%E8%A6%8B%E5%87%BA%E3%81%97%E3%81%AE%E6%9C%89%E7%84%A1%E3%80%81%E8%A1%A8%E3%82%84%E6%95%B0%E5%BC%8F%E3%82%89%E3%81%97%E3%81%84%0A%20%20%20%20%E8%A8%98%E6%B3%95%E3%81%AE%E6%9C%89%E7%84%A1%E3%80%81%E5%B9%B3%E5%9D%87%E8%A1%8C%E9%95%B7%E3%80%81%E7%A9%BA%E8%A1%8C%E3%81%AE%E6%AF%94%E7%8E%87%E3%82%92%E8%BF%94%E3%81%97%E3%81%BE%E3%81%99%E3%80%82%0A%0A%20%20%20%20%E3%81%9F%E3%81%A8%E3%81%88%E3%81%B0%E3%80%81%E5%8D%98%E8%AA%9E%E6%95%B0%E3%81%8C%E6%A5%B5%E7%AB%AF%E3%81%AB%E5%B0%91%E3%81%AA%E3%81%91%E3%82%8C%E3%81%B0%E6%8A%BD%E5%87%BA%E6%BC%8F%E3%82%8C%E3%80%81%E8%A6%8B%E5%87%BA%E3%81%97%E3%81%8C%E7%84%A1%E3%81%91%E3%82%8C%E3%81%B0%E6%A7%8B%E9%80%A0%E3%81%AE%E6%B6%88%E5%A4%B1%E3%80%81%0A%20%20%20%20%E8%A1%A8%E3%82%92%E5%90%AB%E3%82%80%20PDF%20%E3%81%AA%E3%81%AE%E3%81%AB%E5%8C%BA%E5%88%87%E3%82%8A%E8%A8%98%E5%8F%B7%E3%81%8C%E7%84%A1%E3%81%91%E3%82%8C%E3%81%B0%E8%A1%A8%E8%AA%8D%E8%AD%98%E3%81%AE%E5%A4%B1%E6%95%97%E3%81%8C%E7%96%91%E3%82%8F%E3%82%8C%E3%81%BE%E3%81%99%E3%80%82%0A%20%20%20%20%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(Path)%3A%0A%20%20%20%20def%20validate_markdown_quality(markdown_file%3A%20Path)%20-%3E%20dict%5Bstr%2C%20str%20%7C%20float%20%7C%20int%5D%3A%0A%20%20%20%20%20%20%20%20%22%22%22%E5%A4%89%E6%8F%9B%E6%B8%88%E3%81%BF%20Markdown%20%E3%81%AE%E5%9F%BA%E6%9C%AC%E7%9A%84%E3%81%AA%E5%93%81%E8%B3%AA%E6%8C%87%E6%A8%99%E3%82%92%E8%BF%94%E3%81%99%E3%80%82%22%22%22%0A%20%20%20%20%20%20%20%20if%20not%20markdown_file.is_file()%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20raise%20FileNotFoundError(f%22Markdown%20%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%81%8C%E8%A6%8B%E3%81%A4%E3%81%8B%E3%82%8A%E3%81%BE%E3%81%9B%E3%82%93%3A%20%7Bmarkdown_file%7D%22)%0A%20%20%20%20%20%20%20%20content%20%3D%20markdown_file.read_text(encoding%3D%22utf-8%22)%0A%20%20%20%20%20%20%20%20line_count%20%3D%20max(content.count(%22%5Cn%22)%2C%201)%0A%20%20%20%20%20%20%20%20return%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%22%E5%8D%98%E8%AA%9E%E6%95%B0%22%3A%20len(content.split())%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%22%E8%A6%8B%E5%87%BA%E3%81%97%E3%82%92%E5%90%AB%E3%82%80%22%3A%20%22%E3%81%AF%E3%81%84%22%20if%20%22%23%22%20in%20content%20else%20%22%E3%81%84%E3%81%84%E3%81%88%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%22%E8%A1%A8%E3%82%89%E3%81%97%E3%81%84%E5%8C%BA%E5%88%87%E3%82%8A%E3%82%92%E5%90%AB%E3%82%80%22%3A%20%22%E3%81%AF%E3%81%84%22%20if%20%22%7C%22%20in%20content%20else%20%22%E3%81%84%E3%81%84%E3%81%88%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%22%E6%95%B0%E5%BC%8F%E3%82%89%E3%81%97%E3%81%84%E8%A8%98%E6%B3%95%E3%82%92%E5%90%AB%E3%82%80%22%3A%20%22%E3%81%AF%E3%81%84%22%20if%20%22%24%22%20in%20content%20else%20%22%E3%81%84%E3%81%84%E3%81%88%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%22%E5%B9%B3%E5%9D%87%E8%A1%8C%E9%95%B7%22%3A%20round(len(content)%20%2F%20line_count%2C%201)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%22%E7%A9%BA%E8%A1%8C%E3%81%AE%E6%AF%94%E7%8E%87%22%3A%20round(content.count(%22%5Cn%5Cn%22)%20%2F%20line_count%2C%203)%2C%0A%20%20%20%20%20%20%20%20%7D%0A%0A%20%20%20%20return%20(validate_markdown_quality%2C)%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_(mo)%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20%23%23%23%20%E7%A2%BA%E8%AA%8D%E3%81%99%E3%82%8B%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%81%AE%E6%8C%87%E5%AE%9A%0A%0A%20%20%20%20%E7%A2%BA%E8%AA%8D%E3%81%97%E3%81%9F%E3%81%84%20Markdown%20%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%81%AE%E3%83%91%E3%82%B9%E3%82%92%E5%85%A5%E5%8A%9B%E3%81%97%E3%80%81**%E5%93%81%E8%B3%AA%E3%82%92%E7%A2%BA%E8%AA%8D**%20%E3%82%92%E6%8A%BC%E3%81%97%E3%81%A6%E3%81%8F%E3%81%A0%E3%81%95%E3%81%84%E3%80%82%0A%20%20%20%20%E3%81%93%E3%81%93%E3%81%A7%E3%82%82%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%81%AE%E8%AA%AD%E3%81%BF%E8%BE%BC%E3%81%BF%E3%81%AF%E3%83%9C%E3%82%BF%E3%83%B3%E3%82%92%E6%8A%BC%E3%81%99%E3%81%BE%E3%81%A7%E8%A1%8C%E3%81%84%E3%81%BE%E3%81%9B%E3%82%93%E3%80%82%0A%20%20%20%20%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(mo)%3A%0A%20%20%20%20markdown_path%20%3D%20mo.ui.text(%0A%20%20%20%20%20%20%20%20value%3D%22.%2Fmd_output%2Foutput.md%22%2C%0A%20%20%20%20%20%20%20%20label%3D%22%E5%93%81%E8%B3%AA%E3%82%92%E7%A2%BA%E8%AA%8D%E3%81%99%E3%82%8B%20Markdown%20%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%22%2C%0A%20%20%20%20%20%20%20%20full_width%3DTrue%2C%0A%20%20%20%20)%0A%20%20%20%20run_validation%20%3D%20mo.ui.run_button(%0A%20%20%20%20%20%20%20%20label%3D%22%E5%93%81%E8%B3%AA%E3%82%92%E7%A2%BA%E8%AA%8D%22%2C%0A%20%20%20%20%20%20%20%20kind%3D%22neutral%22%2C%0A%20%20%20%20%20%20%20%20full_width%3DTrue%2C%0A%20%20%20%20)%0A%20%20%20%20mo.vstack(%5Bmarkdown_path%2C%20run_validation%5D)%0A%20%20%20%20return%20markdown_path%2C%20run_validation%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_(mo)%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20%23%23%23%20%E6%8C%87%E6%A8%99%E3%81%AE%E8%A1%A8%E7%A4%BA%0A%0A%20%20%20%20%E6%AC%A1%E3%81%AE%E3%82%BB%E3%83%AB%E3%81%AF%E6%8C%87%E5%AE%9A%E3%81%97%E3%81%9F%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%82%92%E8%AA%AD%E3%81%BF%E8%BE%BC%E3%81%BF%E3%80%81%E6%8C%87%E6%A8%99%E3%82%92%E8%A1%A8%E3%81%AB%E3%81%97%E3%81%A6%E8%A1%A8%E7%A4%BA%E3%81%97%E3%81%BE%E3%81%99%E3%80%82%0A%20%20%20%20%E3%81%93%E3%82%8C%E3%82%89%E3%81%AF%E8%87%AA%E5%8B%95%E3%81%A7%E5%88%86%E3%81%8B%E3%82%8B%E7%AF%84%E5%9B%B2%E3%81%AE%E7%A2%BA%E8%AA%8D%E3%81%AB%E3%81%99%E3%81%8E%E3%81%BE%E3%81%9B%E3%82%93%E3%80%82%E5%AE%9F%E9%81%8B%E7%94%A8%E5%89%8D%E3%81%AB%E3%81%AF%E5%85%83%E3%81%AE%20PDF%20%E3%81%A8%E8%A6%8B%E6%AF%94%E3%81%B9%E3%80%81%0A%20%20%20%20%E8%A1%A8%E3%80%81%E6%95%B0%E5%BC%8F%E3%80%81%E7%94%BB%E5%83%8F%E8%AA%AC%E6%98%8E%E3%80%81%E8%AA%AD%E3%81%BF%E9%A0%86%E3%81%8C%E8%A6%81%E4%BB%B6%E3%82%92%E6%BA%80%E3%81%9F%E3%81%99%E3%81%8B%E3%82%82%E7%A2%BA%E8%AA%8D%E3%81%97%E3%81%A6%E3%81%8F%E3%81%A0%E3%81%95%E3%81%84%E3%80%82%0A%20%20%20%20%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(Path%2C%20markdown_path%2C%20mo%2C%20run_validation%2C%20validate_markdown_quality)%3A%0A%20%20%20%20mo.stop(%0A%20%20%20%20%20%20%20%20not%20run_validation.value%2C%0A%20%20%20%20%20%20%20%20mo.md(%22Markdown%20%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%82%92%E6%8C%87%E5%AE%9A%E3%81%97%E3%81%A6%E3%81%8B%E3%82%89%20**%E5%93%81%E8%B3%AA%E3%82%92%E7%A2%BA%E8%AA%8D**%20%E3%82%92%E6%8A%BC%E3%81%97%E3%81%A6%E3%81%8F%E3%81%A0%E3%81%95%E3%81%84%E3%80%82%22)%2C%0A%20%20%20%20)%0A%20%20%20%20quality_metrics%20%3D%20validate_markdown_quality(%0A%20%20%20%20%20%20%20%20Path(markdown_path.value).expanduser()%0A%20%20%20%20)%0A%20%20%20%20metrics_rows%20%3D%20%22%5Cn%22.join(%0A%20%20%20%20%20%20%20%20f%22%7C%20%7Bmetric%7D%20%7C%20%7Bvalue%7D%20%7C%22%20for%20metric%2C%20value%20in%20quality_metrics.items()%0A%20%20%20%20)%0A%20%20%20%20mo.md(%0A%20%20%20%20%20%20%20%20%22%23%23%20Markdown%20%E3%81%AE%E5%93%81%E8%B3%AA%E6%8C%87%E6%A8%99%5Cn%5Cn%22%0A%20%20%20%20%20%20%20%20%22%7C%20%E6%8C%87%E6%A8%99%20%7C%20%E5%80%A4%20%7C%5Cn%22%0A%20%20%20%20%20%20%20%20%22%7C%20---%20%7C%20---%20%7C%5Cn%22%0A%20%20%20%20%20%20%20%20f%22%7Bmetrics_rows%7D%5Cn%5Cn%22%0A%20%20%20%20%20%20%20%20%22%E3%81%93%E3%82%8C%E3%82%89%E3%81%AF%E5%9F%BA%E6%9C%AC%E7%9A%84%E3%81%AA%E7%A2%BA%E8%AA%8D%E6%8C%87%E6%A8%99%E3%81%A7%E3%81%99%E3%80%82%E5%AE%9F%E9%81%8B%E7%94%A8%E5%89%8D%E3%81%AB%E3%81%AF%E3%80%81%E5%85%83%E3%81%AE%20PDF%20%E3%81%A8%E6%AF%94%E8%BC%83%E3%81%97%E3%81%A6%22%0A%20%20%20%20%20%20%20%20%22%E8%A1%A8%E3%80%81%E6%95%B0%E5%BC%8F%E3%80%81%E7%94%BB%E5%83%8F%E8%AA%AC%E6%98%8E%E3%80%81%E8%AA%AD%E3%81%BF%E9%A0%86%E3%81%8C%E8%A6%81%E4%BB%B6%E3%82%92%E6%BA%80%E3%81%9F%E3%81%99%E3%81%8B%E3%82%82%E7%A2%BA%E8%AA%8D%E3%81%97%E3%81%A6%E3%81%8F%E3%81%A0%E3%81%95%E3%81%84%E3%80%82%22%0A%20%20%20%20)%0A%20%20%20%20return%0A%0A%0Aif%20__name__%20%3D%3D%20%22__main__%22%3A%0A%20%20%20%20app.run()%0A
721395e9ea4c47cc805e88ca9de9ec9c