• 検索結果がありません。

Web ページの構造解析

ドキュメント内 WISDOM Web (ページ 89-95)

第 6 章 Web データ管理 67

6.4 Web 標準フォーマット

6.4.3 Web ページの構造解析

本章では,例えば発信者が出現しやすいヘッダ,フッタ領域,出現しにくいリンク領域や本文領域など を検出するためにWebページの構造解析を行う.構造解析の手順は,DOM木やレンダリング時の位置 情報,繰り返し構造などを利用してまずWebページを領域に分割し,次に各領域の領域名を判定する.

6.4.3.1 判定する領域の種類

判定する領域は大きく分けて基本ブロック7種類とサブブロック2種類の計9種類を考えた.各ブロッ ク名とその役割を以下に示す.

基本ブロック

footer ページ下部に位置するcopyrightやメニュー等をまとめた領域 header ページ上部に位置するページタイトルやメニュー等をまとめた領域 link 関連リンク等,リンクをまとめて記述してある領域

image 画像領域

maintext ページの主要コンテンツとなる領域 form 検索・コメント送信フォームなど unknown ページ中の小見出し等

サブブロック

profile ページ管理者の名前や生年月日等,プロフィールが記述されている領域 address 電話番号や住所等の連絡先がまとめられている領域

unknownは基本ブロックのfooter, header, link, image, maintext, formのいずれにも該当しないブ ロックに付与する.基本ブロックは入れ子構造を許さず,サブブロックは必ず基本ブロックのmaintext

またはfooter領域に含まれる.このような分類を行うのは基本ブロックがレイアウトを表すような領域

であるのに対して,サブブロックは基本ブロック中の文の性質を表すためである.

例えば,図6.6のページを構造解析すると図6.7のようにheader, form, link, unknown, maintextな どの領域に分割される.

6.4.3.2 レンダリング時の位置情報の取得とHTMLDOM木への変換

HTMLのソースから得られる位置とレンダリング時の位置は必ずしも一致しない.例えば,著作権表 示部分はページの下部にあることがほとんどであるが,HTMLのソースの末尾の方に記述されていると は限らない.図6.8に例を示す.このページは図6.8(a)のように3カラムからなるページであり,中央 カラムの最下部に著作権表示が記述されている.HTMLのソース(図6.8(b))を見ると,この部分は中央 カラムに対応する部分はソースの中央付近に記述されており,レンダリングの位置が分からないとこの部 分をフッタ領域と認識することは難しい.したがってまず,入力となるHTMLをレンダリングした際の 位置情報を取得する.

位置情報の付与にはwkhtmltopdf*2というツールを改良したものを用いた.wkhtmltopdfはレンダリ

*2http://code.google.com/p/wkhtmltopdf/

6.4 Web標準フォーマット 77

6.6 Webページとそのメタデータ

6.7 構造解析を行ったページの例

ングエンジンであるwebkitを利用してhtmlをpdfに変換するツールである.このツールを改良し,入 力のhtmlファイルの各タグに対して以下の4つの位置情報を取得する.

(1) ページ上端から領域上端までの距離





 

(a)レンダリング時の位置

























(b) HTMLのソース 6.8 3カラムからなるページ



 

 

 

 

 















6.9 位置情報と繰り返し構造を付与するページの例

(2) ページ左端から領域左端までの距離 (3) 領域の幅

(4) 領域の高さ

ここでの領域とは,位置情報を付与するタグがレンダリング時に描く領域を指す.図6.9に付与する位 置情報の例とその値を示す.図中の(1)〜(4)がそれぞれ上記の(1)〜(4)に対応する.

このように位置情報を付与したHTMLファイルをperlモジュールのHTML::

6.4 Web標準フォーマット 79

6.3 各タグに付与する繰り返し構造

付与する情報 フォーマット 対象ノード(ノード(b)) 自分を含む繰り返し構造 li + a -%4/5

繰り返し構造の番号

親ノード(ノード(a)) 自分以下の繰り返し構造 li + a

-TreeBuilderを用いてDOM(Document Object Model)木に変換する.以降ではこのDOM木に対して 操作を行う.

