PythonがWord文書のMarkdown変換を実現した例


SaaSサービスの流行に伴い、各プラットフォームでドキュメントを作成し、表を作成して共有することを選ぶ人が増えています。
同時に、Markdownの文法の破れた輪に従って、多くのプラットフォームはこのような簡潔な表記言語をサポートすることを始めて、プラットフォームの上でユーザーのドキュメントの様式の統一性を保証することができます。
しかし、いくつかの場面では、やはり地元のOfficeソフトに多くの文書が書かれています。あるいは歴史は多くのローカル文書を残しています。
私たちが大平台にアップロードしたいなら、直接コピーして貼り付けます。大体の確率で文書の内容構造と様式が失われます。ここではMarkdown文法に変換する必要があります。
多くのデスクトップソフト(例えばTypeora)はWordファイルを導入する機能を提供しています。このような機能は一般的にPandocというソフトウェアで拡張して実現されます。
Pandocは、複数のドキュメント形式を様々な一般的なドキュメント形式に変換することができます。具体的な文書フォーマット間の変換は、次の図のようになります。

Pandocはスイスの軍刀の普通の存在で、比較的に良い処理の各種類のドキュメントのフォーマットの転換ができますが、もし私達は自分でプログラムを書く必要があるならば、Pandocを呼び出して、追加のインストールのPandocが必要で、しかもカスタムにも不便です。
幸い、Pythonには多くの第三者モジュールがこのような文書フォーマットの変換機能を提供しています。今日は頻繁に使われているWord文書からMarkdown文書への移行を実現します。
変換ロジック
Word文書からMarkdown文書への変換は、全体として2段階に分けて行われます。
  • 第一歩は、Word文書をHTML文書に変換することである。
  • 第二ステップは、HTML文書をMarkdown文書に変換する;
  • 依存モジュール
    この機能を実現するには、Pythonの2つの第三者モジュールを借りる必要があります。
  • mammoth
  • markdownify
  • mammothはWord文書をHTMLに変換するためのモジュールであり、Python、JavaScript、Java、Netなどのプラットフォームでの使用をサポートしています。markdownifyはHTMLをMarkdownドキュメントに変換するモジュールです。
    Word画像の取り扱い
    Word文書には多くの画像が存在することは避けられないので、変換後のドキュメントで画像を正確に表示するためには、Word文書内の画像をカスタマイズする必要があります。デフォルトでは、mammothは写真をbase 64符号化文字列に変換します。これは追加のローカル画像ファイルを生成する必要はないですが、文書の体積を大きくします。だから私たちは写真をローカル画像として保存することを選択しました。
    
    #   Word      
    def convert_img(image):
      with image.open() as image_bytes:
        file_suffix = image.content_type.split("/")[1]
        path_file = "./img/{}.{}".format(str(time.time()),file_suffix)
        with open(path_file, 'wb') as f:
          f.write(image_bytes.read())
    
      return {"src":path_file}
    正の変換
    ここでは州の先生が昔書いた「Python爬虫類の実戦と機械学習応用」(この本の仲間が必要であれば、WeChatで個人的に話してもいいです)という本のWord文書を使って実証しています。

    コードは以下の通りです。
    
    #   Word  
    with open(r"F:\   \Python           .docx" ,"rb") as docx_file:
      #   Word   HTML
      result = mammoth.convert_to_html(docx_file,convert_image=mammoth.images.img_element(convert_img))
      #   HTML  
      html = result.value
      #   HTML Markdown
      md = markdownify(html,heading_style="ATX")
      print(md)
      with open("./docx_to_html.html",'w',encoding='utf-8') as html_file,open("./docx_to_md.md","w",encoding='utf-8') as md_file:
        html_file.write(html)
        md_file.write(md)
      messages = result.messages
    プログラムを実行して、最終的に2つのファイルを生成します。
  • docx_to_httml.
  • docx_to_md.md
  • そのうち、docx_to_html.はWord文書をHTMLに変換した後の文書です。

    docx_to_md.mdはHTMLがMarkdownに変換された後の文書です。

    最後に保存された画像:

    どうですか?簡単な二三十行コードでWordからMarkdownまでのドキュメントの変換ができます。簡単ですか?
    この機能は文書として導入された文書に統合されますので、引き続きご注意ください。
      著作権所有:州さんのブログ
      住所:https://zmister.com/archives/1601.html
    以上はPythonがWord文書のMarkdown変換を実現した例の詳細です。python Word文書の変換に関する詳細は他の関連記事に注目してください。