HTML技術文書校正プログラムの使用手順

【概要】

Claude AIを利用してHTML形式の技術文書を校正するPythonプログラムの使用手順.インストールから実行,結果の保存までの操作方法と,プログラムのソースコードを示す.

【目次】

使用手順

1. 準備: a. Python(3.12以上)がインストールされていることを確認してください. b. 必要なライブラリをインストールします: コマンドプロンプトまたはターミナルで次のコマンドを実行してください. ``` pip install -U --no-user anthropic python-dotenv ``` c. Anthropic APIキーを取得し,`.env`ファイルに保存します: プログラムと同じディレクトリに`.env`ファイルを作成し,以下の内容を記述してください. ``` ANTHROPIC_API_KEY=your_api_key_here ``` `your_api_key_here`を実際のAPIキーに置き換えてください. 2. プログラムの実行: a. コマンドプロンプトまたはターミナルでプログラムのディレクトリに移動します. b. 次のコマンドでプログラムを実行します: ``` python3 html_corrector.py ``` (ファイル名が異なる場合は,適切なファイル名に置き換えてください) 3. 入力と操作: a. HTMLファイル名の入力: - プログラムが「Enter the HTML file name:」と表示したら,校正したいHTMLファイルの名前(またはパス)を入力してください. - ファイルはUTF-8エンコーディングで保存されている必要があります. b. プロンプトの入力: - 「Enter the prompt for Claude AI (or press Enter to use default):」と表示されたら,カスタムプロンプトを入力するか,Enterキーを押してデフォルトのプロンプトを使用します. - デフォルトのプロンプトは技術文書の校正に適しています. 4. 結果の確認: a. プログラムは校正されたHTMLと確認結果を表示します. b. 元のHTMLと校正後のHTMLの差分も表示されます. 5. 結果の保存: - 「Do you want to save the corrected HTML? (y/n):」と表示されたら, - 'y'を入力して校正されたHTMLを保存するか, - 'n'を入力して保存せずに終了します. 6. 注意点: - HTMLの構造やタグは変更されません.校正はテキストコンテンツのみに適用されます. - APIの使用制限に注意してください. 7. エラー対応: - ファイルが見つからない場合やAPIキーが無効な場合は,適切なエラーメッセージが表示されます. - エラーメッセージに従って問題を解決し,再度プログラムを実行してください. このプログラムを使用することで,HTML形式の技術文書を校正し,品質を向上させることができます.テキストの正確性,明確さ,および技術的な質が向上し,HTMLの構造を維持したまま改善されたコンテンツを得ることができます.

プログラムのソースコード

import os
import anthropic
import difflib
from dotenv import load_dotenv
import sys

# Constants
CLAUDE_MODEL = "claude-sonnet-5"

# Load environment variables
load_dotenv()

# Check for API key
if not os.getenv("ANTHROPIC_API_KEY"):
    print("Error: ANTHROPIC_API_KEY is not set in the environment variables.", file=sys.stderr)
    sys.exit(1)

# Initialize the Anthropic client
client = anthropic.Anthropic(api_key=os.getenv("ANTHROPIC_API_KEY"))

def read_html_file(file_name):
    try:
        with open(file_name, 'r', encoding='utf-8') as file:
            return file.read()
    except FileNotFoundError:
        print(f"Error: File '{file_name}' not found.")
        return None
    except UnicodeDecodeError:
        print(f"Error: Unable to decode '{file_name}' as UTF-8.")
        return None

def write_html_file(file_name, content):
    try:
        with open(file_name, 'w', encoding='utf-8') as file:
            file.write(content)
        print(f"Corrected HTML has been saved to {file_name}")
    except Exception as e:
        print(f"Error occurred while saving file '{file_name}': {e}")

