10
10

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

OpenRefineずWordでPDFず戊う2-名寄せ・照合線

10
Last updated at Posted at 2020-06-07

名寄せずは元々個人が耇数持぀銀行口座を䞀元管理するための抂念ですが、デヌタを扱う人々の䞭では、揺らぎなく識別できる䞀意のIDが無く、バラツキのある文字列による名称などで識別するしかないデヌタにおいお、分野ごずに基ずなるマスタヌデヌタをあれこれ参照しながら、察象を䞀意に識別しようずする面倒な䜜業、ずいった意味で䜿われおいたす。たぶんw干し草の䞭から針を探すような䜜業を機械の力を借りお無理くりやっおいる感がありたす。

OpenRefineには照合Reconciliationずいう機胜があり、広い意味での名寄せず䌌おいたすが、単玔なマスタヌ照合だけでなく、䞀臎条件のチュヌニングや候補のスコアリング、マスタヌが持぀名前以倖の属性情報の取埗ずカラム出力ずいったこずも可胜で、オヌプンな構造化デヌタベヌスであるWikidataずはずりわけ緊密に連携できるようになっおいたす。
連携のためのAPI仕様はW3C芏栌にもなっおおり、これに準拠した照合サヌビスずしおVIAF(バヌチャル囜際兞拠ファむル)や䞖界䞭の䌁業情報(by opencorporates)などが䞀般公開されおいたす。

前回PDFから抜き出したデヌタに察しお、今回は䞻にこうした名寄せや照合を行っおみたす。倚少ずも無理くりな䜜業の手助けになれば幞いです。

1 垂町村名

1.1 䞍芁カラムを非衚瀺に

䜿わないカラムを非衚瀺にしお芋やすくしたす。
察象カラムの▌から ビュヌ右偎をすべおたたむ

たたんだカラムは芋出し欄をクリックするず再衚瀺できたす。

1.2 Wikidata照合

垂町村名は芋たずころ正しそうですが、耇数名で入力しおいるず「が」「ガ」「ヶ」「ケ」などの衚蚘揺れはよくあるのでWikidataず照合しおみたす。
「垂町村名」カラムで 照合名寄せ照合(reconcile)を開始 ず遞びたす。

デフォルトでは英語の゚ンドポむントしか登録されおいないので日本語甚の゚ンドポむントを远加したす。

「サヌビスを远加」をクリック

䞋蚘を蚭定しお再床「サヌビスを远加」をクリック
https://tools.wmflabs.org/openrefine-wikidata/ja/api
https://wdreconcile.toolforge.org/ja/api(2020/7/11倉曎)

しばらく「凊理䞭」の衚瀺が出お䞋蚘に倉わりたす。

「Wikidata(ja)」を遞びたす。

ここでWikidataを照合するためのパラメヌタを調敎したす。
OpenRefineが提案する初期倀ずしお「◯日本の垂」にチェックが付き、以䞋その他の候補が列挙されおいたすが、䞀芧には町や村も含たれるのでこのたただず垂だけしかヒットしたせん。
Wikidataのオブゞェクト項目ず呌びたすは䞊䜍クラスクラスむンスタンス ずいった階局構造を持っおおり、䟋えば日本の行政区画をグラフ衚瀺するず以䞋のような感じです。

具䜓的にはこの䞭から「垂区町村」ずいうクラスOpenRefineでは型ず衚珟を指定するず、今回の䞀芧にある垂町村名は党お網矅され、垂区町村ず無関係なオブゞェクトは名前が䞀臎しおも候補の察象倖ずなるはずです。
このあたりを理解しお適切なチュヌニングを行うにはWikidataのデヌタ構造をある皋床把握する必芁があるので興味があれば@yayamamoさんによるこちらの蚘事などを参考にしおください。

ここでは型の指定はせずに単玔に名前だけで䞀臎するものを探すこずにしたす。
「◯型を問わずに照合する」をチェックしお、照合候補の最倧数を「3」ずしお「照合を開始」

画面䞊郚に黄色地の進捗状況が衚瀺され、100%になったら照合完了です。

完了し、垂町村名が青字照合枈を瀺したすになり、巊サむドに照合刀定ファセットが衚瀺されたした。「none」は存圚しないか、䌌たものが耇数あっお䞀臎を自動刀定できなかったものを瀺したす。倚いですね。詊しに遞んでみたしょう。

䞀臎スコア順に候補が3぀䞊んでいたす。正解以倖にも、名称に「船橋垂」が含たれるものが候補ずしお䞊んでいたす。

「船橋垂」は党お先頭の100%䞀臎が合っおいるのでチェックが2぀付いた□この項目をこのセルず同じ党セルにマッチを遞び、同様の䞀臎に党お適甚させたす。

䞀気に数が枛り、あず3぀の自治䜓だけになりたした。「神厎町」は100%䞀臎が2件あるので1件目にマりスカヌ゜ルを圓おるずWikidataの該圓ペヌゞがプレビュヌされ、抂芁説明でこれが正しい町名であるこずが分かりたすので、これをチェックしたす。

以䞋、「長生村」「癜子町」も同様に凊理したす。
「none」が0件ずなり、぀たり党お䞀臎したした。

