web-dev-qa-db-ja.com

位置データを正規化および解釈するための戦略

ユーザー(サードパーティからのもの)からの位置入力データの正規化に関する問題で少し立ち往生しています。

目的

ユーザーの場所の入力フィールドを論理的に分類して解釈し、1つ以上の国からの単一または複数の場所を一覧表示しているかどうかを理解します。


問題

ユーザー入力から受け取るデータの種類は乱雑で、以下に示すような論理構造や一貫性がありません。毎日のジオコードはグーグルから制限されているので、私はそれらを控えめに使用する必要があります。ユーザーからの位置入力を効率的に処理し、正しいジオコーディングクエリをGoogleに送信して、正しい結果を取得したいと考えています。


データソース

データは不合理で不規則であり、次の形式のいくつかで提供される可能性があります。

London, UK                              Alternative format
England, London                         Reversed order
London                                  Generic location            
London Sheffield, Newcastle             Three separate locations in the same country without consistent commas
London, Sales, Sales Assistant          Non location content inserted
London [NOT SPECIFIED]                  Other non location content inserted with non alphabet chars not separate with commas
London, Washington, Brazil, England     Mix of unrelated locations, including cities and countries
Washington, London, Kent                Mix of places within a single country   

提案された解決策

ステップ1:内訳データ

  • 分離された各単語を配列に入れます

ステップ2:データのサニタイズ

  • 無効な文字、カンマ、追加のスペースなどを削除します
  • Stoplist.txtに対して単語を削除します(job、sales、in、atなど)

ステップ3:有効な場所かどうかを判断する

  • 個々の配列アイテムが以前にジオコーディングされているかどうかを確認し、そうでない場合は、ジオコーディングして保存します
  • 結果なしでジオコーディングされた単語をログに記録します–無意味なジオコーディングを避けるために、これらをストップリストファイルに追加します

ステップ4:インターリンク値

  • 場所の座標値が別の配列項目の範囲内にあるかどうかを比較します。もしそうなら、私たちは彼らが親であることを知っており、私たちはそれらを単一のアイテムとして扱います
  • ロンドン+イングランド->ロンドンの座標はイングランドの座標範囲内にあるため、2つの別々の場所ではなく、単一の場所であることがわかります。

問題

問題1:ケント、ロンドン、サセックス技術的には、米国にケントがあり、グーグルマップに入力すると最初に表示されます。ただし、すべての結果が英国であるため、必要な結果が米国のものである可能性は非常に低いです。

問題2:イングランド、ワシントン、ニューヨークイングランドにはワシントンがありますが、これはイングランドにあるとは思われません。


質問

単語を別々のエンティティに分割し、それらを再リンクするという私の提案された解決策は、最も論理的な解決策ですか?どんな助けやアドバイスも大歓迎です、私はそれが簡単な問題ではないことを知っています。

2
J.Zil

私はその質問に答えようとします。 :)

  1. それが成長するにつれて場所について学びます。
  2. 時間の経過とともに自分自身を改善します。

仮定:リアルタイムのジオコード分析は必要ないと仮定します。以下のソリューションはバックグラウンドで機能し、古くなるにつれて自動的に改善され続けます。

データベースには、国、州、都市などの巨大なリポジトリが必要です。これが、住所が関連しているかどうかを追跡できる唯一の方法です

役立つかもしれないいくつかの疑似アルゴリズム:

  1. その配列をいくつかのgroupIdでグループ化する必要があります
  2. 配列内の個々のアイテムが、既知の国、州、都市、またはジオコーディングされているかどうかを確認します。
  3. 上記のステップでGoogleが何も得られない場合は、そのような種類のものを提供するWebサイトがいくつかある可能性があります。そこに到達するためにWebクロールを行うことができます。

  4. 上記の手順から、ストップリストに追加するストップワードをさらに取得できます。

  5. 国、州、都市を簡単に知ることができるので、ジオコーディングする準備が整いました。

  6. 後で使用できるように、ジオコーディングの結果を保存する必要があります。

注:ストップリストの再評価ポリシーを検討することもできます。その後しばらくして、許可された単語として単語を再考することができます。あなたのストップリストにある名前の新しい場所があるかもしれないことを知っている世界は成長しています:)

免責事項:私はジオコードに取り組んだことがなく、それについてあまり研究していません。私は概念的な答えとして解決策を示しています。

それが役に立てば幸い

1
shankbond