ラテン交じりな名寄せingに手を変え品を変え

あたしゃちかりたよ。

要するにこれをまずは作りたかった:

何かっつぅと、空港コードなんだけど、「情報としては結構信頼出来る部類の3つ」の情報の合致度をみて、不整合が見つかったものリスト。対象は、Aeronautical Information Services – National Flight Data Center (NFDC)(これはもう「権威」)、IATA code list – One World Nation’s Online (信頼度は少し欠けるものの IATA コードの一覧が得られる貴重な「まぁまぁの権威」(けど所詮は民間団体))、Great Circle Mapper (完全に個人のプロジェクトらしいが驚異的な規模と信頼性)。

そもそもが NFDC と Great Circle Mapper からはいわゆる「スクレイピング」で大量にお取り寄せしててな、FAA からは 2200 レコードくらいだったかな、Great Circle Mapper には 18000 クエリだったか。そりゃまぁこれだけでも膨大な時間がかかるわけね。まぁそれはそれ。あんましマネされても困るんで、ソース公開してない。

で、目標は Wikipedia のリスト、それに openflights の airports.dat にフィードバックすること、なんだけれど、その元ネタにしたい Great Circle Mapper 自体のチェックをせねば、というわけだ。間違いがあるに違いない、と思って始めたわけではないけれど、とにかく「信頼できるリソース」に基かなければ迷惑この上ない一覧が出来上がってしまうわけなので、まぁチェックはすべきよね、と、チェックし始めたわけです。(というか One World Nation’s Online の誤りは既に見つけていたので、そっちのチェックも兼ねて。)

何が問題で、何が大変なのか、というのはこういうことなの:

  • IATA コードの「権威」、つまり IATA そのものがサービスしている「Airline and Airport Code Search」が強烈に使いにくい上に、情報量があまりに少ない。
  • FAA は FAA コードと ICAO コードのペアにしか関知してないので、NFDC では IATA コードはわからない
  • ICAO コードの一覧を簡単に得る手段はない。(各国の AIP を探すしかないが、これがまた…探しにくい。特に問題がありそうなものほど。パラグアイやインドネシアの AIP を探り当てるまで苦労した。)

つまり本来の3つの「権威」を紐付ける情報があまりに少ない(かお取り寄せがヘビィ)なのね。いわゆる情報の充実した二次情報は多いけれど、今はまさにそれらの妥当性を見たいわけなので、少なくとも「絶対視」する使い方は出来ないわけね。

紐付ける情報が少ないなりに、となれば、「空港名と地域での合致」だけがせいぜい出来ること、なんだけどな、まぁそれぞれが同じものを全然違う言い方すんのな。えれぇ大変だった。こういうの、いわゆる「基幹系業務」に付き物の「名寄せ」問題なわけなんだけれど、どうなんだろ、「日本国内」と「ワールドワイド」のどっちがエゲつないだろか? 業種にもよるかねぇ?

今回の場合は「CJK 問題」とは無縁なので、まぁそう大変ともいえないのかも。けど、やっぱし色々あってなぁ。そもそも少なくとも 20 年近く前からいわゆるラテン文字は普通に使われてて、unicode 発明後の今はそれに拍車をかけて、「ラテン文字を使うなんて迷惑な!」な風潮は一切ない。普通にフランス語、イタリア語、ドイツ語が混じってくる。(さすがにロシア語はそのままってのはない。いわゆる ISO-LATIN-* に収まるものだけ…って、ロシア語って確かこれに含まれなかったよな?)

てわけで、「latin to ascii」なんてことが必要になった。たとえば「Bellavista, San Martín, Perú」なんてのは 「Bellavista, San Martin, Peru」と読み替えないと、合致しないわけね、一方はまさに ascii だけだったりするので。素の Python ででけんかなぁと少し探るも、無理がありそうだったので、 Unidecode。なんちゅう名前ぢゃ、てのと、なんちゅうバージョン番号だ、てのと。でも使えまっす。ありがてぇ。

こんなんで済むなら警察はいらない…じゃなくて、「そんな簡単な名寄せ問題、あったら教えてくれ」つぅことです、ハイ。

そもそもね、「世界には色んな事情があるのよね」てのが、ワールドワイドな名寄せに取り組むとワラワラ出てくる。「東ティモール」はインドネシアですか、そうじゃないですか。知ってる? 香港は中国? 台湾は? Laayoune はモロッコですか、西サハラですか。などなど。いやになるほどある。それぞれが違う主張で言ってくるので、名寄せるためにはどれかに寄せる必要がある。ワタシ自身の政治ポリシーとは関係なく、「中立じゃない名寄せ」を、まぁそりゃするしかないわけな。

まぁでも「所詮は空港一覧」なので、全部合わせてもせいぜい 2万以内、大したことはないと言ってしまえば大したことない。疲れるけど。

あとは「地域のまとめ方/言い方」の違いね。結構一意に近いものを、特に FAA なんかが省略しがちなのな。一方では Great Circle Mapper がこれでもかってくらいに詳細な地域特定をしてたりして、こうなると合致をみるのがかえってキツい。

さぁ、もう終わりだ。

なわけない。日本語でも「カタカナ表記の揺れ」があるでしょ? さすがにいまどき radio を「ラヂオ」と綴るヒトはいないでしょうが、けれども誰もが「ルイ・ヴィトン」と綴るとは限らず、結構人による。これと同じことが起こる。さっきのラテン語がそのままラテン語のままならいいんだけど、ASCII オンリーに変換されている場合の揺れがある。ましてや中国語や韓国語は結構違ったつづりをする。こうなってくると、さすがにシンプルな「読み替え」「置換」では埒があかなくて。

もうこうなったら、以前にしれ~っと紹介した fuzzy の出番ね。というか久しく使ってなかったので自分で思い出せず、自分のブログから検索しました、はい。

あれこれ書き殴ったけれど、これら苦労のあとはここで全部見れます。(プログラムを作るのは目的じゃないので、全然キレイには書いてません、けど、オモロイんじゃないかと思うよ。)