HTML ページの構造化データを認識するための最適なアルゴリズムは何ですか?
たとえば、Google は電子メール内の自宅/会社の住所を認識し、この住所への地図を提供します。
HTML ページの構造化データを認識するための最適なアルゴリズムは何ですか?
たとえば、Google は電子メール内の自宅/会社の住所を認識し、この住所への地図を提供します。
ページのテキストだけでなく、適切なマークアップがある場合は、上記の Beautiful Soup の提案を支持します。特に、アドレスタグは、最も簡単に達成できる成果を提供する必要があります。adr microformatも調べてください。最初の 2 つで十分な情報が得られないか、最初の 2 を探すのに必要なデータがない場合にのみ、正規表現にフォールバックします。
Google はこの問題に対して 2 段階のアプローチを取っていると思います (少なくとも私はそうします)。まず、かなり一般的な検索パターンを使用して、住所となる可能性のあるすべてのものを選択します。次に、地図データベースを使用してその文字列を検索し、一致するものがあるかどうかを確認します。もしそうなら、それはおそらくアドレスです。そうでなければ、おそらくそうではありません。コードで地図データベースを使用できれば、おそらく作業が楽になります。
住所の地理的位置を制限できない限り、文字列を解析するだけで住所として識別することはほとんど不可能だと思います。これは、世界中で使用されている住所形式が非常に多様であるためです。
国際アドレスも処理する必要がある場合は、頭痛の世界になります。国際住所の形式は驚くほど多様です。
正規表現は使用しないでください。既存の HTML パーサーを使用します。たとえば、Python ではBeautifulSoupを強くお勧めします。正規表現を使用して HTML 要素を解析したとしても、BeautifulSoup は取得します。
独自の正規表現でそれを行う場合、必要なデータを見つけることについて心配する必要があるだけでなく、無効な HTML などについて心配する必要があり、他の多くの非常に明白でない問題に遭遇する可能性があります..
あなたが求めていることは、完璧にしたいのであれば、本当に難しい問題です。ほとんどの場合、単純な正規表現でほぼ正しくなりますが、毎回正確に正しくなる正規表現を作成するのは非常に困難です。多くの奇妙なコーナーケースがあり、いくつかのケースでは明確な答えはありません。私が見たほとんどの Web サイトは、最も単純な URL 以外のすべてを処理するのに非常に悪い仕事をしていました。
正規表現ルートをたどりたい場合は、おそらくhttp://metacpan.org/pod/Regexp::Common::URI::httpのソースコードをチェックするのが最善の策です 。
繰り返しますが、正規表現でうまくいくはずです。
住所は多種多様であるため、文字列が住所かどうかは、"(number), (name) Street|Boulevard|Main" などの式でしか推測できません。
テキストで見つかったアドレスをマッピングして、それらがどのように機能するかを確認することを目的としたいくつかの Firefox 拡張機能を調べることを検討できます。