今回から、よく使われる 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
関数を追加しました。 __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