|14| IMEを使って住所を都道府県、市町村、町域名に分ける

|14| IMEを使って住所を都道府県、市町村、町域名に分ける

by Guantare.com

郵便番号を利用して住所を入力

住所の入力は面倒です。できれば、郵便番号を利用して住所を入力したいものです。

住所フィールドの分け方

住所は都道府県、市町村、町域番地、建物名に分けたいと思います。地域によっては県名は不要で市町村が分かればいいことも多いからです。郵便物にどこまで住所を記載するかは判断が難しいのですが、長くなるので都道府県名は省略したいこともあると思います。

郵便番号簿では政令指定都市の場合「〇〇市〇〇区、町域」と区切られていますが、ここでは「〇〇市、〇〇区町域」とします。どちらが便利なのかは住所のリストの使い方、表記方法によって異なりますので、それなりに工夫が必要でしょう。

東京23区は政令指定都市の「区」とは異なり、市町村と同じ考え方なので市町村のフィールドに格納します。

IMEでの変換

郵便番号を日本語モードの全角で入力するとIMEが住所に変換してくれます。

番号付き住所が変換候補に出たら確定します。

IMEで住所だけに変換される場合は、面倒ですが番号を入力した後、番号を確定してから、もう一度番号を入力して住所に変換し番号付きの住所にします。

スクリプトで一連の住所を都道府県、市町村、町域名に分割していきます。

パソコンの計算ではいくつかのテキストを一つのテキストにまとめることは簡単ですが、一つのテキストを意味を持ついくつかのテキストに分割することは難易度が高いです。CSV形式のように区切り文字が規定されていればいいのですが、変換された住所にはそれがありません。〇〇市の場合は「市」の文字を探せばいいのですが、四日市市のように2番目の「市」だったり、〇〇郡〇〇町の場合は郡山市や町田市という名称もあります。何より「町」という文字は町域名で沢山使われています。

大雑把な考え方は

●郵便番号
住所フィールドを分割する前に郵便番号は番号として取得しておきます。
変換されたテキストの先頭が郵便番号で、「〒」マークがあればそれを削除します。
●都道府県
住所のテキストの中で「都、道、府、県」の文字位置から前を取得。
●市町村
住所のテキストから都道府県の文字列を除いた文字列の中で
市の場合
最初の「市」の文字位置から前を取得。
町村の場合
最初の「郡」と「町、村」の文字位置で「郡」が「町、村」の前にある時、「町、村」の文字位置から前を取得。
●町域名
住所のテキストから都道府県名、市町村名を除いた文字列。

都道府県名、市町村名、町域名を取得するスクリプトです。

都道府県名の取得

都道府県は簡単で3文字目か4文字目が都、道、府、県になっていれば、そこまでが都道府県名です。

市町村名の取得

東京23区は市町村と同じであり、政令指定都市の「区」とは異なる。
市町村名に「市、郡、町、村」が使われている名前。
東京都の諸島部には郡名がない。(東京都新島村など、多摩地域では郡名がある。)

このように文字位置で分割することができないものを例外として先に処理します。

東京23区
都道府県名が東京都で「東京都」の文字列を削除した住所の中で「区」が2〜4文字目にある文字列を取得する。これは「区」が2つ以上使われている区の名前はないからです。

東京都諸島部
御蔵島村、三宅島三宅村、小笠原村、新島村、神津島村、青ヶ島村、利島村、大島町、八丈島八丈町
の9町村です。
都道府県名が東京都で「東京都」の文字列を削除した住所の中で上記の町村名と合致する文字列を町村名として取得します。

「市、郡、町、村」の文字が名前に入る市町村
これは丹念に調べるしかありません。で、郵便番号簿を色々と細工して調べました。概ね正しいとは思っていますが、間違いがあるかもしれませんし、将来は変わる可能性があります。。

下のリストは東京都諸島部を含んでいます。

3文字
蒲郡市、郡上市、村山市、村上市、市原市、市川市、大村市、羽村市、新島村、大島町、利島村、小郡市、郡山市、田村市

4文字
廿日市市、四日市市、野々市市、御蔵島村、小笠原村、神津島村、青ヶ島村、東村山市

5文字
武蔵村山市、大和郡山市

