Excel で作った表で誤字を一括修正 (Google Colab)

目次
  1. 最初に
  2. 手順
  3. 1. 誤字修正ルールをエクセルで作成
  4. 修正ルールファイル (Excel) の例
  5. 2. Colab でコードを実行
  6. Colab で実行する .ipynb コード
  7. 自分のローカルPCでPythonで実行する場合
  8. 準備
  9. 実行手順
  10. まとめ
  11. おまけ

この記事およびコードは Gemini 1.5 Pro を使用して作成しています。

音声認識で議事録作成は楽になったけど、誤字の修正が面倒くさい… 特に、人名や専門用語などを毎回修正するのは本当に大変ですよね。

そこで今回は、Google Colaboratory (Colab) と Excel を使って、この面倒な作業を自動化する方法を紹介します。Google Colaboratory(Colab)は、ブラウザ上でコードを書いて実行できる、機械学習の学習やデータ分析に便利な無料のクラウドサービスです。環境構築が不要で、誰でも簡単にPythonを始められます。難しい設定は一切不要、ブラウザ上でコードを貼り付けるだけでOKです。

最初に

このタスクをこなしてくれるGPTを作成しました。無料版でもデータ分析が可能になったので、回数制限に気をつけながら使用できると思います。「何から始めたらいい?」から指示に従って進めてください。

Excelから一括で文字置換をやってくれるGPTを作成しました。「何から始めたらいい?」から指示に従って進めてください。定例会議は、文字起こしのたびに同じ単語を繰り返し間違えることがあります。置換ルールを書いた .xlsx を管理しておけば、繰り返し一括置換が可能です。https://t.co/K8aMRN7uKt

— Shoei (@shoei05) May 27, 2024

https://chatgpt.com/g/g-oBq9SnKDY-replace-text

手順

  1. 修正ルールを Excel で作成: 誤認識しやすい単語と正しい表記を Excel ファイルにリストアップします。
  2. Colab でコードを実行: 以下のコードをコピー&ペーストして実行!
  3. ファイルをアップロード: Excelファイルと修正したいテキストファイルをアップロードします。
  4. 修正完了!: Colab が自動で修正、ダウンロードできます。

1. 誤字修正ルールをエクセルで作成

A列に修正して欲しい文字列、B列に正しい表記を Excel ファイルにリストアップします。.xlsxファイルとして、PCの任意の場所に保存してください。

修正ルールファイル (Excel) の例

A列B列
難因性内因性
神奇的心気的
〜〜(修正して欲しい文字列)〜〜(正しい文字列)

作成が完了したら任意の名前、任意の場所で、.xlsxで保存してください。

2. Colab でコードを実行

以下のGoogle Colabのコピーをご自身のDriveに保存してください。

GoogleColabについてもっと知りたい方は、東京大学 数理・情報教育研究センターが公開している「Pythonプログラミング入門」[1]東京大学 数理・情報教育研究センター. Python プログラミング入門. https://utokyo-ipp.github.io/ をご覧ください。

https://colab.research.google.com/drive/1PHlm5I7RKGSgA07_FKkPMpXAqzSbAwog?usp=sharing

コピーが完了したら、左のボタンを押してコードを実行してください。

実行後まもなく下に①置換ルールのエクセルファイル、②置換したいテキストファイルをアップロードするボタンがでてくるので、ファイルをアップロードしてください。

ファイル形式が違うと、再アップロードするように説明がでてきます。

置換が完了したら自動的にダウンロードが始まります。

Colab で実行する .ipynb コード

import openpyxl
from google.colab import files
import shutil
import os
import glob

# --- フォルダ作成 ---
os.makedirs('input', exist_ok=True)
os.makedirs('output', exist_ok=True)
os.makedirs('replace_rule', exist_ok=True)
# ----------------------

# --- 置換ルールファイルのアップロード ---
while True:
  print("置換ルールを書いたエクセルファイル(.xlsx)をアップロードしてください")
  uploaded = files.upload()
  for filename in uploaded.keys():
    if not filename.endswith(".xlsx"):
      print("ファイルの拡張子が違うようです。もう一度ファイルをアップロードしてください。")
      break
  else:
    shutil.move(filename, f"/content/replace_rule/{filename}")
    break