def get_claude_response(prompt, html_content):
    system_message = """
    あなたは優秀な文章校正者であり,優れた技術文章作成者アシスタントです.正確性を最重視し,落ち着いて作業を行います.HTMLドキュメント内のテキストコンテンツを校正し改善することに特化しています.

    【技術文書の説明方針】
    1. 内容:
       - 技術の知識,スキル,概念を正確かつ分かりやすく説明する.
       - 論理的な文章構成を心がけ,誤解を防ぐため明確で簡潔な説明を行う.

    2. 専門用語の扱い:
       - 記事内の主要な専門用語(3〜5個程度)を選定する.
       - 選定した専門用語が初出の際,括弧書きで簡潔な説明を加える.

    3. 客観性と根拠:
       - 主観的な意見や主張を述べる際は,以下に留意する:
         a) 客観的な根拠を明確に示す.
         b) 具体的な事例や実例を挙げて説明を補強する.
         c) 必要に応じて,異なる視点や対立意見について,括弧書きで簡潔に言及する.

    4. 正確性の確保:
       - 記述の正確性を最優先し,以下の対策を講じる:
         a) 不確実な情報や推測に基づく内容には,括弧書きで簡潔にその旨を明示する.

    5. 文体と表記:
       - 文体は「だ・である」調に統一する.
       - 句読点は「,」と「.」に統一し,読みやすさと一貫性を確保する.

    6. まとめ:
       - 説明の最後に,重要なポイントを40〜50文字以内で簡潔にまとめる.
       - まとめは「【まとめ】」で始め,読者の理解を促進し誤解を防ぐことを目的とする.

    【遵守事項】
    1. HTMLタグを増やしたり減らしたりしないでください.HTML構造とタグは一切変更しません.
    2. 日本語の句読点は「,」と「.」に統一してください.ただし,英語の「,」と「.」は変更しないでください.
    3. 各行の字下げ(インデント)を変更しないでください.
    4. テキストコンテンツの綴り,文法,句読点の修正,および明確さと一貫性の向上に焦点を当ててください.
    5. 変更を加える場合は,元のテキストの意味や意図を変えないよう注意してください.
    6. テキストが既に正確で明確な場合は,変更を加えないでください.

    【作業手順】
    1. 提供されたHTMLコンテンツを注意深く読み,技術文書としての質を評価します.
    2. 【技術文書の説明方針】に基づいて,テキストコンテンツを改善します.
    3. 【遵守事項】を厳守しながら,改善を行います.
    4. 改善したテキストを含むHTMLを出力します.
    5. 処理が完了したら,上記の【遵守事項】と【技術文書の説明方針】が守られているか必ず確認します.
    6. 確認結果と改善の概要を,校正されたHTMLの後に追記します.

    最後に,あなたの役割を再確認してください:
    - あなたは優秀な文章校正者であり,優れた技術文章作成者アシスタントです.
    - 正確性を最重視し,落ち着いて作業を行います.
    - HTMLドキュメント内のテキストコンテンツを校正し改善することに特化しています.
    - 【技術文書の説明方針】と【遵守事項】を厳守しながら,最高品質の成果物を提供します.
    """

    try:
        message = client.messages.create(
            model=CLAUDE_MODEL,
            max_tokens=4000,
            system=system_message,
            messages=[
                {"role": "user", "content": f"{prompt}\n\nHTML content:\n{html_content}"}
            ]
        )
        return "".join(block.text for block in message.content if block.type == "text")
    except Exception as e:
        print(f"Error occurred while getting response from Claude AI: {e}")
        return None

def show_diff(original, corrected):
    diff = difflib.unified_diff(
        original.splitlines(keepends=True),
        corrected.splitlines(keepends=True),
        fromfile='Original',
        tofile='Corrected',
    )
    print(''.join(diff))

def main():
    file_name = input("Enter the HTML file name: ")
    prompt = input("Enter the prompt for Claude AI (or press Enter to use default): ")
    if not prompt:
        prompt = "提供されたHTMLファイル内のテキストコンテンツを,技術文書として校正し改善してください.HTMLタグや構造は変更せず,テキストの正確性,明確さ,および技術的な質の向上に焦点を当ててください."

    original_html = read_html_file(file_name)
    if original_html is None:
        return

    corrected_html = get_claude_response(prompt, original_html)
    if corrected_html is None:
        return

    print("\nCorrected HTML and Confirmation:")
    print(corrected_html)

    print("\nDifferences between original and corrected HTML:")
    show_diff(original_html, corrected_html.split("確認結果と改善の概要:")[0])  # Only compare the HTML part

    user_choice = input("\nDo you want to save the corrected HTML? (y/n): ").lower()
    if user_choice == 'y':
        write_html_file(file_name, corrected_html.split("確認結果と改善の概要:")[0])  # Save only the HTML part
    else:
        print("Changes were not saved.")

if __name__ == "__main__":
    main()