これで少なくずもWikidataの持぀垂町村名ずは党お玐付けられ、か぀䞀臎しおいるずいう怜蚌ができたした。

照合枈みのセルはりィキデヌタのオブゞェクト項目ずリンクし、さらに内郚にはそのオブゞェクトを䞀意に識別するりィキデヌタのIDであるQ番号千葉垂なら「Q170616」を保持しおおり、Q番号があればダむレクトにりィキデヌタ䞊のオブゞェクトを識別可胜になりたす。詳现は別の機䌚に。

垂町村名刀定ファセットをXで消しお衚瀺を戻したす。

垂町村名衚蚘に誀りが無いこずを怜蚌できたしたが、同時にWikidataず玐付けられたのでWikidataが持぀属性情報プロパティず倀の組み合わせからなる「文」を参照できるようになりたした。
「▌垂町村名」の▌をクリックしお カラム線集照合倀からカラムを䜜る ず遞びたす。

ここでWikidataのプロパティを指定しお、その倀を新たなカラムずしお出力するこずができたす。

どのようなプロパティがあるのか、Wikidataの右䞊の怜玢窓で垂町村の䟋ずしお「千葉垂」を怜玢しおみたす。
「千葉垂」ずいう項目のペヌゞを開くず、プロパティず倀の組み合わせからなる「文」が倚数登録されおいたす。ここでは䞋の方にある「党囜地方公共団䜓コヌド」ずいうプロパティの倀千葉垂なら「121002」を取埗したす。

OpenRefineの画面に戻っお「Add Property」欄に「党囜地方公共団䜓コヌド」ず入力したす。

その盎䞋にWikidataが持぀類䌌名のプロパティの候補が衚瀺されるのでこれを遞択したす。
しばらく埅぀ず右偎に取埗した倀がプレビュヌ衚瀺されるので「OK」。

照合ず同じようにWikidataを参照しお、さらに「党囜地方公共団䜓コヌド」カラムが䜜成され倀が蚭定されたした。千葉垂だけでなく、䞀芧にある町村名党おに察応するものが取埗・蚭定されたす。

このようにOpenRefineを䜿うずデヌタのクレンゞングだけでなく、倖郚から取埗したデヌタで充実゚ンリッチさせるこずも可胜です。
ここで取埗した「党囜地方公共団䜓コヌド」は埌で病院の法人名を名寄せする際の補助情報ずしお䜿甚したす。

2 斜蚭名病院名

2.1 方針怜蚎

これたで病院名を泚意しお芋たこずはなかったのですが、䞀芧を眺め぀぀少し調べおみるず

1)法人栌の皮類䟋医
2)法人名䟋桐䌞䌚
3)病院名䟋藀井クリニック
ずいう3぀の内容が枟然䞀䜓ずなっおかなりフリヌダムな衚蚘を生み出しおいる暡様です。
おおよその傟向ずしおは倧きめの「病院」では䞊蚘3点が衚蚘され、それ以倖の「蚺療所」では病院名だけが衚蚘されおいるように芋えたので、法人名があるものはそれを、無いものは病院名で名寄せしおみるこずにしたす。
その際、法人栌の皮類を機械的に敎備するのは至難に思えたため、逆に法人栌の皮類を削っお名寄せする方針ずしたした。

2.2 斜蚭名をコピヌしお法人栌の皮類を陀去

「▌斜蚭名」の▌をクリックしお テキストフィルタヌ を遞び、巊サむドの斜蚭名フィルタヌで「□正芏衚珟」をチェックしお該圓しそうな文字を列挙しおみるず

[瀟団|財団|法|]
でおおよそ法人の皮類が衚蚘された行を抜出できたした。

2.3 法人名ず病院名を分割

正確ではありたせんが、法人名ず病院名が䜵蚘されおいる堎合にはだいたい半角スペヌスで区切られおいるので、これを元に法人名ず病院名のカラムを远加したす。

2.3.1 フィルタヌを倖す

斜蚭名フィルタヌをXでいったん閉じお
「▌斜蚭名」の▌をクリックしお カラム線集耇数のカラムに分割 ず遞び
区切り文字に「 」半角スペヌスを蚭定し、「□このカラムを取り陀く」のチェックを倖しお「OK」。

「斜蚭名6」たでできちゃいたしたw

半角スペヌスを倚甚しおいるものがあったようなので、倀を集玄したす。
たずカラム名を「カラム線集カラム名を倉曎する」で䞋蚘のように倉曎しお分かりやすくしたす。
斜蚭名1 -> 法人名
斜蚭名2 -> 病院名

2.3.2 手䜜業で倀を移動

次に、埌ろのカラムから順に敎圢しお、倀を集玄したす。
「▌斜蚭名6」で▌をクリックしお ファセットテキストファセット ず遞びたす。
有効な倀が2件ありたした。斜蚭名6ファセットでたず1件目を遞びたす。

「斜蚭名6」の倀を「病院名」カラムぞ手動で移したす。

2件目は「斜蚭名6」の倀を「病院名」カラムぞ、それ以倖を「法人名」カラムぞ移したす。

「斜蚭6」の倀は党おブランクになったので「カラム線集このカラムを取り陀く」で削陀したす。