# ----------------------

# --- 置換対象ファイルのアップロード ---
while True:
  print("置換したいテキストファイル(.txt, .srt)をアップロードしてください")
  uploaded = files.upload()
  for filename in uploaded.keys():
    if not filename.endswith((".txt", ".srt")):
      print("ファイルの拡張子が違うようです。もう一度ファイルをアップロードしてください。")
      break
  else:
    shutil.move(filename, f"/content/input/{filename}")
    break
# ----------------------

# --- 設定 ---
excel_path = glob.glob("replace_rule/*.xlsx")[0] # replace_rule ディレクトリ内のExcelファイルを指定
input_folder = 'input'                 # 修正したいファイルがあるフォルダ名
output_folder = 'output'                # 修正後のファイルを保存するフォルダ名
# ----------------------

# Excelファイルを読み込み、置換ルールを辞書に格納
wb = openpyxl.load_workbook(excel_path)
sheet = wb.active
replace_dict = {}
for row in sheet.iter_rows(min_row=2, values_only=True):
    if row[0] is not None and row[1] is not None:  # セルの値がNoneでないことを確認
        replace_dict[str(row[0])] = str(row[1])

# テキストファイルと字幕ファイルを一括処理
for file_path in glob.glob(os.path.join(input_folder, '*.txt')) + glob.glob(os.path.join(input_folder, '*.srt')):
    with open(file_path, 'r', encoding='utf-8') as f:
        text = f.read()

    # 置換ルールに基づいてテキストを修正
    for key, value in replace_dict.items():
        text = text.replace(key, value)

    # 修正後のテキストをファイルに保存
    output_file_path = os.path.join(output_folder, os.path.basename(file_path))
    with open(output_file_path, 'w', encoding='utf-8') as f:
        f.write(text)

    # --- ファイル個別ダウンロード ---
    files.download(output_file_path)
    # ----------------------

print("置換が完了しました!")Code language: PHP (php)

自分のローカルPCでPythonで実行する場合

準備

1. Pythonをインストール

まだインストールしていない場合は、Python公式ウェブサイトからダウンロードしてインストールしてください。

コマンドプロンプト/ターミナルを開いて、

  • Windows: Windowsキーを押して「cmd」と入力し、Enterキーを押します。
  • Mac: Spotlight検索 (虫眼鏡アイコン) をクリックし、「ターミナル」と入力してEnterキーを押します。
python -V

と入力して、

Python 3.12.3Code language: CSS (css)

などと表示されていればPythonは既にインストールされています。

2. 必要なライブラリをインストール

以下のコマンドを実行して、必要なライブラリをインストールします。

   pip install openpyxl
  • 同じディレクトリに置換ルールの.xlsxを格納する「replace_rule」フォルダと、置換したいテキストデータを格納する「input」フォルダを作成して、それぞれデータを格納してください
  • 以下のフォルダ構成を作成します。
任意のフォルダ
   ├── replace_text.py
   ├── replace_rule
   │   └── replace_rules.xlsx  # 置換ルールを定義したExcelファイル(名前は任意)
   ├── input
   │  └── (修正したい.txtファイルと.srtファイルを置く) 
   ├── output (自動で生成)
   │  └── (修正後の.txtファイルと.srtファイルが格納される) 
   └── done (自動で生成)
       └── (元ファイルは処理後にこちらに移動) Code language: CSS (css)

以下をコピーしてreplace_text.pyという名前で保存してください。

import openpyxl
import os
import glob
import shutil

# --- 設定 ---
excel_folder = 'replace_rule'  # 置換ルールを定義したExcelファイルがあるフォルダ名
input_folder = 'input'         # 修正したいファイルがあるフォルダ名
output_folder = 'output'        # 修正後のファイルを保存するフォルダ名
done_folder = 'done'           # 処理済みのファイルを移動するフォルダ名
# ----------------------

# Excelファイルのパスを取得
excel_files = glob.glob(os.path.join(excel_folder, '*.xlsx'))
if not excel_files:
    print("エラー: replace_rule フォルダに .xlsx ファイルが見つかりません。")
    exit()
excel_path = excel_files[0]