6文字
柴田郡村田町、佐波郡玉村町、三宅島三宅村、八丈島八丈町、芳賀郡市貝町、吉野郡下市町、高市郡高取町、田村郡三春町、田村郡小野町、神崎郡市川町、赤穂郡上郡町、余市郡仁木町、余市郡余市町

7文字
西村山郡河北町、西村山郡西川町、西村山郡大江町、西村山郡朝日町、東村山郡山辺町、東村山郡中山町、高市郡明日香村、中新川郡上市町、余市郡赤井川村

8文字
北村山郡大石田町

9文字
西八代郡市川三郷町

Let  ( 
          [

        /*市町村以下の住所*/
            v市町村  =  Right  (  $住所  ;  Length  (  $住所  )  –  Length  (  ui01_実習管理::ui01_g_都道府県  )  )  ; 

        /*市町村名に市、郡、町、村がある名称、郡がない町村の照合用*/
            v3文字  =  Left  (  v市町村  ;  3  )  ;
            v4文字  =  Left  (  v市町村  ;  4  )  ;
            v5文字  =  Left  (  v市町村  ;  5  )  ;
            v6文字  =  Left  (  v市町村  ;  6  )  ;
            v7文字  =  Left  (  v市町村  ;  7  )  ;
            v8文字  =  Left  (  v市町村  ;  8  )  ;
            v9文字  =  Left  (  v市町村  ;  9  )  ; 

        /*区の文字位置*/
            v東京区  =  Position  (  v市町村  ;  “区”  ;  1  ;  1  )  ;

        /*最初の市、郡、町、村の位置*/
            v市  =  If  (  Position  (  v市町村  ;  “市”  ;  1  ;  1  )  ≥  1  ;  Position  (  v市町村  ;  “市”  ;  1  ;  1  )  ;  1000  )  ;
            v郡  =  If  (  Position  (  v市町村  ;  “郡”  ;  1  ;  1  )  ≥  1  ;  Position  (  v市町村  ;  “郡”  ;  1  ;  1  )  ;  1000  )  ;
            v町  =  If  (  Position  (  v市町村  ;  “町”  ;  1  ;  1  )  ≥  1  ;  Position  (  v市町村  ;  “町”  ;  1  ;  1  )  ;  1000  )  ;
            v村  =  If  (  Position  (  v市町村  ;  “村”  ;  1  ;  1  )  ≥  1  ;  Position  (  v市町村  ;  “村”  ;  1  ;  1  )  ;  1000  )
            ]  ; 

                Case  (

                        /*市町村名に市、郡、町、村がある市町村、郡がない町村の照合、取得*/
                            v3文字  =  “蒲郡市”  or 
                            v3文字  =  “郡上市”  or 
                            v3文字  =  “村山市”  or 
                            v3文字  =  “村上市”  or 
                            v3文字  =  “市原市”  or 
                            v3文字  =  “市川市”  or 
                            v3文字  =  “大村市”  or 
                            v3文字  =  “羽村市”  or 
                            v3文字  =  “新島村”  or 
                            v3文字  =  “大島町”  or 
                            v3文字  =  “利島村”  or 
                            v3文字  =  “小郡市”  or 
                            v3文字  =  “郡山市”  or 
                            v3文字  =  “田村市”     
                                                                          ;  v3文字  ; 

                            v4文字  =  “廿日市市”  or
                            v4文字  =  “四日市市”  or
                            v4文字  =  “野々市市”  or
                            v4文字  =  “御蔵島村”  or
                            v4文字  =  “小笠原村”  or
                            v4文字  =  “神津島村”  or
                            v4文字  =  “青ヶ島村”  or
                            v4文字  =  “東村山市” 
                                                                          ;  v4文字  ;   

                            v5文字  =  “武蔵村山市”  or 
                            v5文字  =  “大和郡山市”
                                                                          ;  v5文字  ;   

                            v6文字  =  “柴田郡村田町”  or 
                            v6文字  =  “佐波郡玉村町”  or 
                            v6文字  =  “三宅島三宅村”  or 
                            v6文字  =  “八丈島八丈町”  or 
                            v6文字  =  “芳賀郡市貝町”  or 
                            v6文字  =  “吉野郡下市町”  or 
                            v6文字  =  “高市郡高取町”  or 
                            v6文字  =  “田村郡三春町”  or 
                            v6文字  =  “田村郡小野町”  or 
                            v6文字  =  “神崎郡市川町”  or 
                            v6文字  =  “赤穂郡上郡町”  or 
                            v6文字  =  “余市郡仁木町”  or 
                            v6文字  =  “余市郡余市町” 
                                                                          ;  v6文字  ;   
 
                            v7文字  =  “西村山郡河北町”  or 
                            v7文字  =  “西村山郡西川町”  or
                            v7文字  =  “西村山郡大江町”  or
                            v7文字  =  “西村山郡朝日町”  or
                            v7文字  =  “東村山郡山辺町”  or
                            v7文字  =  “東村山郡中山町”  or
                            v7文字  =  “高市郡明日香村”  or
                            v7文字  =  “中新川郡上市町”  or
                            v7文字  =  “余市郡赤井川村”
                                                                          ;  v7文字  ;   

                            v8文字  =  “北村山郡大石田町” 
                                                                          ;  v8文字  ;   
 
                            v9文字  =  “西八代郡市川三郷町” 
                                                                          ;  v9文字  ; 

                        /*東京都特別区の名称を取得*/
                            ui01_実習管理::ui01_g_都道府県  =  “東京都”  and  v東京区  ≥  1  and    v東京区  ≤  4 
                                                                          ;  Left  (  v市町村  ;  v東京区  )  ; 

                        /*上記以外の市町村名を取得*/
                            v市  ≥  2  and  v市  <  v郡  and  v市  <  v町  and  v市  <  v村 
                                                                          ;  Left  (  v市町村  ;  v市  )  ; 

                            v郡  ≥  2  and  v郡  <  v市  and  v郡  <  v町  and  v町  <  v村   
                                                                          ;  Left  (  v市町村  ;  v町  )  ; 

                            v郡  ≥  2  and  v郡  <  v市  and  v郡  <  v村  and  v村  <  v町 
                                                                          ;  Left  (  v市町村  ;  v村  )  ; 

     ””
            )   
          )