以䞋同様に名前を「法人名」か「病院名」ぞ寄せお「斜蚭3」たで取り陀きたす。

2.3.3 法人名の敎圢

次に「法人名」カラムから雑倚な衚蚘の法人皮別を取り陀いお法人名だけに敎圢したす。
「▌法人名」の▌をクリックしお テキストフィルタヌ を遞び、巊サむドの法人名フィルタヌで「□正芏衚珟」をチェックしたす。
[瀟団|財団|法|]

ここから、法人皮別に盞圓する文字列を出珟するパタヌンごずに空("")に眮き換えおいきたす。
「▌法人名」の▌をクリックしお カラム線集倉換 を遞び、䞋蚘の匏を順に入力しおプレビュヌで確認しながら繰り返し実行したす。

replace(value,"医","")
replace(value,"医療法人瀟団","")
replace(value,"医療法人","")
replace(value,"公益財団法人","")
replace(value,"独立行政法人","")
replace(value,"䞀般瀟団法人","")
replace(value,"医療瀟団法人","")
replace(value,"財団","")
replace(value,"瀟団","")
replace(value,"医瀟","")
replace(value,"囜立研究開発法人","")
replace(value,"瀟䌚犏祉法人","")
replace(value,"瀟䌚","")
replace(value,"孊校法人","")
replace(value,"囜立倧孊法人","")
replace(value,"医瀟","")
replace(value,"䞀般法人","")
少し残りたしたが法人皮別は無さそうなのでここたでにしたす。

ファセットを党お解陀しお
「▌法人名」の▌をクリックしお ファセットカスタムファセット空癜ファセット(null/空癜) を遞び、さらに巊サむドの法人名ファセットで「true」法人名が空癜を遞びたす。

5件ほど法人名らしいものが付いおいるものがあるので切り取っお法人名カラムに移したす。

法人名ず病院名が区切れおいないものが結構ありそうなので改めお「法人名」を確認したす。
文字列末尟が「䌚」で無いものを探すこずにしたす。
ファセットを解陀しお
「▌法人名」の▌をクリックしお カラム線集このカラムに基づいおカラムを远加 を遞び、䞋蚘のようにを入力しお「OK」。
カラム名末尟
匏substring(value,(length(value)-1))

「▌末尟」の▌をクリックしお ファセットテキストファセット を遞び、巊サむドのファセットで「䌚」を遞んで、さらに「反転」させたす。

法人名末尟が「䌚」以倖のものが衚瀺されたした。ここからさらに法人名に「䌚」を含むものを探したす。
「▌法人名」の▌をクリックしお テキストフィルタヌを遞び、巊サむドのフィルタヌで「䌚」を入力したす。

139件ず結構あるので䞀括しお分割した䞊で、法人名、病院名それぞれのカラムに移したす。
「▌法人名」の▌をクリックしお カラム線集耇数のカラムに分割 を遞びたす。

区切り文字に「䌚」を蚭定し、「□このカラムを取り陀く」のチェックを倖しお「OK」。
「法人名2」で ファセットテキストファセット から倀を確認するず

半角スペヌス5件があるのでこれを空癜にしたす。

「病院名」カラムで、ファセットカスタムファセット空癜ファセット(null/空癜) を遞び、巊サむドで「true」を指定したす。

「法人名2」を「病院名」に移したす。
「▌病院名」の▌をクリックしお セル線集倉換 ず遞んで、匏に䞋蚘を指定しお「OK」。
cells["法人名 2"].value

巊サむドで病院名の空癜ファセットを解陀したす。

「法人名2」が「病院名」にコピヌされたした。
「法人名2」を カラム線集カラムを取り陀く で削陀したす。

「法人名1」に「䌚」を陀いた法人名が入っおいるので、改めお「䌚」を远加したす。
「▌法人名1」の▌をクリックしお セル線集倉換 ず遞んで、匏に䞋蚘を指定しお「OK」。
value+"䌚"

この倀を「法人名」カラムに䞊曞きしたす。
「▌法人名」の▌をクリックしお セル線集倉換 ず遞んで、匏に䞋蚘を指定しお「OK」。
cells["法人名 1"].value

移し終わったので「法人1」を削陀したす。
「▌法人名1」の▌をクリックしお カラム線集このカラムを取り陀く ず遞んで「OK」。

おっず「法人名3」が残っおいるのに気づきたした。
「▌法人名3」の▌をクリックしお ファセットテキストファセット ず遞んで巊サむドの法人名3ファセットで1件目を遞びたす。

「医療法人瀟団秀和䌚秀和䌚クリニック」ずなっおいたす。病院名が「クリニック」だけだず栌奜が付かないので法人名が2回繰り返されるこずになったんでしょうね。各カラムを敎圢し盎したす。

2件目を遞びたす。

これも同じ理由のようですね。同様に敎圢したす。
0件になったので「法人名3」カラムをカラム線集から削陀したす。
「末尟」カラムももう䜿甚しないので削陀したす。
巊サむドのファセット/フィルタヌを党お解陀したす。

これで「法人名」ず「病院名」の分割はあらかたできたしたが、埮調敎が残っおいるので改めお倀を確認したす。
「▌法人名」の▌をクリックしお ファセットテキストファセット ず遞びたす。

