構文解析とは、ページの文意を考慮したプログラム処理を可能にするため、文法に基づいて文章を解析することです。また構文解析の前に、そのWebページの記述に使われている文字コードを確定させる作業も行います。

HTML文法に基づいて文章構造を理解

構文解析とは、文法に基づいて文章を解析することです。構文解析によって、個々の語句がどのような意味を持ち、どのようなつながりをもっているのかについて指標化できるため、コンピュータにはわかりづらい文章の「文意」をプログラム処理しやすい状態にすることができます。

Webページに対する構文解析では、HTMLパーサがHTML文法に基づいてページの文章構造を解析します。HTMLはテキストに意味付けを行うマークアップ言語ですので、ページを記述するHTMLソースの各要素が持つ意味を解析することで、ページ内の個々のテキストが持つ意味情報をとらえることができます。

例えば、h要素で記述されるテキストは見出し、p要素で記述されるテキストは段落文章というかたちで解析して行くことで、ページ全体のテキストに与えられた意味付けを理解することができます。

構文解析には正確なHTMLコーディングが必要

HTMLパーサーは、ビジュアルなWebブラウザでの表示とは異なり、HTMLの文法だけを元に文書内の内容を解析します。そのため、インデクサに正しく情報を収集させるためには、ビジュアルなWebブラウザでの「正常表示」だけではなく、各要素の持つ役割に適した要素を用いた、間違いのないコーディングが重要です。

例えば、特定の要素に囲まれる文字をスタイルシートで大きく見せたり色を変えたりしても、HTMLパーサーはそこにリンクされる情報が特別な意味を持つものとは解釈しません。また、HTMLの要素を誤って使用したり、文法上のエラーがある場合は、HTMLパーサーは正しく内容を解釈することができません。エラーの重大性によっては、インデクサの処理に不具合を生じることもありますので注意が必要です。

メタデータからの情報の取得

メタデータとは、生データに対して付与する、データの素性を定義する情報です。body要素内に記述され、ビジュアルブラウザで視覚的に表現できる情報以外にも、構文解析で使用する情報は含まれています。

例えば、紙の住所録の最上段における「住所」「氏名」「電話番号」という情報は、その下に書かれる個人のデータに対するメタデータです。人間は住所録を見れば一目で「住所」「氏名」「電話番号」であることを類推することができますが、そのような処理能力を持たないコンピュータにとって、メタデータはデータを分類処理する上で重要なものとなります。

メタデータをふまえてWebページを解析することで、ページの内容をより正確に反映させたデータベースを作ることが可能となります。HTMLの文法においても、内容に応じた適切なメタデータを施してWebページを作成するよう勧告されており、そのための方法が用意されています。

HTML文書のメタデータ

HTMLの各要素に付与される属性値は、その要素に対するメタデータとして機能するものです。HTMLは自然文のドキュメントを、Webページとして扱いやすいようマークを付けて定義する言語(マークアップ言語)です。そのため、ある意味、HTMLそのものが、ドキュメントの文字情報に対するメタデータといえるかもしれません。

head要素に記述されるメタデータの例
文書の著者を表すメタ情報
<meta name=”author” content=”USERNAME” />
文書のキーワードを表すメタ情報
<meta name=”keywords” content=”キーワード” />
文書の要約文を表すメタ情報
<meta name=”description” content=”要約文” />
文書の文字コードやファイルタイプを表すメタ情報
<meta http-equiv=”Content-Type” content=”text/html; charset=Shift_JIS” />
body要素内に記述されるメタデータの例
title属性
要素に補助的な説明を加えます。
cite属性
引用要素(blockquote, q)およびins/del要素において、引用元や変更の理由を示すドキュメントのURIを記述します。
lang属性
その要素を記述している自然言語の種類を示します。

文字情報を扱う下処理としての文字コード処理

プログラムが文字情報を扱うためには、電子ファイルで扱うことのできる様々な文字コードの中で、そのページの記述に使われているものを確定しておく必要があります。文字コードは言語ごとに異なる上、1つの言語にも様々な規格があります。

例えば、日本語が扱える文字コードとしては、JIS、Shift_JIS、EUC(extensive unix code)、UTF-8(ユニコード)の4種類の規格があります。それらの文字コードを確定する処理をページ解析の前に行っておくことで、その後の日本語の処理作業を確実に進めることができます。

meta要素による文字コード指定

HTMLでは、head要素内のmeta要素で文字コードを指定することができます。インデクサはこの情報を手がかりに、それ以降記述される文書の文字コードを特定します。JIS、Shift_JIS、EUC_JP(extensive unix code)、UTF-8(ユニコード)の指定方法は、それぞれ次のようになります。

JISの指定
<meta http-equiv=”Content-Type” content=”text/html;charset=ISO-2022-JP” />
Shift_JISの指定
<meta http-equiv=”Content-Type” content=”text/html;charset=Shift_JIS” />
EUC_JPの指定
<meta http-equiv=”Content-Type” content=”text/html;charset=EUC-JP” />
UTF-8の指定
<meta http-equiv=”Content-Type” content=”text/html;charset=UTF-8″ />

文字コードの自動認識処理

インデグサによっては、meta要素によって文字コードが指定されていなくても、文字コードを自動的に認識する場合があります。例えば、日本語では、それぞれの各文字コード系(JIS、Shift_JIS、EUC_JP)で使用する符号の領域に重複しない部分があることを利用して、文字コードの自動認識を行うことが可能です。

また .htaccess や httpd.conf にAddType指示子を設定し、サーバサイドで出力する httpヘッダ情報にあらかじめ規定の値を与えておくことで、クローラーやインデクサを含むUAに文字コードを伝えることもできます。例としては、次の1行を .htaccess や httpd.conf に加えます。下は拡張子.htmlのファイルに対するリクエストには文字コード Shift_JIS で応答する記述です。

AddType "text/html; charset=Shift_JIS" .html

ただし、文字コードの自動認識は、ドキュメントの状態によっては正しく行えない場合もあります。やはりmeta要素による文字コード指定を確実に行っておくことが重要です。