6.4.3.3 繰り返し構造の検出

次に,divやtable,ulなどのページ内の各HTMLタグについて,繰り返し構造を検出する.この繰 り返し構造は領域判定の際に“リンク領域はaタグを含む繰り返し構造をもつ”といった判定条件として 利用したり,各メタデータ抽出の際に“繰り返し構造の先頭及び末尾以外の文字列は候補として抽出しな い”といった制限に利用するなど,以降の処理において重要な手がかりとなる.繰り返し構造判定の際は

前節の図6.9における<li>と<a>のような複数のタグ,2以上の深さを持つような繰り返しも検出し

ている.

図6.9の例では<li><a><li><a>の繰り返しが2回存在するとも考えられるが,このような繰り返 しは考慮せず,もっとも細かい繰り返しである5回の<li><a>のみを認識する.

各タグに対して付与する情報を表6.3に示す.表中の“対象ノード”とは図6.9のliタグやaタグのよ うに繰り返し構造を構成するノード,“親ノード”とはulタグのように対象ノードの親となるノードのこ とである.表6.3に示すように対象ノードには“ li + a -%4/5”のような形式で付与する.“ % ”より前

に関して“ li ”,“ a ”は繰り返し構造を構成するタグを表す.また“+”は,直前のタグに対して直後の

タグの深さが1段階深くなることを表し,“ - ”は1段階浅くなることを表す.また“ % ”より後ろの数 値は

繰り返し番号 /繰り返し要素の総数

を表す.繰り返し番号は先頭要素を0としてそれ以降を順に1,2. . .とする.1つのタグに対してそのタ グを含む繰り返し構造が複数存在する場合は,それらを“ : ”でつなげたもの付与する.

また親ノードには対象ノードの“ % ”より前を付与する.親ノードに対象ノードに関する情報が複数 付与される場合も,それらを“ : ”でつなげたもの付与する.

6.4.3.4 領域分割

次にWebページを意味のあるブロックに分割する.DOM 木をbodyタグから順に下位ノードに向 かってたどりながら,自分以下のテキスト量がページ全体の閾値以下になるタグを見つけ,そこで分割 する(以降,このテキスト量が閾値以下となるタグをルートとする部分木をブロックと呼ぶ).閾値は ページ全体の文字数が6000文字未満のページではページ全体の文字数の50%,6000文字以上のページ では3000文字とした.文字数はimgタグの代替テキスト(alt属性の値)も含めて計数する.図6.10に HTMLをレンダリングしたときの位置(a)とそのDOM木(b)の例を示す.図6.10(a)中の数値(%)は ページ全体の文字数に対する各ブロックの文字数の割合を表す.図6.10のページのテキスト量が6000文



 





(a)レンダリング時の位置

 



(b)DOM 6.10 領域分割の例

字未満であるとする.領域分割を行う際にはまず,深さ1のノード以下のテキスト量をチェックする(ブ ロックA,B,C).ブロックA,Bはテキスト量が閾値以下(ページ全体の文字数に対して共に20%)で あるため,これ以上分割しない.しかし,ブロックCのテキスト量はページ全体の60%であるため,さ らに下位のノードに対してテキスト量のチェックを行う(ブロックC-1,C-2).これ以上分割するべきブ ロックが存在しなくなった時点で分割処理を終了する.この例ではA,B,C-1,C-2の4つのブロック に分割される.

ただし,例外として以下のようにブロックを判定する閾値に関係なくさらに分割したり,これ以上分割 しないといった条件を設ける.

■さらに分割する条件

ブロック以下にaddressタグを含む場合

addressタグはその文書に関する連絡先・問い合わせ先などを記述する際に用いられる.address

タグは著作権表示などとともにページのフッタ部分に記述されることが多い.このaddressタグ を含む部分がaタグを含む繰り返し構造をもつ部分とともに1つのブロックとなると,6.4.3.5節 で後述の領域判定の際にリンク領域と誤判定されてしまう恐れがあるため,addressタグを含むブ ロックはさらに分割する.