スクリプトの中で市町村名を取得する部分の計算式です。

IMEによる変換候補の違い

Windows10の標準IMEでは「東京都・・・」と住所だけか「000-0000」と番号だけになり番号付き住所は変換候補に現れません。番号がないのは困るので面倒ですが一度、番号だけに変換してから続けて同じ番号を入力して住所に変換します。

Mac標準の日本語入力ソースでは「〒000-0000東京都・・・」、「東京都・・・」、「000-0000」と番号付き住所、住所のみ、番号のみと変換候補が現れます。

他のIMEは使っていないのでよく分かりませんが、番号付きの住所にしておけば大丈夫です。

Macではハイフンがなくても7桁の数字であれば変換候補に住所が表示されますが、Windowsではハイフンが必要みたいです。また、Windowsでは大口事業所(大きな会社、役所など)の郵便番号では変換候補に表示されませんでした。

京都市の住所では「区」と「町名」の間に「通り名」があります。日本郵便の番号検索サイトで「602-8064」を検索すると

京都府京都市上京区一町目
(上長者町通堀川東入、
 東堀川通上長者町上る、
 東堀川通中立売通下る)

の3件が表示されます。

Windowsの変換候補には3件とも表示されますが、Macでは通り名がない「上京区一丁目」だけの1件しか表示されません。

京都市には同じ町名を持つ地域が多くあります。「松屋町」は上京区、中京区、下京区、伏見区の4区に、「若松町」は上京区、中京区、東山区、下京区の4区にあります。ただ、郵便番号はすべて異なっているようです。人が住所を聞いてそこを訪ねる場合は別にして、郵送では通り名がなくても配達されるのではと思います。

WindowsとMacの違いは郵便番号辞書の編集方針の違いなのでしょう。標準のIMEでなければ、また違った結果を出すのではないかと思います。

日本郵便のサイトでは町名の後ろに通り名が記載されていますが、Windowsでは通り名の後ろに町名がつくスタイルに変換されます。こちらの方が正しい表記法のようです。

●   ●   ●

郵便番号は明確なルールに基づいているわけではないので、扱いがむずしいですね。


エキスパンドルメタルの外装が現代的なエクステリア、外観に垂直なラインが全くない造形の公民館。青空に映えていました。

iPhone 11 Pro 4.20mm ISO32 1/1250 F1.8 +0.0EV P
heif
2019/12 Kodaira City