困っていたこと
ClaudeやChatGPTに顧客名簿を渡して「重複をまとめて」と頼むと、だいたいうまくいきます。ただ、こういうことが起きます。
- 同じ名簿でも、実行するたびに直し方が少しずつ違う
- 「さくら商事」と「さくら商会」を同じ会社としてまとめてしまう
- 「R6.3.15」を何年として読んだのか、あとから確かめられない
業務で使うなら、同じ入力には同じ答えを返してほしいし、なぜ同じと判断したかも知りたいところです。
作ったもの
nexus-ja-data は、AIエージェントから呼べる日本語ビジネスデータ用のMCPサーバーです。
| 道具 | できること |
|---|---|
ja_normalize_value |
会社名・氏名・フリガナ・電話・郵便番号・メール・住所・日付を、種類に合わせてそろえる |
ja_same_company |
2つの会社名が同じ会社かを判定((株)/㈱/株式会社/半角カナの違いを吸収) |
ja_detect_column_types |
表の列が何の項目かを推定 |
ja_clean_and_dedupe_records |
名簿を正規化して重複をまとめる。似ている別会社はまとめずに要確認として返す |
特徴:
- Python標準ライブラリだけで動きます(
pip install不要) - 外部通信をしません。名簿がパソコンの外に出ません
- MITライセンス
使い方(Claude Desktop)
リポジトリを置いて、claude_desktop_config.json に追加します。
{
"mcpServers": {
"nexus-ja-data": {
"command": "python",
"args": ["C:\\path\\to\\nexus-ja-data\\run_server.py"]
}
}
}
あとは「この名簿の重複をnexus-ja-dataでまとめて」と頼むだけです。
例
ja_same_company("(株)さくら印刷", "株式会社 さくら印刷")
→ {"same": true, "a_normalized": "株式会社さくら印刷", "similarity": 1.0}
似ているけれど違う会社は、まとめずに返します。
ja_same_company("さくら商事", "さくら商会")
→ {"same": false, ...}
テスト
python -m unittest discover -s tests で11件のテストが動きます。正規化の期待値、名寄せ、MCPの通し会話(初期化→一覧→呼び出し→エラー処理)、壊れた入力でも止まらないこと、外部通信のコードがないことを確認しています。
画面で使いたい人向け
AIを通さずに、Excel・CSVを画面で名寄せしたい人向けに、同じルールのデスクトップ版「名寄せ赤ペン」も作りました(有料)。
https://nexus-tools.booth.pm/items/9051166