投稿

【Python×Excel】窓付き封筒の宛名印刷を自動化してみた―住所データを2行に分割する実装方法(概要)

返金業務で利用する窓付き封筒の宛名印刷を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による業務改善を検討している方の参考になれば幸いです。

この投稿は投稿者によって CC BY 4.0 の下でライセンスされています。