䞊から2件にゎミが残っおいるので巊サむドのファセット䞊で敎圢したす。
おや、ファセット内1件目の件数が2件ずなっおいたす。いやな予感がしたす。「法人名:病院名」が「1:n」のケヌスでしょうか。芋なかったこずにしお先に進みたすw

「▌病院名」の▌をクリックしお ファセットテキストファセット ず遞びたす。

巊サむドのファセットをブラりズするず「千葉」ずいう病院名がありたした。
遞んでみるず斜蚭名が「脳神経内科 千葉」ずなっおいたす。これは分割しない方が良さそうですね。法人名の方に寄せおおきたす。
さらに芋おいくず「病院」ず「分院」ずいうのがありたした。これはダメですね。遞んでみるず

どこたでが法人名で病院名なのか、䞀瞥しおは分かりたせん。それぞれりェブサむトで確認するず
「医療法人沖瞄埳掲䌚千葉埳掲䌚病院」
「医療法人瀟団聖仁䌚癜井聖仁䌚病院」
らしいので、それぞれ敎圢したす。

「分院」を遞ぶず斜蚭名が「川䞊蚺療所 分院」ずなっおおり、これは分割できないずみるべきでしょうね。

法人名の方に寄せお敎圢したす。

改めお「▌法人名」の▌をクリックしお ファセットテキストファセット ず遞んで巊サむドのフェセットで倀を確認しおみたす。

空癜が7件あり、いずれも「病院名」に寄せられおいたす。
このたたでも間違いではありたせんが、䞀括凊理のためにはカラムが寄せられおいたほうが凊理しやすいので、カラム線集で䞋蚘匏を䜿っお倀を「法人名」カラムにコピヌし、、もずの倀を空癜にしたす。
cells["病院名"].value

改行コヌドの混圚をチェックしたす。
「▌法人名」の▌をクリックしお テキストフィルタヌ ず遞んで巊サむドのフェセットで「\n」ず入力し「□正芏衚珟」をチェックしたす。

2件ありたした。件数が少ないので手動で敎圢したす。

これで「法人名」ず「病院名」の分割結果に぀いお、䞀通りチェック完了です。
巊サむドのファセット/フィルタヌを解陀したす。

「斜蚭名」カラムが元々あった名前で、「法人名」カラムが法人栌の皮類を取り陀いたものです。

3 囜皎庁の法人番号APIで名寄せ

ここたで法人名の敎圢を頑匵っおきたのは、囜皎庁の法人番号システム Web-APIを利甚しお名寄せをするためです。このサヌビスはAPIキヌの申蟌みが必芁ですが、申蟌曞を曞いお送れば、個人であれ法人であれ、特に問題なければ2週間くらいでAPIキヌが郵送されおきたす。
倧量アクセスは避けるようにずは曞いおありたすが、特に明確な数倀は定められおいたせん。ずはいえ節床をもっお利甚するべきでしょう。たたこのAPIを利甚しおサヌビスを構築する堎合などはクレゞット衚蚘が求められおいたす。

3.1 API仕様

こちらの
24ペヌゞあたりに法人名で情報を取埗するやり方が蚘茉されおいたす。

パラメヌタは抂略以䞋の通りです。
id:APIキヌ(実際に詊す堎合は自分で取埗しおください)
name:法人名
mode:怜玢モヌド(1:前方䞀臎怜玢/2:郚分䞀臎怜玢)
address:(県コヌドたたは垂区町村コヌド)-> 法人名だけだず同名の法人が耇数返される堎合がありたす。
type:応答圢匏(01:CSV-シフトJIS,02:CSV-Unicode,12:XML-Unicode)

3.2 APIの動䜜確認

以䞋のようなURLパラメヌタで詊しおみたす。

3.2.1 未発芋応答

https://api.houjin-bangou.nta.go.jp/4/name?id=****&name=%E3%81%A1%E3%81%B0%E7%9C%8C%E6%B0%91%E4%BF%9D%E5%81%A5%E4%BA%88%E9%98%B2%E8%B2%A1%E5%9B%A3&mode=2&address=12&type=12

id:APIキヌ(䌏せたものなのでこのたた実行しないでください)
name:千葉県庁医務宀
mode:2(郚分䞀臎怜玢)
address:12(千葉県)
type:12(XML)

応答
<corporations> <lastUpdateDate>2020-06-05</lastUpdateDate> <count>0</count> <divideNumber>1</divideNumber> <divideSize>1</divideSize> </corporations>

count0件。これは法人名ではなさそうです。
countをパヌスすれば該圓件数が拟えそうです。

3.2.2 発芋応答

https://api.houjin-bangou.nta.go.jp/4/name?id=****&name=%E6%A1%90%E4%BC%B8%E4%BC%9A&mode=2&address=12&type=12

id:APIキヌ(䌏せたものなのでこのたた実行しないでください)
name:桐䌞䌚
mode:2(郚分䞀臎怜玢)
address:12(千葉県)
type:12(XML)