• レンダリング時のブロックの形がL字型をしている場合

図6.11にレンダリング時のブロックがL字型をしている例を示す.図6.11(b)の“contents1”を 含むtdタグのように「rowspan=“2”」と記述することで図6.11(a)のようにセルを水平方向に結 合することができる.L字型の領域は必ずしも一つの領域内容を表すとは限らない.例えばブロッ ク上部に位置する部分はヘッダ領域の特徴,左部に位置する部分はリンク領域の特徴などといった 具合である.そこで,このようなL字型をした領域はさらに分割する.図6.11の例では両図の点 線部分で分割する.その際,6.4.3.2節で付与した位置情報を用いる.contents1とcontents2を含 むtrタグにはrowspanを考慮しない位置情報が付与される(130px)が,その子要素であるtdタ グにはそれぞれcontents1,2に対応した位置情報が付与される(それぞれ800px,130px).した

6.4 Web標準フォーマット 81

 





 





(a)レンダリング時の位置





 































(b)HTMLのソース 6.11 領域がL字型をしているページの例

がって図6.11(b)のようにtr要素の高さよりも子要素であるtd要素の方が高さが大きくなる.こ

のように子要素の高さ(または幅)が親要素よりも大きくなる場合に分割する.

■これ以上分割しない条件

• ブロックの子要素が全てインライン要素である場合

HTMLタグは大きく“ブロック要素”と“インライン要素”の2つに分類することができる.ブ ロック要素は見出し,段落など文書を構成する基本要素となるものであり,インライン要素はブ ロック要素に対して文中の一部にのみ意味づけや書式設定を行うものである.ブロック要素の中に ブロック要素やインライン要素を置くことはできるが,インライン要素の中にブロック要素を置く ことはできない.ブロック要素に以下の42個のものを指定し,これ以外のものをすべてインライ ン要素とする.

address, area, blockquote, caption, center, dd, dir, div, dl, dt, fieldset, form, h1, h2, h3, h4, h5, h6, hr, isindex, li, listing, map, menu, multicol, noframes, noscript, ol, option, p, plaintext, pre, select, table, tbody, td, tfoot, th, thead, tr, ul, xmp

あるノードの子ノードが全てインライン要素の場合はそれ以上分割処理を行わない.

基本ブロック

footer block内に“copyright”“HOME”等特定の文字列を含む block終了がページ末尾から100文字以内

block開始がページ末尾から300文字以内

(ページ先頭からblock上端までの距離) / (bodyタグの高さ)0.6 (以上全てを満たす) header index.*への内部リンクをもつ

block開始がページ先頭から100文字以内 block終了がページ先頭から300文字以内

(ページ先頭からblock下端までの距離) / (bodyタグの高さ)≤0.4 (以上全てを満たす) link 自分以下の66%以上のblockaタグを含む繰り返し構造をもつ image 自分以下の80%以上のblockの葉ノードがimgタグ

maintext テキストの長さが200文字以上

句読点または以外の助詞の全形態素に占める割合が5%以上 (以上いずれか満たす) form block以下にformタグを含む

unknown 上記以外の領域 サブブロック

profile プロフィールユーザ名名前など特定の文字列を 自分以下のblock2個以上含む

address 住所連絡先“TEL”など特定の文字列を自分以下の block2個以上含む

6.4.3.5 領域判定

最後に6.4.3.4節で分割した各ブロックに対してその領域名を判定する.

各領域の判定アルゴリズムを表6.4に示す.基本ブロックに属する領域は表6.4の上から順に条件に適 合するかしないかを判定する.すべてのブロックに基本ブロックの領域名が割り当てられたのち,サブブ ロックに属する領域の判断を行う.ただし,図6.12のようにインライン要素が連続する場合はそれを一 つの領域にまとめる.この例の場合は6.4.3.4節のアルゴリズムで分割された

. . .-a-br-br-br-br-b-. . .

の部分をmaintext領域としてまとめる.

図6.13,6.14のwebページに対して領域判定を行った結果を図6.15,6.16に示す.

ドキュメント内 WISDOM Web (ページ 89-95)