ST_FUNC開発日記

建築構造設計Excelアドイン開発の記録

htmlのタイトルを見出しにする

現在ドキュメントのhtml作成にmarkdownからhtmlの変換をかけているが、titleをファイル名にしていく。 しかしtitleがindexとかだと味気ないので、最初の見出しをタイトルにしてみえる。

まず、楽しようと思ってchatGPTに聞いてみる。

PythonMarkdown形式のテキストから最初の見出しを取得する方法を示します。これにはmarkdownパッケージと正規表現を使用します。

まず、markdownパッケージをインストールします。

pip install markdown

次に、次のPythonコードを使用して最初の見出しを取得できます。

import markdown
import re

def extract_first_heading(markdown_text):
    # MarkdownをHTMLに変換
    html_text = markdown.markdown(markdown_text)

    # HTMLから最初の見出しを抽出
    match = re.search(r'<h(\d)>(.*?)</h\1>', html_text)
    if match:
        heading_level = match.group(1)
        heading_text = match.group(2)
        return f"Level {heading_level}: {heading_text}"
    else:
        return "No heading found"

# テスト用のMarkdownテキスト
markdown_text = """
# 最初の見出し

これはテストです。
"""

# 最初の見出しを取得
first_heading = extract_first_heading(markdown_text)
print(first_heading)

このコードは、与えられたMarkdownテキストから最初の見出しを抽出します。見出しはHTMLタグ <h1>, <h2>, <h3> などに変換されるため、正規表現を使用してHTMLから見出しを抽出しています。

今回はもともとhtmlに変換しているけど、なんでmarkdownから直接拾ってこないんだろう?

Markdownのヘッダー構造は、#で始まる行で表されますが、これを正規表現で抽出することも可能です。しかし、マークダウンのヘッダーは、さまざまな形式で記述されることができます。たとえば、ヘッダーの前に空白文字があるかどうか、#の後に空白文字があるかどうかなどが異なります。そのため、正規表現パターンを作成する必要があります。しかし、MarkdownからHTMLに変換することで、統一されたHTML構造を取得することができます。

HTMLの場合、<h1><h2><h3>などのヘッダータグは、明確に定義されており、パースが容易です。そのため、HTMLに変換してからヘッダーを抽出することで、パースの一貫性を確保しやすくなります。

ただし、Markdownテキストが信頼できる形式で提供される場合や、パフォーマンス上の理由からHTML変換を避けたい場合は、直接Markdownテキストからヘッダーを抽出する方法を選択することも可能です。

そんなもんか。

といっても今回はそんな複雑なmarkdownを作るつもりはないので、chartGPTが提案してくれたところ悪いけど、markdownのから直接取得してしまおう。

ということで、適当に自分でコードを書いてみる。

    # タイトルの取得
    title: str = None
    for line in md_text.splitlines():
        if line[0] == "#":
            title = line.replace("#", "").strip()
            break
    if title is None:
        title = os.path.splitext(os.path.basename(input_path))[0]

見出しがなかった時の対策にファイル名を取得する部分は残しておく。

これでタイトルがそれっぽくなった。

md_to_html.pyでhtmlのtitleを最初の見出しにするように変更 · st-func/st_func_docs@601abae · GitHub

st-func.main.jp