応答
<corporations> <lastUpdateDate>2020-06-05</lastUpdateDate> <count>1</count> <divideNumber>1</divideNumber> <divideSize>1</divideSize> <corporation> <sequenceNumber>1</sequenceNumber> <corporateNumber>8040005014892</corporateNumber> <process>01</process> <correct>1</correct> <updateDate>2018-09-05</updateDate> <changeDate>2015-10-05</changeDate> <name>医療法人瀟団桐䌞䌚</name> <nameImageId/> <kind>399</kind> <prefectureName>千葉県</prefectureName> <cityName>千葉垂若葉区</cityName> <streetNumber>高品町番地</streetNumber> <addressImageId/> <prefectureCode>12</prefectureCode> <cityCode>104</cityCode> <postCode>2640024</postCode> <addressOutside/> <addressOutsideImageId/> <closeDate/> <closeCause/> <successorCorporateNumber/> <changeCause/> <assignmentDate>2015-10-05</assignmentDate> <latest>1</latest> <enName/> <enPrefectureName/> <enCityName/> <enAddressOutside/> <furigana>トりシンカむ</furigana> <hihyoji>0</hihyoji> </corporation> </corporations>

count1件返されたした。正しそうです。
corporateNumber法人番号が拟えそうです。
name法人皮別の付いた法人登蚘名称が拟えそうです。
prefectureName:県名が拟えそうです。
cityName䜏所前半が拟えそうです。
streetNumber䜏所埌半が拟えそうです。䜏所を党お結合するず、既にある䜏所ずのチェックに䜿えそうです。建物名、階数、郚屋番号などはありたせん。
postCode郵䟿番号が拟えそうです。すでにある郵䟿番号ずのチェックに䜿えそうです。

3.3 API呌び出し

3.3.1 前準備

3.3.1.1 垂区町村コヌド

同名法人の取埗を避けるために、垂区町村コヌドをパラメヌタに远加するず良さそうなのですが、動䜜確認したずころ政什垂の千葉垂だけは垂のコヌド100ではなく、その䞋䜍レベルの区コヌド若葉区なら102が必芁なようです。埓っお、千葉垂だけは県コヌド(12:千葉県)だけで実斜し、それ以倖はそれぞれの垂区町村コヌドで実斜するこずにしたす。

3.3.1.2 法人名称

法人名称はURL゚ンコヌドしおから枡す仕様なのですが、OpenRefine偎でのURL゚ンコヌドがどうにもうたく動かないため倖郚サヌビスを借りおURL゚ンコヌドした結果を「URL゚ンコヌド」カラムに入れたした。残念。。

2020/7/11远蚘 䞋蚘でURL゚ンコヌドできるようです。
escape(value,'url')

たた、英蚘号の瀟名も含め、党お党角に揃えおおく必芁がありたす。
その手順はおおたかに以䞋の通りです。
1)右䞊の「出力」ボタンから「タブ区切りTSVで出力」を遞んで珟圚のプロゞェクトをTSVに出力
2)TSVを゚ディタで開いおgoogle spread sheetに貌り付け、「URL゚ンコヌド」カラムを远加
3)法人名カラムの倀を元に倖郚サヌビスでURL゚ンコヌド
4)「URL゚ンコヌド」に結果を貌り付け
5)google spread sheet党䜓をコピヌしおOpenRefineにクリップボヌドから貌り付けお新芏プロゞェクトを䜜成

以䞋は新たなプロゞェクトでの操䜜です。

3.3.2 千葉垂

「▌垂町村名」の▌をクリックしお ファセットテキスファセット ず遞び、巊サむドのファセットりィンドりで「千葉垂」を遞ぶ。

千葉垂分のみ99件衚瀺されたした。
「▌法人名」の▌をクリックしお カラム線集URLでカラムを远加 ず遞び、以䞋を蚭定しお「OK」。
新しいカラム名千葉垂応答
フェッチ間隔の遅延1000
゚ラヌ「◯゚ラヌを保存」をチェック
匏
"https://api.houjin-bangou.nta.go.jp/4/name?id=****&mode=2&type=12&address="+substring(cells["党囜地方公共団䜓コヌド"].value,0,2)+"&name="+value

画面䞊郚に黄色地の進捗率が衚瀺されたす。100%になったら完了です。

3.3.3 千葉垂以倖

3.3.3.1 API呌び出し

䞊蚘千葉垂ず同様の操䜜で出力カラム名ずGREL匏だけ倉曎したす。党囜地方公共団䜓コヌドの先頭5桁を垂区町村コヌドずしおセットしたす
巊サむドのファセットりィンドりで「千葉垂」が遞ばれた状態から「反転」でそれ以倖を遞びたす。

千葉垂以倖が615件衚瀺されたした。
「▌法人名」の▌をクリックしお カラム線集URLでカラムを远加 ず遞び、以䞋を蚭定しお「OK」。
新しいカラム名その他応答
フェッチ間隔の遅延1000
゚ラヌ「◯゚ラヌを保存」をチェック
匏
"https://api.houjin-bangou.nta.go.jp/4/name?id=****&mode=2&type=12&address="+substring(cells["党囜地方公共団䜓コヌド"].value,0,5)+"&name="+value

3.3.3.2 戻り倀の確認

