1. 導入

クレーム文に記載された電話番号やメールアドレスを手作業で行うとミスが発生しやすく、業務効率の低下や顧客対応の遅延といったリスクを伴います。そこで、本記事ではPythonを用いて、クレーム文中の連絡先(電話番号・メールアドレス)を自動で抽出し、担当部署への転送用リストを自動生成する方法を解説します。

背景説明

クレーム文には、多様なフォーマットで連絡先が記載されていることが多く、手動での情報抽出は時間と労力を要します。また、ヒューマンエラーによって重要な情報が見落とされるリスクも存在します。

課題提示

担当部署への迅速な対応を実現するため、クレーム文から連絡先を正確に抽出し、自動的に転送用リストを生成する仕組みが求められています。

記事の目的

本記事では、Pythonを活用してクレーム文中から電話番号やメールアドレスを抽出する基本手法から、実際のコード例を用いた実装手順、さらに自動生成したリストを活用した転送システムとの連携方法までを詳細に解説します。

自動化の効果

  • 正確性: 正規表現を用いることで、一定のパターンに基づいた正確な抽出が可能
  • 迅速な対応: リストを自動生成することで、即時に担当部署へ情報提供ができ、顧客対応がスピードアップする

3. Pythonでの連絡先抽出の基本

正規表現(Regex)の活用

Pythonの re モジュールを使用することで、電話番号やメールアドレスのパターンに基づいた抽出が可能になります。正規表現を用いれば、数字や記号の組み合わせを効率的に検索できます。

主要ライブラリ紹介

  • reモジュール: 正規表現パターンの定義とマッチングに利用
  • email-validator(任意): メールアドレスのバリデーションを行う外部ライブラリ

サンプルコード

以下は、基本的な連絡先抽出のサンプルコードです。

import re

# クレーム文のサンプル
text = """
お客様からのご意見:不具合が続いており、至急対応をお願い致します。
連絡先: 03-1234-5678、または support@example.com にご連絡ください。
"""

# 電話番号のパターン例(例:03-1234-5678, 090-1234-5678)
phone_pattern = r'\b\d{2,4}-\d{2,4}-\d{4}\b'
phones = re.findall(phone_pattern, text)

# メールアドレスのパターン例
email_pattern = r'[a-zA-Z0-9_.+-]+@[a-zA-Z0-9-]+\.[a-zA-Z0-9-.]+'
emails = re.findall(email_pattern, text)

print("抽出された電話番号:", phones)
print("抽出されたメールアドレス:", emails)

4. クレーム文から連絡先抽出の実装手順

入力データの準備

まず、クレーム文をテキストデータとして取得し、以下のように前処理を行います。
テキストの正規化: 全角・半角の統一、不要な改行や空白の除去
エンコードの確認: 文字化け防止のため、適切な文字コード(UTF-8など)を使用

電話番号抽出

複数のフォーマットに対応するため、以下のような正規表現パターンを設計します。

phone_pattern = r'\b(?:0\d{1,4}-\d{1,4}-\d{4})\b'
phones = re.findall(phone_pattern, text)

メールアドレス抽出

メールアドレスは一般的なパターンに従って抽出します。

email_pattern = r'[a-zA-Z0-9_.+-]+@[a-zA-Z0-9-]+\.[a-zA-Z0-9-.]+'
emails = re.findall(email_pattern, text)

上記のサンプルコードは基本的な抽出処理を示していますが、実際の運用では以下のような改善が必要です。
エラーチェック: 無効な電話番号やメールアドレスの除外
パフォーマンス: 大量データの処理を高速化するための工夫
拡張性: クレーム文に含まれる他のパターン(FAX番号、SNSアカウントなど)の抽出


5. 担当部署への転送用リスト自動生成

リスト生成の流れ

抽出した連絡先情報を、担当部署へ転送するためのリストに整形します。ここでは、CSVファイルへの出力例を紹介します。

import csv

# 抽出結果をリストにまとめる
contact_list = []
for phone in phones:
    contact_list.append({'type': '電話番号', 'contact': phone})
for email in emails:
    contact_list.append({'type': 'メールアドレス', 'contact': email})

# CSVファイルに書き出す
csv_file = '転送用リスト.csv'
with open(csv_file, mode='w', newline='', encoding='utf-8') as file:
    writer = csv.DictWriter(file, fieldnames=['type', 'contact'])
    writer.writeheader()
    writer.writerows(contact_list)

print(f"転送用リストを {csv_file} に保存しました。")

自動転送システムとの連携

転送用リストが生成されたら、メール送信システムやチャットボットと連携することで、担当部署への自動通知が可能になります。例えば、Pythonの smtplib モジュールを使ったメール送信処理や、Slack APIとの統合などが考えられます。

エラーハンドリング

  • 無効な連絡先の除外: バリデーションライブラリ(例:email-validator)でメールアドレスの正当性を確認
  • ログ管理: エラー発生時のログをファイルに記録し、後から原因分析ができるようにする

6. 実装時の注意点と拡張性

入力データの多様性

文字コード: 入力されたテキストデータのエンコードを統一することが重要です。
フォーマットのばらつき: クレーム文には、スペースや記号が不規則に使われるため、前処理で正規化を行い、抽出精度を高める必要があります。

セキュリティとプライバシー

個人情報の取り扱い: 抽出された電話番号やメールアドレスは個人情報となるため、適切なセキュリティ対策(暗号化、アクセス制限など)を講じる必要があります。
データ保存: データベースに保存する際も、プライバシーに配慮した管理を行いましょう。格納フォルダの権限制御は必須です。


7. まとめと今後の展望

記事の振り返り

本記事では、クレーム文から連絡先を自動抽出するための基本的な手法から、実際のPythonコードによる実装例、さらに抽出結果を担当部署への転送リストとして利用する方法まで、段階的に解説しました。

実際の運用環境に合わせて、正規表現パターンやエラーハンドリングのロジックを調整してください。

豆知識

正規表現の起源

正規表現(Regex)は、1960年代に数学者のスティーヴン・クローネッカーらによって形式言語の理論から生まれまたそうです。