今回から、一般的な LaTeX 関連ツールを整理し、このアカウント設立の目的に立ち返ります。
簡単な紹介#
過去には、数学公式を認識してコードに変換するための最も優れたウェブサイト / ソフトウェアは Mathpix でした:pdf、png から tex、md へのさまざまな形式変換をサポートしており、もちろん docx なども含まれています。pdf 文書の変換やスクリーンショットの認識において、モバイル端末の Snip App からデスクトップクライアント、ウェブ版、ブラウザプラグインまで全エコシステムのカバーにより、使用体験は非常にスムーズです。
しかし、無料版の使用制限はかなり限られており、有料サブスクリプションは非常に高価です(年間 50 ドル);さらに、ウェブ版では時折ネットワーク接続が不安定になることがあります。
しかし今、地球上最強の OCR ツール Mistral が登場しました。これはフランスのスタートアップ AI 企業で、ヨーロッパ版の DeepSeek と考えることができます。その価格も非常に安価です(OCR 機能は約 1 ドルで千ページ以上の pdf を変換できます)。
使用例#
ファイルアップロード#
公式ウェブサイトのチャットインターフェースに直接アクセスします(携帯番号でアカウント登録が必要な場合があります):
他の大規模言語モデルと同様に、ダイアログボックス内にファイルをアップロードし、「markdown に変換」と入力するだけです;例えば、ここでは DeepSeek-R1 に関する論文をアップロードしました:
数秒待つと、変換された markdown コードが得られます。
さらに、Typora や Obsidian などの markdown エディタを利用すれば、pdf、docx などの形式に変換したり、表示したりできます(pandoc を追加でインストールする必要があるかもしれません)。
ウェブ版の効果展示#
さらなる効果展示については公式ウェブサイトをご覧ください:
これは元の pdf ファイルです:
これは変換後に Typora で表示された効果です(テーマ:Newsprint):
画像を除けば、効果は非常に良好ですが、画像も抽出して適切な位置に保持したい場合は、以下の方法を使用する必要があります。
上級設定#
公式ウェブサイトのチャットインターフェースでファイルを処理するだけでなく、API 呼び出しを通じてバッチ処理を行うこともできます。
@nicekateが提供した Python コードに感謝します。これにより、ローカルで Mistral API を呼び出してファイル処理を行うことができ、Bilibili には対応するデモ動画もあります。
- GitHub リポジトリのアドレス:
https://github.com/nicekate/mistral-ocr - Bilibili 動画:
【実測 Mistral OCR :世界最高の文書理解モデル?】 https://www.bilibili.com/video/BV1Bw92YiEEH
設定方法も非常に簡単で、自分の API キーを申請し、上記のリポジトリをクローンして、対応する API キーを入力するだけです。
API キーの申請#
コンソールの左側メニューで「API Keys」をクリックし、右上の「Create new key」をクリックしてコピーします。
Python コードのダウンロード#
まず、上記のリポジトリをローカルにクローンします:
git clone https://github.com/nicekate/mistral-ocr.git
次に、依存関係をインストールします:
pip install mistralai
pdf_ocr.py
内で API キーと PDF ファイルのパスを変更します(72~73 行):
API_KEY = "自分のapiキーを入力"
PDF_PATH = "xxx.pdf"
ファイルを実行すると、同じディレクトリ内に変換後のフォルダocr_results_xxx
が見つかり、その中には変換された markdown ファイルと画像ファイルが含まれています。
ローカル変換効果展示#
テーマ:Typora GitHub
バッチ処理#
複数の PDF ファイルを同時に変換する必要がある場合、基盤の上に自分でバッチ処理機能を追加しました。同じディレクトリ内のすべての PDF ファイルを変換できます。
具体的な変更は以下の通りです:
- 指定したフォルダをスキャンしてすべての PDF ファイルの完全なパスを返す
get_pdf_files_in_directory
関数を追加しました。
2.__main__
内で、手動で PDF ファイルのパスを指定する方法を、フォルダから自動的に PDF ファイルを取得する方法に置き換えました。 - フォルダ内に PDF ファイルがない場合、ユーザーに通知します。
以下は追加されたコードスニペットです:
def process_pdfs(pdf_paths: list, api_key: str) -> None:
for pdf_path in pdf_paths:
try:
output_dir = process_pdf(pdf_path, api_key)
print(f"ファイル {pdf_path} の処理が完了しました。結果は: {output_dir} に保存されています。")
except Exception as e:
print(f"ファイル {pdf_path} の処理中にエラーが発生しました: {e}")
def get_pdf_files_in_directory(directory: str) -> list:
"""指定したディレクトリ内のすべてのPDFファイルのパスを取得します"""
pdf_files = []
for file in os.listdir(directory):
if file.endswith(".pdf"):
pdf_files.append(os.path.join(directory, file))
return pdf_files
if __name__ == "__main__":
# 使用例
API_KEY = "your_mistral_api_key"
DIRECTORY = "your_pdf_file" # PDFファイルを含むフォルダ名を指定
# フォルダ内のすべてのPDFファイルを取得
PDF_PATHS = get_pdf_files_in_directory(DIRECTORY)
if not PDF_PATHS:
print(f"ディレクトリ {DIRECTORY} にPDFファイルが見つかりませんでした。")
else:
process_pdfs(PDF_PATHS, API_KEY)
完全なファイルは GitHub にアップロードされており、スターを歓迎します:
参考資料#
- 完璧に PDF を翻訳する第一歩 - Mistral OCR 初歩的使用ガイド https://zhuanlan.zhihu.com/p/28801320889
- 【実測 Mistral OCR :世界最高の文書理解モデル?】 https://www.bilibili.com/video/BV1Bw92YiEEH
- https://github.com/nicekate/mistral-ocr
- 前者に基づいてバッチ処理機能を追加:https://github.com/YZDame/mistral-ocr