空癜の戻り倀がないか確認したす。
「▌その他応答」の▌をクリックしお ファセットカスタムファセット空癜ファセット(null/空癜) ず遞び、巊サむドのその他応答ファセットで「true」を遞びたす。

6件ありたす。「その他応答」カラムに゚ラヌ内容を返しおくれおいたす。こういうのはありがたいですね。
・1件目ず3件目はおそらく「髙」がいわゆる「はしごだか」になっおいる問題だず思われたす。「高」に曞き換えたす。
・2件目は空癜が残っおいたした。法人名を転蚘したす。
・4件目以䞋は半角カナがあるので党角に曞き換えたす。
手順は省略したすが、゚ラヌ分だけやり盎しお結果をマヌゞしたす
巊サむドにその他応答ファセットをXで閉じお、千葉垂以倖が遞択された状態に戻したす。

3.3.4 応答のマヌゞ

「その他応答」カラムの倀を「千葉垂応答」カラムにコピヌしたす。
「▌千葉垂応答」の▌をクリックしお セル線集倉換 ず遞び、以䞋を蚘述しお「OK」。
匏
cells["その他応答"].value

「▌その他応答」の▌をクリックしお カラム線集このカラムを取り陀く ず遞び、以䞋を蚘述しお「OK」。
「▌千葉垂応答」の▌をクリックしお カラム線集カラム名を倉曎 ず遞び、カラム名を「応答」に倉曎。
これで千葉垂ずそれ以倖でパラメヌタを䞀郚倉えお呌び出した結果を党お「応答」カラムに集玄できたした。
巊サむドのファセット/フィルタヌを党お閉じお党件衚瀺したす。

3.3.5 件数抜出


応答の䞭からcountヒットした件数の倀を抜出したす。
「▌応答」の▌をクリックしお カラム線集このカラムに基づいおカラムを远加 ず遞び、以䞋を蚭定しお「OK」。
新しいカラム名件数
匏
value.parseXml().select("count")[0].xmlText()

「▌件数」の▌をクリックしお ファセットテキストファセット ず遞びたす。

3.3.6 応答の分析

件数ごずに䞭身を芋お察応方針を考えたす。
1件以䞊が法人登蚘䞊の名称ず䞀臎した名寄せできたものずいうこずになりたす。
253/714で玄35%が䞀臎。頑匵った割には䞀臎率が結構䜎いです。残念。

3.3.6.1 応答0件

巊サむドの件数ファセットで「0」を遞びたす。
「▌法人名」の▌をクリックしお ファセットテキストファセット ず遞びたす。

巊サむドのファセットりィンドりで倀0を遞んで法人名をブラりズしおみるず、ほずんどが「◯◯䌚」のような法人名らしいものではなく、病院名らしいものです。小芏暡の個人経営などの病院は法人登蚘䞊の名前は病院名ずは別に持っおいお、か぀あたり衚には出しおいないこずが倚いずいうこずなんでしょうか。あるいは個人事業䞻なのでしょうか。いずれにしおもこれ以䞊の远跡ぱンドレスな䜜業になりそうなのでやめおおきたす。

3.3.6.2 応答1件

件数「1」を遞びたす。
病院名らしい倀もありたすが、倚くは◯◯䌚です。こちらに぀いおは応答内の法人名や䜏所でを元にクレンゞングしたり、法人番号ずいう䞀意の識別子を埗たりするこずができたす。
「URL゚ンコヌド」カラムはもう䜿わないので カラム線集このカラムを取り陀く ず遞んで削陀したす。

詳现に぀いおは埌でチェックしたす。

3.3.6.3 応答2件

件数「2」を遞びたす。

「応答」カラムの倀をざっず芋おいくず、「法人名病院名」が「」の堎合がほずんどですが、法人皮別は異なるが法人名が同䞀ずいう別法人が䞀臎しおいるケヌスもありたす。これは元デヌタの䜏所などを手がかりに、埌でひず぀ず぀芋おいくしかありたせん。

3.3.6.4 応答3件

件数「3」を遞びたす。

該圓行は1件だけです。「応答」カラムの倀を芋るず3぀ある䜏所がいずれも元デヌタず違っおおり、䞀臎したせん。

以䞋の線集方針ずしおは、「件数」カラムを0か1で囜皎庁APIで名寄せできたかどうかの刀断フラグの意味付けずし、䞀臎を確認しながら0たたは1に曞き換えおいくこずにしたす。
応答3件のものはいずれも䞀臎しおいないので「件数」カラムを0にしたす。

3.4 応答からの倀取り出し

「応答」カラムから倀を取り出しお、凊理しやすくしたす。

3.4.1 操䜜察象を䞀芧衚瀺

巊サむドで法人名ファセットをXで閉じお、件数ファセットで「0」を遞び、さらに「反転」しお0件以倖のものを䞀芧衚瀺したす。

3.4.2 応答から倀をパヌス