# Excelファイルを読み込み、置換ルールを辞書に格納
wb = openpyxl.load_workbook(excel_path)
sheet = wb.active
replace_dict = {}
for row in sheet.iter_rows(min_row=2, values_only=True):
    if row[0] is not None and row[1] is not None:
        replace_dict[str(row[0])] = str(row[1])

# 出力フォルダと処理済みフォルダが存在しない場合は作成
os.makedirs(output_folder, exist_ok=True)
os.makedirs(done_folder, exist_ok=True)

# テキストファイルと字幕ファイルを一括処理
for file_path in glob.glob(os.path.join(input_folder, '*.txt')) + glob.glob(os.path.join(input_folder, '*.srt')):
    with open(file_path, 'r', encoding='utf-8') as f:
        text = f.read()

    # 置換ルールに基づいてテキストを修正
    for key, value in replace_dict.items():
        text = text.replace(key, value)

    # 修正後のテキストをファイルに保存
    output_file_path = os.path.join(output_folder, os.path.basename(file_path))
    with open(output_file_path, 'w', encoding='utf-8') as f:
        f.write(text)

    # 処理後のファイルを done フォルダに移動
    shutil.move(file_path, os.path.join(done_folder, os.path.basename(file_path)))

print("置換が完了しました!")Code language: PHP (php)

実行手順

1. コマンドプロンプト/ターミナルを開く

  • Windows: Windowsキーを押して「cmd」と入力し、Enterキーを押します。
  • Mac: Spotlight検索 (虫眼鏡アイコン) をクリックし、「ターミナル」と入力してEnterキーを押します。

2. スクリプトのあるディレクトリに移動

コマンドプロンプト/ターミナルで、cd コマンドを使ってreplace_text.pyファイルがあるディレクトリに移動します。

   cd /path/to/your/directory  

(例: cd /Users/Documents/任意のディレクトリ)

Windowsは右クリック -> 情報でディレクトリの場所が表示されると思います。

Macも右クリックしてメニューを出した状態で「option」ボタンを押すと、「コピー」のところが「…のパス名をコピー」となりますので、これでパス名を取得することが可能です。

もしくはMacであれば、「任意のディレクトリ」を右クリック > サービス > フォルダに新規ターミナルで、パスを指定したうえでターミナルを開くことができます。この場合は上述の

cd /path/to/your/directory

は不要です。

3. スクリプトを実行: 以下のコマンドを実行します。

   python replace_text.pyCode language: CSS (css)

処理が完了すると、 outputフォルダに修正後のファイルが作成されます。doneフォルダが自動で生成され、元ファイルはこちらに移動されます。

まとめ

Colab と Excel を使えば、簡単に議事録や字幕ファイルの誤字修正を自動化できます。”議事ロガー”の皆さん、この方法を試して、議事録作成をもっと楽に、そして正確にしてみてください。

おまけ

2024年5月25日現在、個人的なAI利用頻度としてGemini 1.5 Pro/Flash > GPT-4o > Claude-3 という感じで使っています。Google AI Studio に無料枠があり、大量コンテクストが扱えるのがとても大きいです。長文要約タスクに関してはClaude-3 Opus が一つ飛び抜けている印象があります。コード生成については Gemini 1.5 Pro/Flash とGPT-4oを併用して使っています。

実感としても同様に感じます
– 全てのタスクで、GPT-4o ≧ GPT-4 Turbo
– 推論タスクや一般タスクは、GPT-4o > Claude3 Opus
– 翻訳や要約などのタスクは、Claude3 Opus > GPT-4o https://t.co/gsg3KaulPZ

— Shoei (@shoei05) May 19, 2024

私も最近の開発環境はGPT-4oとGemini 1.5 Pro で同じように使っている。小さい箇所の修正であれば、Cursor x Gemini API も重宝してます。
"1. コンテキストは低く保ち、こまめに新しい会話を行う
2. コードレビューの際は、別の AI が書いたと伝える
3. 常に2つの AI を使う" https://t.co/GMV2VtP5ZB

— Shoei (@shoei05) May 25, 2024

References[+]

References
↑1 東京大学 数理・情報教育研究センター. Python プログラミング入門. https://utokyo-ipp.github.io/
この記事は旧サイト(UMIN)から移行したものです。内容は記載の公開・更新時点のものです。