1

場所の名前を保持するデータベースに「やや」醜いフィールドがあります。例えば、「The Madison Square Gardens」としてもエントリーされているMadison Square Gardensなど。

すべての場所の正確なリストを取得できるように、データを抽出しようとしています。これを達成するために、私が行ったことは、各場所のイベントを結合する SQL クエリを作成し、場所名でグループ化し、10 を超えるエントリを持つ場所グループのみを使用することです (これは、やや非信頼できるエントリ)、しかし、私はまだいくつかの非常に異なるスペルとエントリになってしまい、その結果、プロパティ/場所が重複しています.

私のSQLクエリは次のようになります

"SELECT 場所、COUNT(*) FROM 場所
JOIN イベント ON locations.lid=events.lid
WHERE `ロング`
間 - 74.419382608696
および - 73.549817391304
そして緯度
40.314017391304の間
と 41.183582608696
GROUP BY ロケーション
HAVING COUNT(*)>10

このクエリを実行すると、「Madison Square Garden」、「Madison Square Gardens」、「The Madison Square Garden」という 3 つの異なるエントリが返されます。もちろん、これはマディソン・スクエア・ガーデンの入場のみです。ほとんどのエントリには、複数のわずかに異なるスペルがあります。

検索を緯度/経度で制限しているため、異なる都市で同じ名前の場所がグループ化されることはありません。

これらを一貫してグループ化するために、正規表現または GROUP 句の何かを使用する方法はありますか? グループ化の前に末尾の「s」と「the」を削除するだけでも、おそらく大きな利点になります。

それぞれの結果を取得し、緯度/経度の範囲内のすべての場所に対して正規表現の一致を行うつもりでしたか?

幸いなことに、場所にリンクされたイベントが十分にあるので、主要な場所をある程度認識できます。

半構造化データから場所を抽出するための他の提案はありますか? データはさまざまなソースから廃棄されているため、入力を制御することはできません。

4

2 に答える 2

1

ここにいくつかの提案があります。

データベースに正規化された会場名の列を作成します: (1) 各名前を単純な変換で実行します... 「マディソン スクエア ガーデン」と「ワシントン モニュメント」を「マディソン スクエア ガーデン」と「ワシントン モニュメント」に変換します。複数形の名詞を単数形にする簡単な方法...名前の各単語から「es」、次に「s」を取り除きます。すべてを小文字にします。残りの短い単語「a」「it」「the」「and」「&」を削除します。単語をアルファベット順に並べ替えて、"garden madison square" を取得します。結果の文字列をテーブルの新しい列に格納します。元の文字列を表示しながら、一致させます。

(2) 会場のスペルが異なるルックアップ テーブルを作成します。これは、「Boston Garden」/「Fleet Center」/「TD Banknorth Garden」/「North Station」などの会場名や、そのようながらくたに適しています。同じ場所、別のスペル. (あなたの例では「ペンステーション」)。

(3) Yahoo または Google マップのジオコーディング サービスを使用すると、不完全な名前と住所を取得して標準化できます。

Soundex では、かなりの数の偽陽性の一致が得られます。これはフォールバックとして設計されており、人による曖昧さ回避が必要です。

于 2009-11-26T01:07:30.573 に答える
0

問題が「類似」文字列を同じように扱っている場合は、SOUNDEX アルゴリズムを確認してください。さまざまなシナリオのすべてで機能するかどうかはわかりませんが、それは始まりです.

このスレッドで議論されています: オートコンプリートのために MYSQL と PHP で会社名のあいまいな一致を行うにはどうすればよいですか?

于 2009-11-25T23:12:26.597 に答える