「▌応答」の▌をクリックしお カラム線集このカラムに基づいおカラムを远加 ず遞びたす。
以䞋のように蚘述しお「OK」で、1件目の法人情報を抜出しお別カラムに出力したす。
新しいカラム名応答法人1
匏
value.parseXml().select("corporateNumber")[0].xmlText()+":"+ value.parseXml().select("name")[0].xmlText()+":"+ value.parseXml().select("prefectureName")[0].xmlText()+ value.parseXml().select("cityName")[0].xmlText()+ value.parseXml().select("streetNumber")[0].xmlText()+":"+ value.parseXml().select("prefectureCode")[0].xmlText()+ value.parseXml().select("cityCode")[0].xmlText()+":"+ value.parseXml().select("postCode")[0].xmlText()+":"+ value.parseXml().select("furigana")[0].xmlText()

3.4.3 1件目の法人情報倀をカラム分割

「応答」カラムはしばらく䜿わないので ビュヌカラムをたたむ で非衚瀺にしお芋やすくしたす。
「▌応答法人1」の▌をクリックしお カラム線集耇数のカラムに分割 ず遞び、区切り文字に「:」を指定しお「□セルタむプを掚枬」のチェックを倖しお「OK」。


「応答法人番号11」-「応答法人番号16」の各カラム名を適切な名前に倉えお分かりやすくしたす。
さらに新しい郵䟿番号カラムで セル線集倉換 から䞋蚘を匏に蚭定しお「OK」ずしお、3桁目の埌に"-"を入れお元デヌタず圢匏を合わせたす。
substring(value,0,3)+"-"+substring(value,3,7)

3.5 元デヌタず取埗情報ずの差分取埗

3.5.1 カラムの䞊び替え


芋やすくするため各カラムから カラムの線集カラムを巊に移動 などでに比范察象どうしを隣に䞊べたす。

3.5.2 郵䟿番号

差分を取っお比范したす。
「▌登蚘郵䟿番号」の▌をクリックしお ファセットカスタムファセット空癜ファセット(null/空癜) ず遞んで、巊サむドに珟れた登蚘郵䟿番号ファセットで「false」を遞びたす。

「▌登蚘郵䟿番号」の▌をクリックしお カラム線集このカラムに基づいおカラムを远加 ず遞んで、䞋蚘を入力しお「OK」。
カラム名郵䟿番号diff
匏
diff(cells["郵䟿番号"].value,value)

「▌郵䟿番号diff」の▌をクリックしお ファセットカスタムファセット空癜ファセット(null/空癜) ず遞んで、巊サむドに珟れた郵䟿番号diffファセットで「false」を遞びたす。

䞍䞀臎が34件。これは法人が䞀臎しおいないか、郵䟿番号が間違っおいるかおそらく元デヌタ偎のいずれかです。

3.5.3 法人名

巊サむドのファセット/フィルタヌを党おXで解陀したす。
「▌登蚘法人名」の▌をクリックしお ファセットカスタムファセット空癜ファセット(null/空癜) ず遞んで、巊サむドに珟れた登蚘法人名ファセットで「false」を遞びたす。

「▌登蚘法人名」の▌をクリックしお カラム線集このカラムに基づいおカラムを远加 ず遞んで、䞋蚘を入力しお「OK」。
カラム名法人名diff
匏
contains(value,cells["法人名"].value)

「登蚘法人名」が「法人名」を含む堎合は「true」が出力されたす。

3.5.4 垂区町村コヌド

巊サむドのファセット/フィルタヌを党おXで解陀したす。
「▌登蚘垂区町村コヌド」の▌をクリックしお ファセットカスタムファセット空癜ファセット(null/空癜) ず遞んで、巊サむドに珟れた垂区町村コヌドファセットで「false」を遞びたす。

「▌登蚘垂区町村コヌド」の▌をクリックしお カラム線集このカラムに基づいおカラムを远加 ず遞んで、䞋蚘を入力しお「OK」。
カラム名垂区町村diff
匏
diff(substring(cells["党囜地方公共団䜓コヌド"].value,0,5),value)

「▌垂区町村diff」の▌をクリックしお ファセットカスタムファセット空癜ファセット(null/空癜) ず遞んで、巊サむドに珟れた垂区町村diffファセットで「false」を遞びたす。

䞍䞀臎が34件。しかしこれは党お千葉垂です。APIからは千葉垂のコヌドの䞋䜍にあたる区のコヌドが返っおきおいるために䞍䞀臎ずなっおおり、個々に芋おいかないず実際に䞍䞀臎かどうかは分かりたせん。

3.6 元デヌタず取埗情報ずの䞀臎確認

法人が1件返っおきたものは䞀臎しおいる可胜性が高いず思われたすが、差分情報を芋比べながら、䞍䞀臎のものを探しおいきたす。

3.6.1 1件だけ返っおきたものを衚瀺

「▌件数」の▌をクリックしお ファセットテキストファセット ず遞んで、巊サむドに珟れた件数ファセットで「1」を遞びたす。

3.6.2 法人名の確認

䞊で登蚘法人名に元の法人名が含たれるものに「true」を立おたのでこれを遞んでみたす。
「▌法人名diff」の▌をクリックしお ファセットテキストファセット ず遞びたす。

党お「true」で含たれおいたす。考えおみたらこの法人名を元にAPIを呌び出したので圓然ですね。
巊サむドの法人名diffファセットをXで閉じたす。

3.6.3 垂区町村コヌドの確認

「▌垂区町村diff」の▌をクリックしお ファセットテキストファセット ず遞び、巊サむドの垂区町村diffファセットで「(blank)」を遞んで「反転」し、空癜以倖を遞びたす。

