【Python×Excel】窓付き封筒の宛名印刷を自動化してみた―住所データを2行に分割する実装方法(概要)
返金業務で利用する窓付き封筒の宛名印刷をPythonで自動化してみました。Excelの住所データを2行に分割し、要確認フラグを付与するまでの実装の考え方を紹介します。(経理業務改善)
はじめに
前回の記事では、
「住所を2行に分けるだけ」
と思っていた宛名印刷が、想像以上に難しかったことを紹介しました。
今回は、その続きとして、
実際にPythonでどのように実装したのか
について紹介したいと思います。
なお、今回紹介するのは、
「100%自動化」
ではなく、
「95%を自動化し、残りだけ人間が確認する」
という考え方を前提にした実装です。
今回作りたかったもの
今回の目的は、
返金リストに登録された住所を、
1
東京都千代田区千代田5-2-3スカイビル402号室
から、
1
2
3
4
5
住所1:
東京都千代田区千代田5-2-3
住所2:
スカイビル402号室
のように分割し、
宛名印刷用のExcelファイルを作成することでした。
出力イメージは以下のような形です。
| 顧客氏名 | 郵便番号 | 住所1 | 住所2 | 要確認 |
|---|---|---|---|---|
| 山田太郎 | 1000001 | 東京都千代田区千代田5-2-3 | スカイビル402号室 | |
| 鈴木一郎 | 0600001 | 北海道札幌市中央区北1条西2丁目5 | 矢代寮 | |
| ○○○○ | ○○○○ | 長すぎる住所… | 要確認 |
利用したライブラリ
今回使用したライブラリは2つだけです。
pandas
Excelファイルの読み込みに使用しました。
1
import pandas as pd
openpyxl
加工後のExcelファイルを書き出すために利用しました。
1
from openpyxl import Workbook
どちらもPythonの定番ライブラリであり、
業務改善でも利用されることが多いライブラリです。
まずは住所を正規化する
住所データには、
- 全角スペース
- 半角スペース
- 不要な空白
などが混在していました。
そのため、最初に住所を整形します。
1
2
3
4
5
6
7
8
9
def normalize_address(address):
address = str(address)
address = address.replace(" ", " ")
address = re.sub(r"\s+", " ", address)
return address.strip()
建物名のキーワードを定義する
建物名には、
- マンション
- ハイツ
- ビル
- タワー
- 寮
などが存在します。
そこで、よく出てくるキーワードをリスト化しました。
1
2
3
4
5
6
7
8
9
BUILDING_WORDS = [
"マンション",
"ハイツ",
"ビル",
"タワー",
"寮",
"コーポ",
"レジデンス"
]
「番地+建物名」を優先して判定する
例えば、
1
福岡市博多区博多駅東2丁目5番33号ハイツ博多103
であれば、
1
2
福岡市博多区博多駅東2丁目5番33号
ハイツ博多103
のように分けたいところです。
そのため、
「数字-数字-数字」や「○号」の後ろに日本語が続く場合は建物名とみなす
というルールを採用しました。
それでも判定できない住所は存在する
実際には、
1
佐賀県佐賀市川副町大字犬井道9476-187
のような、
建物名を持たない住所も存在しました。
また、
1
北海道札幌市中央区北1条西2丁目5矢代寮
のような特殊な住所もありました。
こうした住所は、
無理に自動判定しない
という方針を採用しました。
「要確認フラグ」を付与する
最終的に重要だったのは、
どの住所を人間が確認するか
でした。
例えば、
- 住所1が長すぎる
- 建物名が短すぎる
- 判定が怪しい
といったケースでは、
1
要確認
というフラグを付けるようにしました。
実際に作ってみて感じたこと
今回のプログラムは、
決して完璧なものではありません。
実際に作りながら、
何度もロジックを修正することになりました。
しかし、
「100%正しく処理する」
ことよりも、
「人間が確認する件数を減らす」
ことを目的にすると、
現実的な運用ができることがわかりました。
次回予告
今回の記事では実装の考え方を紹介しました。
次回は、
実際に作成したPythonコード全文
と、
- pandasによるExcel読込
- openpyxlによる出力
- エラーログ
- 要確認フラグ
なども含めて、より詳しく紹介したいと思います。
おわりに
業務改善というと、
「完全自動化」
を目指したくなります。
しかし実際には、
「どこを人間に残すか」
を考えることの方が重要なのかもしれません。
今回の記事が、Pythonによる業務改善を検討している方の参考になれば幸いです。