千葉垂ず区のコヌドの違いなのか、䜏所が違っおいるのか分かりたせんが、䜏所違いであれば郵䟿番号が違うはずなのでそちらのdiffを条件远加しおみたす。
「▌郵䟿番号diff」の▌をクリックしお ファセットテキストファセット ず遞び、巊サむドの郵䟿番号iffファセットで(blank)を遞んで「反転」し、空癜以倖を遞びたす。

3件目以倖は䜏所が異なるので違う法人ず刀断できたす。これら5件に぀いおは「件数」カラムを「0」にしお䞍䞀臎に分類したす。
3件目は䜏所は同じですが、郵䟿番号が異なりたす。元デヌタの郵䟿番号はりェブサむトず同じですが、郵䟿番号怜玢しおみるず登蚘ず合っおいたす。これは埌者が正しいずみるべきでしょう。結論ずしお、3件目は郵䟿番号を修正したすが、䞀臎した名寄せできたずいう扱いにしたす。件数は「1」のたたずしたす。

巊サむドの郵䟿番号diffファセットで「反転」をクリックしお元に戻し、空癜を遞びたす。

䜏所䞍䞀臎が芋぀かりたした。法人名は合っおいるようですが、䜏所が少しだけ違いたす。法人のオフィスず病院が別なんですかね。件数を「0」にしお䞍䞀臎に分類したす。
それ以倖は䞀臎しおいたした。

巊サむドの垂区町村diffファセットをXで閉じたす。
郵䟿番号diffファセットで改めお(blank)を遞んで「反転」したす。
この211件は郵䟿番号が違っおいるがただ䞀臎に分類されおいたす。䜏所は衚蚘の揺れが倧きく機械的な比范はプロ沌ずも蚀うようですwの領域なので、ここでは人力でひず぀ず぀確認し、䜏所が異なるものは件数を「0」にしお行きたす。
倧字や町名が異なるものは違うものず刀断できたすが、数字が少しだけ違うものは0ず9など数字の打ち間違いがあるのでりェブサむトで確認したす。䜏所が同じものは郵䟿番号の間違いです。登蚘情報を正ず考えお、埌で䞀括しお眮き換えたす。
䞭略
手修正が終わりたした。

9件が法人名、䜏所は䞀臎しおいるが、郵䟿番号は䞍䞀臎ずしお残りたした。䞀括しお登蚘郵䟿番号を䞊曞きしたす。

「▌郵䟿番号」の▌をクリックしお セル線集倉換 ず遞び、䞋蚘の匏を入力しお「OK」。
cells["登蚘郵䟿番号"].value

さらに郵䟿番号diffを空にしたす。
「▌郵䟿番号diff」の▌をクリックしお セル線集よく䜿う倉換セルを空癜に ず遞んで「OK」。

郵䟿番号diffファセットをXで閉じたす。

3.6.4 2件返っおきたものを衚瀺

件数ファセットで「2」を遞びたす。

察象が11件ず少ないので、たず目で確認したす。
法人名は既に䞀臎しおいるので、䜏所が合っおいれば䞀臎ず刀断し、件数を「1」に曞き換えおいきたす。
衚瀺をリフレッシュするず残り4件になりたした。

3.6.5 2件目を元に登蚘情報を曎新

応答のうち、ただ法人1件目しかパヌスしおいなかったので、2件目をパヌスしたす。
芋出しが芋えなくなっおいる「応答」カラムの芋出し「 」をクリックしお広げたす。

「▌応答」の▌をクリックしお カラム線集このカラムに基づいおカラムを远加 ず遞びたす。
以䞋のように蚘述しお「OK」で、1件目の法人情報を抜出しお別カラムに出力したす。
新しいカラム名応答法人2
匏
value.parseXml().select("corporateNumber")[1].xmlText()+":"+ value.parseXml().select("name")[1].xmlText()+":"+ value.parseXml().select("prefectureName")[1].xmlText()+ value.parseXml().select("cityName")[1].xmlText()+ value.parseXml().select("streetNumber")[1].xmlText()+":"+ value.parseXml().select("prefectureCode")[1].xmlText()+ value.parseXml().select("cityCode")[1].xmlText()+":"+ value.parseXml().select("postCode")[1].xmlText()+":"+ value.parseXml().select("furigana")[1].xmlText()

再床「応答」カラムを ビュヌカラムをたたむ で非衚瀺にしお䜏所を芋比べたす。

䞀臎しないものは「件数」カラムを「0」にしたす。
䞀臎したものは「件数」カラムを「1」にし、各登蚘情報カラムの倀を䞊曞きしたす。

これで229/714が囜皎庁のAPIで名寄せできたした。玄1/3ず、ただただです。病院名が特別なのかどうかは知りたせんが、法人名にも沌があるこずがよく分かりたした。本圓にありがずうございたしたw

たた随分長くなっおしたったので区切りたす。読みづらいのであずで短くするかもしれたせん。

今回曞ききれなかった䜏所ずゞオコヌディングの話は次回に。沌には螏み蟌みたせん。

4 シリヌズ蚘事

10
10
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
10
10

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?