(57)【要約】【課題】Ｗｅｂページから適切に抽出すること。【解決手段】抽出装置は、Ｗｅｂページからデータを抽出するための抽出ルールと、Ｗｅｂページの統一資源位置指定子に基づいて抽出ルールの適用対象となるＷｅｂページを特定する特定ルールとを対応付けて記憶する。また、抽出装置は、抽出対象となるＷｅｂページが入力されると、入力されたＷｅｂページに紐付けられた統一資源位置指定子が特定される特定ルールを抽出ルール記憶部から選択し、選択した特定ルールに対応付けられた抽出ルールを選択する。そして、抽出装置は、選択部により選択された抽出ルールに基づいて抽出処理を実行することで、抽出対象のＷｅｂページからデータを抽出する。【選択図】図１
2012059212.tif 000002
【特許請求の範囲】
【請求項１】
Ｗｅｂページからデータを抽出するための抽出ルールと、Ｗｅｂページの統一資源位置指定子に基づいて当該抽出ルールの適用対象となるＷｅｂページを特定する特定ルールとを対応付けて記憶する抽出ルール記憶部と、
抽出対象となるＷｅｂページが入力されると、入力された当該Ｗｅｂページに紐付けられた統一資源位置指定子が特定される特定ルールを前記抽出ルール記憶部から選択し、選択した当該特定ルールに対応付けられた抽出ルールを選択する選択部と、
前記選択部により選択された抽出ルールに基づいて抽出処理を実行することで、抽出対象のＷｅｂページからデータを抽出する抽出部と
を備えたことを特徴とする抽出装置。
【請求項２】
ツリー構造を有する前記Ｗｅｂページと、当該Ｗｅｂページの統一資源位置指定子とを対応付けて記憶するＷｅｂページ記憶部と、
前記Ｗｅｂページ記憶部に記憶されたＷｅｂページ各々のツリー構造を比較することで、同一の下位構造を含むツリー構造を有するＷｅｂページ群を取得し、取得したＷｅｂページ群に含まれるＷｅｂページ各々のツリー構造に共通する部分からデータを抽出する抽出ルールを作成する抽出ルール作成部と、
前記抽出ルール作成部による前記抽出ルールの作成に用いられたＷｅｂページ群に含まれるＷｅｂページ各々に対応付けられた前記統一資源位置指定子を前記Ｗｅｂページ記憶部から取得し、取得した当該統一資源位置指定子各々に基づいて前記特定ルールを作成する特定ルール作成部と、
前記抽出ルール作成部により作成された抽出ルールと、前記特定ルール作成部により作成された特定ルールとを対応付けて、前記抽出ルール記憶部に格納する格納部と
を更に備えたことを特徴とする請求項１に記載の抽出装置。
【請求項３】
前記Ｗｅｂページ記憶部に既に記憶されているＷｅｂページのツリー構造と、新たに取得した当該Ｗｅｂページのツリー構造とを比較することで、当該Ｗｅｂページのツリー構造に変化があるか否かを検出する検出部を更に備え、
前記抽出ルール作成部は、前記検出部により変化が検出されると、抽出ルールを再作成することを特徴とする請求項２に記載の抽出装置。
【請求項４】
コンピュータが、
Ｗｅｂページからデータを抽出するための抽出ルールと、Ｗｅｂページの統一資源位置指定子に基づいて当該抽出ルールの適用対象となるＷｅｂページを特定する特定ルールとを対応付けて記憶する抽出ルール記憶部から、抽出対象となるＷｅｂページが入力されると、入力された当該Ｗｅｂページに紐付けられた統一資源位置指定子が特定される特定ルールを選択し、選択した当該特定ルールに対応付けられた抽出ルールを選択する選択工程と、
前記選択工程により選択された抽出ルールに基づいて抽出処理を実行することで、抽出対象のＷｅｂページからデータを抽出する抽出工程と
を含んだことを特徴とする抽出方法。
【請求項５】
ツリー構造を有する前記Ｗｅｂページと、当該Ｗｅｂページの統一資源位置指定子とを対応付けて記憶するＷｅｂページ記憶部に記憶されたＷｅｂページ各々のツリー構造を比較することで、同一の下位構造を含むツリー構造を有するＷｅｂページ群を取得し、取得したＷｅｂページ群に含まれるＷｅｂページ各々のツリー構造に共通する部分からデータを抽出する抽出ルールを作成する抽出ルール作成工程と、
前記抽出ルール作成工程による前記抽出ルールの作成に用いられたＷｅｂページ群に含まれる当該Ｗｅｂページ各々に対応付けられた前記統一資源位置指定子を前記Ｗｅｂページ記憶部から取得し、取得した当該統一資源位置指定子各々に基づいて前記特定ルールを作成する特定ルール作成工程と、
前記抽出ルール作成工程により作成された抽出ルールと、前記特定ルール作成工程により作成された特定ルールとを対応付けて、前記抽出ルール記憶部に格納する格納工程と
を更に含んだことを特徴とする請求項４に記載の抽出方法。
【請求項６】
前記Ｗｅｂページ記憶部に既に記憶されているＷｅｂページのツリー構造と、新たに取得した当該Ｗｅｂページのツリー構造とを比較することで、当該Ｗｅｂページのツリー構造に変化があるか否かを検出する検出工程を更に含み、
前記抽出ルール作成工程は、前記検出工程により変化が検出されると、抽出ルールを再作成することを特徴とする請求項５に記載の抽出方法。
【請求項７】
請求項１〜３のいずれか１つに記載の抽出装置としてコンピュータを機能させるためのプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、抽出装置、抽出方法及び抽出プログラムに関する。
【背景技術】
【０００２】
従来、Ｗｅｂページからデータを抽出する抽出手法がある。抽出手法は、例えば、ヘッダやフッタ、サイトナビゲーションなどをＷｅｂページから除外してＷｅｂページのページ内容を表す部分を選択的に抽出する場合や、ＥＣ（e-commerce）サイトのＷｅｂ閲覧ログから個人情報を含まない部分を選択的に抽出する場合、ＥＣサイトの商品情報ページから商品名や価格などを抽出する場合などに用いられる。
【０００３】
例えば、Ｗｅｂページを構造木に変換し、抽出対象とする任意の部分を構造木内の位置として保存する抽出システムがある。抽出システムは、抽出対象とするデータを抽出する際に、抽出対象となるＷｅｂページを構文木に変換し、保存しておいた木構造内の位置に対応する部分をＷｅｂページの構文木から特定し、特定した部分からデータを抽出する。また、Ｗｅｂページから必要な部分を手動で経験則にてデータを抽出する手法もある。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開２００４−３１８５０５号公報
【非特許文献】
【０００５】
【非特許文献１】Web Interface Definition Language（WIDL）、［online］、［平成２２年７月７日検索］、インターネット（ＵＲＬ：http://www.w3.org/TR/NOTE-widl）
【非特許文献２】Luca  Iocchi、The  Web-OEM  approach  to  Web  information  extraction、Journal  of  Network  and  Computer  Applications、Vol.22、pp.259-269  （1999）
【発明の概要】
【発明が解決しようとする課題】
【０００６】
しかしながら、上述した技術では、Ｗｅｂページから適切にデータを抽出できないという問題がある。例えば、上述した抽出システムでは、複数の異なるＷｅｂページから抽出する場合、構造の異なるページからはデータを抽出できない。また、例えば、上述した手動で経験則にて抽出する手法では、手間がかかる。
【０００７】
開示の技術は、上述に鑑みてなされたものであって、Ｗｅｂページから適切にデータを抽出可能である抽出装置、抽出方法及び抽出プログラムを提供することを目的とする。
【課題を解決するための手段】
【０００８】
開示する抽出装置は、一つの態様において、  Ｗｅｂページからデータを抽出するための抽出ルールと、Ｗｅｂページの統一資源位置指定子に基づいて当該抽出ルールの適用対象となるＷｅｂページを特定する特定ルールとを対応付けて記憶する抽出ルール記憶部を有する。また、抽出装置は、抽出対象となるＷｅｂページが入力されると、入力された当該Ｗｅｂページに紐付けられた統一資源位置指定子が特定される特定ルールを前記抽出ルール記憶部から選択し、選択した当該特定ルールに対応付けられた抽出ルールを選択する選択部を有する。また、抽出装置は、前記選択部により選択された抽出ルールに基づいて抽出処理を実行することで、抽出対象のＷｅｂページからデータを抽出する抽出部を有する。
【発明の効果】
【０００９】
開示する抽出装置の一つの態様によれば、Ｗｅｂページから適切にデータを抽出可能であるという効果を奏する。
【図面の簡単な説明】
【００１０】
【図１】図１は、実施例１に係る抽出装置の構成の一例を示すブロック図である。
【図２】図２は、実施例１における抽出ルール記憶部に記憶された情報の一例を示す図である。
【図３】図３は、実施例１におけるデータ抽出部による抽出処理の流れの一例を示すフローチャートである。
【図４】図４は、実施例１におけるルール作成部によるルール作成処理の流れの一例を示すフローチャートである。
【図５】図５は、実施例２に係る抽出装置の構成の一例を示すブロック図である。
【図６】図６は、実施例２におけるＷｅｂページデータ記憶部により記憶された情報の一例を示す図である。
【図７】図７は、実施例２におけるＸＳＬデータ記憶部により記憶された情報の一例を示す図である。
【図８】図８は、実施例２におけるＸＳＬデータの一例を示す図である。
【図９】図９は、実施例２におけるページソースの具体的な一例を示す図である。
【図１０】図１０は、実施例２におけるページソースの具体的な一例を示す図である。
【図１１】図１１は、実施例２におけるＸＳＬ選択ルールデータ記憶部に記憶された情報の一例を示す図である。
【図１２】図１２は、実施例２における抽出済データ記憶部に記憶された情報の一例を示す図である。
【図１３】図１３は、実施例２における構造変化データ記憶部により記憶された情報の一例を示す図である。
【図１４】図１４は、実施例２におけるデータ抽出部について示すブロック図である。
【図１５】図１５は、実施例２におけるＸＳＬ選択データメモリに記憶された情報の一例を示す図である。
【図１６】図１６は、実施例２におけるルール作成部の構成の一例を示すブロック図である。
【図１７】図１７は、実施例２におけるＤＯＭツリーデータメモリに記憶された情報の一例を示す図である。
【図１８】図１８は、実施例２におけるページソースの一例を示す図である。
【図１９】図１９は、実施例２における部分木ハッシュデータメモリに記憶された情報の一例を示す図である。
【図２０】図２０は、実施例２における共通ツリーデータメモリに記憶された情報の一例を示す図である。
【図２１】図２１は、実施例２におけるＸＳＬ生成部によるＸＳＬコード生成について示す図である。
【図２２】図２２は、実施例２における構造変化検出部の構成の一例を示すブロック図である。
【図２３】図２３は、実施例２におけるＸＳＬ選択部による処理の詳細な流れの一例を示す図である。
【図２４】図２４は、実施例２におけるＸＳＬＴ処理部による処理の詳細な流れの一例を示す図である。
【図２５】図２５は、実施例２におけるツリー変換部による処理の詳細な流れの一例を示す図である。
【図２６】図２６は、実施例２における部分木ハッシュ生成部による処理の詳細な流れの一例を示す図である。
【図２７】図２７は、実施例２における部分木ハッシュ生成部によるハッシュ化処理の詳細な流れの一例を示すフローチャートである。
【図２８】図２８は、実施例２における共通ツリー抽出部による処理の詳細な流れの一例を示す図である。
【図２９】図２９は、実施例２におけるＸＳＬ生成部による処理の詳細な流れの一例を示す図である。
【図３０】図３０は、実施例２におけるＸＳＬ生成部によるルール出力処理の詳細な流れの一例を示す図である。
【図３１】図３１は、実施例２におけるＸＳＬＴエラー検出部による処理の詳細な流れの一例を示す図である。
【図３２】図３２は、実施例２におけるＸＳＬＴエラー検出部によるＸＳＬ検索処理の詳細な流れの一例を示すフローチャートである。
【図３３】図３３は、抽出プログラムによる情報処理がコンピュータを用いて具体的に実現されることを示す図である。
【発明を実施するための形態】
【００１１】
以下に、開示する抽出装置、抽出方法及び抽出プログラムの実施例について、図面に基づいて詳細に説明する。なお、本実施例により開示する発明が限定されるものではない。各実施例は、処理内容を矛盾させない範囲で適宜組み合わせることが可能である。
【実施例１】
【００１２】
［実施例１に係る抽出装置の構成］
図１を用いて、実施例１に係る抽出装置１００の構成の一例を示す。図１は、実施例１に係る抽出装置の構成の一例を示すブロック図である。図１に示す例では、抽出装置１００は、抽出ルール記憶部１１１と、データ抽出部１２０と、ルール作成部１３０と、構造変化検出部１４０とを有する。
【００１３】
抽出ルール記憶部１１１は、Ｗｅｂページからデータを抽出するための抽出ルールと、Ｗｅｂページの統一資源位置指定子に基づいて抽出ルールの適用対象となるＷｅｂページを特定する特定ルールとを対応付けて記憶する。統一資源位置指定子は「ＵＲＬ（Uniform  Resource  Locator）」とも称される。なお、以下では、統一資源位置指定子をＵＲＬと記載するが、統一資源位置指定子は、インターネット上に存在する文書や画像などの資源を特定できれば良く、任意の情報であって良い。
【００１４】
図２は、実施例１における抽出ルール記憶部に記憶された情報の一例を示す図である。図２に示すように、抽出ルール記憶部１１１は、特定ルールと抽出ルールとを対応付けて記憶する。図２に示す例では、抽出ルール記憶部１１１は、特定ルール「http://aaa\.com/show_cart.*」と抽出ルール「/html[1]/body[1]/table[1]/tr[1]/td[2]」とを対応付けて記憶する。図２に示す例では、特定ルールの「.*」は、前方一致を示す正規表現である。また、図２の抽出ルールでは、ツリー構造を有するＷｅｂページのうちデータを抽出する部分を特定する情報としてＸｐａｔｈを用いる場合を例に示した。ただし、本発明はこれに限定されるものではなく、Ｘｐａｔｈ以外の任意の手法を用いて、ツリー構造を有するＷｅｂページのうちデータを抽出する部分を特定しても良い。
【００１５】
すなわち、図２に示す例では、抽出ルール記憶部１１１は、ＵＲＬの先頭部分が「http://aaa\.com/show_cart」となるＷｅｂページを特定する特定ルールと、「/html[1]/body[1]/table[1]/tr[1]/td[2]」により特定される部分からデータを抽出することを示す抽出ルールとを対応付けて記憶する。
【００１６】
図１の説明に戻る。データ抽出部１２０は、抽出ルール選択部１２１と、抽出部１２２とを有する。抽出ルール選択部１２１は、抽出対象となるＷｅｂページが入力されると、入力されたＷｅｂページに紐付けられたＵＲＬが特定される特定ルールを抽出ルール記憶部１１１から選択し、選択した特定ルールに対応付けられた抽出ルールを選択する。
【００１７】
例えば、抽出ルール選択部１２１は、抽出ルール記憶部１１１から特定ルールを１つ読み出し、読み出した特定ルールにより抽出対象となるＷｅｂページのＵＲＬが特定されるか否かを判定する。ここで、抽出ルール選択部１２１は、特定されないと判定した場合には、別の特定ルールを読み出し、再度判定を行う。そして、抽出ルール選択部１２１は、特定されると判定するまで処理を繰り返すことで、抽出対象となるＷｅｂページのＵＲＬが特定される特定ルールを選択する。
【００１８】
また、例えば、抽出ルール選択部１２１は、抽出ルール記憶部１１１に記憶された抽出ルールのうち、選択した特定ルールに対応付けられた抽出ルールを選択し、選択した抽出ルールを抽出ルール記憶部１１１から読み出す。抽出ルール選択部１２１が特定ルール「http://aaa\.com/show_cart.*」を選択した場合を用いて説明する。この場合、抽出ルール選択部１２１は、特定ルール「http://aaa\.com/show_cart.*」に対応付けられた抽出ルール「/html[1]/body[1]/table[1]/tr[1]/td[2]」を抽出ルール記憶部１１１から選択する。
【００１９】
抽出部１２２は、抽出ルール選択部１２１により選択された抽出ルールに基づいて抽出処理を実行することで、抽出対象のＷｅｂページからデータを抽出する。例えば、抽出部１２２は、抽出ルール「/html[1]/body[1]/table[1]/tr[1]/td[2]」を用いて抽出処理を実行することで、抽出対象のＷｅｂページからデータを抽出する。より詳細な一例をあげて説明すると、抽出部１２２は、抽出対象となるＷｅｂページのツリー構造のうち、「/html[1]/body[1]/table[1]/tr[1]/td[2]」により特定される部分を抽出する。
【００２０】
ルール作成部１３０は、Ｗｅｂページのツリー構造を比較することで、ツリー構造が類似するＷｅｂページ群を取得し、取得したＷｅｂページ群に含まれるＷｅｂページ各々のツリー構造に共通する部分からデータを抽出する抽出ルールを作成する。また、ルール作成部１３０は、Ｗｅｂページ群に含まれるＷｅｂページ各々に対応付けられたＵＲＬに基づいて、作成した抽出ルールの適用対象を特定する特定ルールを作成する。例えば、ルール作成部１３０は、ＵＲＬ各々に共通する部分を識別し、識別した部分を有するＵＲＬを特定する特定ルールを作成する。そして、ルール作成部１３０は、抽出ルールと特定ルールとを対応付けて抽出ルール記憶部１１１に格納する。
【００２１】
例えば、取得したＷｅｂページ群に含まれるＷｅｂページ各々のツリー構造に共通する部分のＸｐａｔｈが、「/html[1]/body[1]/table[1]/tr[1]/td[2]」である場合を用いて説明する。この場合、ルール作成部１３０は、任意のタイミングとなると、Ｘｐａｔｈ「/html[1]/body[1]/table[1]/tr[1]/td[2]」を識別し、識別したＸｐａｔｈ「/html[1]/body[1]/table[1]/tr[1]/td[2]」を抽出ルールとする。言い換えると、この場合、ルール作成部１３０は、抽出ルールとしてＸｐａｔｈを作成する。
【００２２】
また、例えば、Ｗｅｂページ群に含まれるＷｅｂページ各々に対応付けられたＵＲＬの先頭部分が「http://aaa\.com/show_cart」で共通する場合を用いて説明する。この場合、ルール作成部１３０は、ＵＲＬの先頭部分が「http://aaa\.com/show_cart」となるＷｅｂページを特定する特定ルール「http://aaa\.com/show_cart.*」を作成する。
【００２３】
また、例えば、ルール作成部１３０は、抽出ルール「/html[1]/body[1]/table[1]/tr[1]/td[2]」と特定ルール「http://aaa\.com/show_cart.*」とを対応付けて、抽出ルール記憶部１１１に格納する。
【００２４】
ここで、ルール作成部１３０は、例えば、定期的にルールを作成し、あるいは、後述する構造変化検出部１４０により変化が検出されるごとにルールを再度作成する。
【００２５】
構造変化検出部１４０は、Ｗｅｂページのツリー構造が過去のＷｅｂページのツリー構造と比較して変化したか否かを検出する。例えば、ツリー構造が変化した場合には、変化前のＷｅｂページに対して機能していた抽出ルールにより抽出処理を実行するとエラーが発生することがあるのを踏まえ、構造変化検出部１４０は、抽出ルールを用いて抽出処理を実行し、エラーが発生した場合に変化したと検出する。なお、以下では、構造変化検出部１４０が、抽出ルールを用いて抽出処理を実行した際のエラーの有無に基づいて変化を検出する場合を用いて説明するが、本発明はこれに限定されるものではない。例えば、構造変化検出部１４０は、過去のＷｅｂページのツリー構造を保存しておき、現在のＷｅｂページのツリー構造と比較することで変化を検出しても良く、任意の手法を用いて良い。
【００２６】
［実施例１におけるデータ抽出部による抽出処理の流れ］
実施例１におけるデータ抽出部１２０による抽出処理の流れの一例を示す。図３は、実施例１におけるデータ抽出部による抽出処理の流れの一例を示すフローチャートである。データ抽出部１２０は、以下に説明する一連の処理を、抽出対象となるＷｅｂページすべてについて実行するまで繰り返す。
【００２７】
図３に示すように、抽出ルール選択部１２１は、抽出対象となるＷｅｂページがあると（ステップＳ１０１肯定）、抽出対象となるＷｅｂページに紐付けられたＵＲＬが特定される特定ルールを抽出ルール記憶部１１１から選択する（ステップＳ１０２）。図２に示す例では、抽出ルール選択部１２１は、ＵＲＬの先頭部分が「http://aaa\.com/show_cart」と一致する場合には、特定ルール「http://aaa\.com/show_cart」を選択する。
【００２８】
そして、抽出ルール選択部１２１は、選択した特定ルールに対応付けられた抽出ルールを選択する（ステップＳ１０３）。例えば、抽出ルール選択部１２１は、特定ルール「http://aaa\.com/show_cart.*」に対応付けられた抽出ルール「/html[1]/body[1]/table[1]/tr[1]/td[2]」を抽出ルール記憶部１１１から選択する。
【００２９】
そして、抽出部１２２は、抽出ルール選択部１２１により選択された抽出ルールに基づいて抽出処理を実行する（ステップＳ１０４）。例えば、抽出部１２２は、抽出対象となるＷｅｂページのツリー構造のうち、「/html[1]/body[1]/table[1]/tr[1]/td[2]」により特定される部分を抽出する。
【００３０】
［実施例１におけるルール作成部によるルール作成処理の流れ］
実施例１におけるルール作成部１３０によるルール作成処理の流れの一例を示す。図４は、実施例１におけるルール作成部によるルール作成処理の流れの一例を示すフローチャートである。
【００３１】
図４に示すように、任意のタイミングとなると（ステップＳ２０１肯定）、ツリー構造が類似するＷｅｂページ群を取得し（ステップＳ２０２）、共通する部分に基づいて抽出ルールを作成する（ステップＳ２０３）。例えば、ツリー構造のうち「/html[1]/body[1]/table[1]/tr[1]/td[2]」が共通する場合には、ルール作成部１３０は、「/html[1]/body[1]/table[1]/tr[1]/td[2]」により特定される部分からデータを抽出する抽出ルールを作成する。
【００３２】
そして、ルール作成部１３０は、データ抽出ルールを作成する際に用いたＷｅｂページ群のＵＲＬ各々に基づいて特定ルールを作成する（ステップＳ２０４）。例えば、ＵＲＬの先頭部分が「http://aaa\.com/show_cart」で共通する場合には、ルール作成部１３０は、ＵＲＬの先頭部分が「http://aaa\.com/show_cart」となるＷｅｂページを特定する特定ルール「http://aaa\.com/show_cart.*」を作成する。
【００３３】
そして、ルール作成部１３０は、抽出ルールと特定ルールとを対応付けて抽出ルール記憶部１１１に格納する（ステップＳ２０５）。例えば、ルール作成部１３０は、抽出ルール「/html[1]/body[1]/table[1]/tr[1]/td[2]」と特定ルール「http://aaa\.com/show_cart.*」とを対応付けて抽出ルール記憶部１１１に格納する。
【００３４】
［実施例１の効果］
上述したように、実施例１によれば、抽出装置１００は、抽出ルール記憶部１１１を有し、抽出対象となるＷｅｂページが入力されると、入力されたＷｅｂページに紐付けられたＵＲＬが特定される特定ルールを抽出ルール記憶部１１１から選択し、選択した特定ルールに対応付けられた抽出ルールを選択する。そして、抽出装置１００は、選択した抽出ルールに基づいて抽出処理を実行することで、抽出対象のＷｅｂページからデータを抽出する。この結果、Ｗｅｂページに適した抽出ルールを用いて抽出処理を実行でき、Ｗｅｂページから適切にデータを抽出可能である。
【００３５】
また、実施例１によれば、抽出装置１００は、Ｗｅｂページ各々のツリー構造を比較することで、ツリー構造が類似するＷｅｂページ群を取得し、取得したＷｅｂページ群に含まれるＷｅｂページ各々のツリー構造に共通する部分からデータを抽出する抽出ルールを作成する。また、抽出装置１００は、抽出ルールが作成されるＷｅｂページ群に含まれるＷｅｂページ各々のＵＲＬに基づいて特定ルールを作成する。そして、抽出装置１００は、抽出ルールと特定ルールとを対応付けて抽出ルール記憶部１１１に格納する。この結果、抽出ルールを自動的に作成でき、ルールを作成する手間を省くことが可能である。
【００３６】
また、実施例１によれば、抽出装置１００は、Ｗｅｂページのツリー構造が過去のＷｅｂページのツリー構造と比較して変化したか否かを検出するので、Ｗｅｂページの構造が変化したことを簡単に把握可能である。この結果、例えば、すなわち、実施例１によれば、自動的にＷｅｂページ抽出に使用する抽出ルールや特定ルールを生成し、生成した抽出ルールや特定ルールを適用してＷｅｂページの抽出処理を実施し、更に、Ｗｅｂページの構造変化を検出した場合は、手動又は自動にて抽出ルールや特定ルールを再作成する。この結果、Ｗｅｂページのツリー構造が変化する環境下においても、適切にデータを抽出可能である。また、例えば、同一のＷｅｂページから抽出する場合において、Ｗｅｂページの構造が更新されたとしても、データを抽出可能である。
【実施例２】
【００３７】
［実施例２に係る抽出装置の構成］
実施例２に係る抽出装置２００について示す。図５は、実施例２に係る抽出装置の構成の一例を示すブロック図である。図５に示す例では、抽出装置２００は、Ｗｅｂページデータ記憶部２１１と、ＸＳＬデータ記憶部２１２と、ＸＳＬ選択ルールデータ記憶部２１３と、抽出済データ記憶部２１４と、構造変化データ記憶部２１５とを有する。また、抽出装置２００は、データ抽出部３００と、ルール作成部４００と、構造変化検出部５００とを有する。
【００３８】
Ｗｅｂページデータ記憶部２１１は、データ抽出部３００と、ルール作成部４００と、構造変化検出部５００と接続される。Ｗｅｂページデータ記憶部２１１は、例えば、ＲＡＭ（Random  Access  Memory）や、フラッシュメモリ（Flash  Memory）などの半導体メモリ素子、又は、ハードディスクや光ディスクなどの記憶装置が該当する。
【００３９】
Ｗｅｂページデータ記憶部２１１は、ツリー構造を有するＷｅｂページと、ＷｅｂページのＵＲＬとを対応付けて記憶する。図６は、実施例２におけるＷｅｂページデータ記憶部により記憶された情報の一例を示す図である。図６に示す例では、Ｗｅｂページデータ記憶部２１１は、Ｗｅｂページを一意に識別する「ＷｅｂページＩＤ」と、Ｗｅｂページの「ＵＲＬ」と、Ｗｅｂページの「ページソース」とを含むレコードを記憶する。
【００４０】
図６に示す例では、Ｗｅｂページデータ記憶部２１１は、ＷｅｂページＩＤ「１」とＵＲＬ「http://aaa.com/item_detail?code=a001」とページソース「<html><head...〜</htm>」とを含むレコードを記憶する。すなわち、Ｗｅｂページデータ記憶部２１１は、ＷｅｂページＩＤ「１」により識別されるＷｅｂページのＵＲＬが「http://aaa.com/item_detail?code=a001」であることを示すレコードであって、Ｗｅｂページのページソースが「<html><head ...〜</htm>」であることを示すレコードを記憶する。
【００４１】
なお、Ｗｅｂページデータ記憶部２１１に記憶されるレコードは、例えば、抽出装置２００の管理者によって格納され、抽出装置２００が適宜自動的にクロールすることで得られたレコードが抽出装置２００自身によって格納される。
【００４２】
ＸＳＬデータ記憶部２１２は、データ抽出部３００、ルール作成部４００及び構造変化検出部５００と接続される。ＸＳＬデータ記憶部２１２は、例えば、ＲＡＭや、フラッシュメモリなどの半導体メモリ素子、又は、ハードディスクや光ディスクなどの記憶装置が該当する。
【００４３】
ＸＳＬデータ記憶部２１２は、Ｗｅｂページからデータを抽出するための抽出ルールを記憶する。また、ＸＳＬデータ記憶部２１２は、抽出ルールとして、Ｗｅｂページのツリー構造により一意に決定されるルールを複数含む抽出ルール群を記憶する。
【００４４】
図７は、実施例２におけるＸＳＬデータ記憶部により記憶された情報の一例を示す図である。図７に示す例では、ＸＳＬデータ記憶部２１２は、ＸＳＬを用いた抽出ルールを一意に識別する「ＸＳＬＩＤ」と、ＸＳＬを用いた抽出ルールとなる「ＸＳＬコード」とを含むレコードを記憶する。
【００４５】
図７に示す例では、ＸＳＬデータ記憶部２１２は、ＸＳＬＩＤ「１」と、ＸＳＬコード「<?xml version=“1.0”encoding=“UTF-8”?><xsl:stylesheet...〜</xsl:stylesheet>」とを含むレコードを記憶する。また、ＸＳＬデータ記憶部２１２は、同様に、他のＸＳＬＩＤについても、ＸＳＬコードを記憶する。なお、図７に示す例では、説明の便宜上、ＸＳＬコードの一部を「...」と記載して省略した。なお、ＸＳＬデータ記憶部２１２に記憶されるレコードは、例えば、後述するルール作成部４００によって格納され、抽出装置２００の管理者によって格納される。
【００４６】
ここで、ＸＳＬコードの一例について更に詳細に説明する。図８は、実施例２におけるＸＳＬデータの一例を示す図である。図８に示す例では、Ｗｅｂページのツリー構造により一意に決定されるルールを複数含むＸＳＬコードを例に示すが、本発明はこれに限定されるものではなく、１つのルールを含むＸＳＬコードであっても良い。
【００４７】
図８の６０１〜６０４は、ＷｅｂページのＸＭＬ構造を特定するルールであり、６１１〜６１３は、ＷｅｂページのＸＭＬ構造により一意に決定されるルールを示す。図８に示す例では、６０１は、「/html/body/table/tr/td」が３つあるＸＭＬ構造を特定するルールである。６０２は、「/html/body/table/tr/td」が２つあるＸＭＬ構造を特定するルールである。６０３は、「/html/head/title」が「colors」であるＸＭＬ構造を特定するルールである。６０４は、「/html/head/title」が「animals」であるＸＭＬ構造を特定するルールである。６１１は、３つ目の「/html/body/table/tr/td」からデータを抽出することを示すルールである。６１２は、２つ目の「/html/body/table/tr/td」からデータを抽出することを示すルールである。６１３は、１つ目の「/html/body/table/tr/td」からデータを抽出することを示すルールである。
【００４８】
ここで、図９と図１０とを用いて、ページソースの具体的な一例をあげて、図８のＸＳＬコードにより抽出されるデータの一例を示す。図９及び図１０は、実施例２におけるページソースの具体的な一例を示す。図８のＸＳＬコードでは、まず、図８の６０１に示すルールによりＷｅｂページが特定されるかについて判定される。ここで、図９のページソースには、「/html/body/table/tr/td」が３つある。この結果、図９のページソースからは、図８の６１１に示すルールに従って、図９の６２１に示すように、３つ目の「/html/body/table/tr/td」にある「<td>banana</td>」が抽出される。
【００４９】
また、図１０のページソースのように、「/html/body/table/tr/td」が３つある場合には、Ｗｅｂページは、図８の６０１に示すルールでは特定されず、図８の６０２に示すルールにより特定される。ここで、図１０に示す例では、「/html/head/title」は「animals」となっており、図８の６０４に示すルールに従って、図１０の６２２に示すように、１つ目の「/html/body/table/tr/td」から「<td>dog</td>」が抽出される。
【００５０】
なお、実施例２では、ＸＳＬを用いる抽出ルールを用いる場合を例に説明するが、本発明はこれに限定されるものではなく、任意の抽出ルールを用いて良い。
【００５１】
ＸＳＬ選択ルールデータ記憶部２１３は、データ抽出部３００、ルール作成部４００及び構造変化検出部５００と接続される。ＸＳＬ選択ルールデータ記憶部２１３は、例えば、ＲＡＭや、フラッシュメモリなどの半導体メモリ素子、又は、ハードディスクや光ディスクなどの記憶装置が該当する。
【００５２】
ＸＳＬ選択ルールデータ記憶部２１３は、抽出ルールと対応付けて、ＷｅｂページのＵＲＬに基づいて抽出ルールの適用対象となるＷｅｂページを特定する特定ルールを記憶する。図１１は、実施例２におけるＸＳＬ選択ルールデータ記憶部に記憶された情報の一例を示す図である。図１１に示す例では、ＸＳＬ選択ルールデータ記憶部２１３は、特定ルールを一意に識別する「ルールＩＤ」と、ＵＲＬを用いた特定ルールとなる「ＵＲＬルール」と、「ＸＳＬＩＤ」とを含むレコードを記憶する。ここで、ＸＳＬ選択ルールデータ記憶部２１３の「ＸＳＬＩＤ」は、ＸＳＬデータ記憶部２１２の「ＸＳＬＩＤ」に対応し、特定ルールとなる「ＵＲＬルール」により特定されるＷｅｂページが適用対象となるＸＳＬコードを示す。
【００５３】
図１１に示す例では、ＵＲＬルールとして、正規表現を用いる場合を示したが、本発明はこれに限定されるものではなく、正規表現を用いなくても良い。図１１に示す例では、ＸＳＬ選択ルールデータ記憶部２１３は、ルールＩＤ「１」に対応付けて、ＵＲＬルール「https?://aaa\.com/item_detail\?code=.*」とＸＳＬＩＤ「１」とを含むレコードを記憶する。すなわち、ＸＳＬ選択ルールデータ記憶部２１３は、「https://aaa.com/item_detail?code=」と前方一致するＵＲＬに紐付けられたＷｅｂページと、「http://aaa.com/item_detail?code=」と前方一致するＵＲＬに紐付けられたＷｅｂページとを特定するＵＲＬルールを記憶する。また、ＸＳＬ選択ルールデータ記憶部２１３は、ＸＳＬＩＤ「１」のレコードに含まれるＵＲＬルールが、ＸＳＬＩＤ「１」により識別されるＸＳＬコードによる適用対象となるＷｅｂページを特定することを記憶する。
【００５４】
また、図１１に示す例では、適用順位をルールＩＤの大小関係で表す場合を例に示した。すなわち、複数のＵＲＬルールにより特定されるＷｅｂページについては、ルールＩＤが小さいＵＲＬルールを優先する場合を例に示した。ただし、本発明はこれに限定されるものではなく、ルールＩＤの大小関係以外の情報を用いて適用順位を決定しても良く、任意の情報を用いて良い。なお、ＸＳＬ選択ルールデータ記憶部２１３に記憶されるレコードは、例えば、後述するルール作成部４００によって格納され、抽出装置２００の管理者によって格納される。
【００５５】
抽出済データ記憶部２１４は、データ抽出部３００と接続される。抽出済データ記憶部２１４は、例えば、ＲＡＭや、フラッシュメモリなどの半導体メモリ素子、又は、ハードディスクや光ディスクなどの記憶装置が該当する。
【００５６】
抽出済データ記憶部２１４は、データ抽出部３００によりＷｅｂページから抽出されたデータを記憶する。図１２は、実施例２における抽出済データ記憶部に記憶された情報の一例を示す図である。図１２に示す例では、抽出済データ記憶部２１４は、「ＷｅｂページＩＤ」と対応付けて、データ抽出部３００により抽出されたデータである「ＸＭＬ出力」を記憶する。ここで、図１２のＷｅｂページＩＤは、図６のＷｅｂページＩＤと対応する。また、図１２に示す例では、データ抽出部３００から出力されたデータがＸＭＬ形式である場合を示したが、本発明はこれに限定されるものではなく、データ抽出部３００から出力されたデータの形式は、テキスト形式であっても良く、任意の形式であって良い。
【００５７】
図１２に示す例では、抽出済データ記憶部２１４は、ＷｅｂページＩＤ「１」と、ＸＭＬ出力「<?xml version=“1.0” encoding=“UTF-8”?><item><code>a001</code>...〜</item>」とを含むレコードを記憶する。すなわち、抽出済データ記憶部２１４は、ＷｅｂページＩＤ「１」により特定されるＷｅｂページから抽出されたデータとして、「<?xml version=“1.0” encoding=“UTF-8”?><item><code>a001</code>...〜</item>」を記憶する。なお、図１２に示す例では、記載の便宜上、実際に出力されるデータの一部を「...」を用いて省略して記載した。
【００５８】
構造変化データ記憶部２１５は、構造変化検出部５００と接続される。構造変化データ記憶部２１５は、例えば、ＲＡＭや、フラッシュメモリなどの半導体メモリ素子、又は、ハードディスクや光ディスクなどの記憶装置が該当する。
【００５９】
構造変化データ記憶部２１５は、構造変化検出部５００による処理結果を記憶する。図１３は、実施例２における構造変化データ記憶部により記憶された情報の一例を示す図である。図１３に示す例では、構造変化データ記憶部２１５は、「ＷｅｂページＩＤ」と、「ＸＳＬＩＤ」と、「ＸＳＬエラー」と、「新ＸＳＬＩＤ」とを含むレコードを記憶する。
【００６０】
ここで、構造変化データ記憶部２１５の「ＷｅｂページＩＤ」は、構造変化検出部５００による処理対象となったＷｅｂページを示す。構造変化データ記憶部２１５の「ＸＳＬＩＤ」は、構造変化データ記憶部２１５のＷｅｂページＩＤにより示されるＷｅｂページに対してＵＲＬルールに基づいて選択されたＸＳＬコードを示す。「ＸＳＬエラー」は、構造変化検出部５００による処理結果を示し、構造変化データ記憶部２１５の「ＸＳＬＩＤ」により示されるＸＳＬコードを用いてのＸＳＬＴ処理によりエラーが起きたか否かを示す。図１３に示す例では、ＸＳＬエラー「ＹＥＳ」は、エラーが起きたことを示し、ＸＳＬエラー「ＮＯ」は、エラーが起きなかったことを示す。「新ＸＳＬＩＤ」は、構造変化検出部５００による処理結果を示し、構造変化データ記憶部２１５の「ＷｅｂページＩＤ」に適用してもエラーが起きないＸＳＬコードを示す。なお、ここで、図１３において、ＸＳＬＩＤ「ＮＵＬＬ」は、紐付けられたＷｅｂページＩＤについてＸＳＬコードが何も選択されていないことを示す。また、ＸＳＬエラー「ＮＵＬＬ」は、エラーの有無についての情報が何も格納されていないことを示す。図１３のＷｅｂページＩＤ「４」に示す例では、ＸＳＬコードが何も選択されていない結果、エラーの有無についても何ら情報がなく、ＸＳＬエラー「ＮＵＬＬ」となっている。
【００６１】
図１３に示す例では、構造変化データ記憶部２１５は、ＷｅｂページＩＤ「２」とＸＳＬＩＤ「１」とＸＳＬエラー「ＹＥＳ」と新ＸＳＬＩＤ「３」とを含むレコードを記憶する。すなわち、構造変化データ記憶部２１５は、ＷｅｂページＩＤ「２」により示されるＷｅｂページに、ＵＲＬルールに基づいて、ＸＳＬＩＤ「１」により示されるＸＳＬコードが選択されたことを記憶する。また、構造変化データ記憶部２１５は、ＷｅｂページＩＤ「２」により示されるＷｅｂページに、ＸＳＬＩＤ「１」により示されるＸＳＬコードが適用するとエラーが起こったことを記憶し、ＸＳＬＩＤ「３」により示されるＸＳＬコードを適用するとエラーが起こらなかったことを記憶する。
【００６２】
なお、構造変化データ記憶部２１５に記憶されたレコードは、構造変化検出部５００により格納される。また、図１３を用いて、構造変化検出部５００による処理結果の一例を示したが、本発明はこれに限定されるものではなく、構造変化検出部５００による処理結果は任意で良く、図１３に示す処理結果の形式に限定されるものではない。
【００６３】
［データ抽出部］
図５の説明に戻り、データ抽出部３００について説明する。データ抽出部３００は、Ｗｅｂページデータ記憶部２１１、ＸＳＬデータ記憶部２１２及びＸＳＬ選択ルールデータ記憶部２１３と接続される。データ抽出部３００は、各種の処理手順などを規定したプログラムを記憶する内部メモリを有し、種々の処理を制御する。データ抽出部３００は、例えば、ＡＳＩＣ（Application  Specific  Integrated  Circuit）、ＦＰＧＡ（Field  Programmable  Gate  Array）、ＣＰＵ（Central  Processing  Unit）、ＭＰＵ（Micro  Processing  Unit）などの電子回路が該当する。
【００６４】
図１４は、実施例２におけるデータ抽出部について示すブロック図である。図１４では、説明の便宜上、Ｗｅｂページデータ記憶部２１１と、ＸＳＬデータ記憶部２１２と、ＸＳＬ選択ルールデータ記憶部２１３と、抽出済データ記憶部２１４とを併せて示した。図１４に示す例では、データ抽出部３００は、ＸＳＬ選択データメモリ３１１と、ＸＳＬ選択部３２１と、ＸＳＬＴ処理部３２２とを有する。
【００６５】
ＸＳＬ選択データメモリ３１１は、例えば、ＲＡＭやフラッシュメモリなどの半導体メモリ素子が該当する。ＸＳＬ選択データメモリ３１１は、ＸＳＬ選択部３２１による処理結果を記憶する。具体的には、ＸＳＬ選択データメモリ３１１は、抽出対象となるＷｅｂページについて、ＵＲＬルールに基づいてＸＳＬ選択部３２１により選択されたＸＳＬコードを記憶する。
【００６６】
図１５は、実施例２におけるＸＳＬ選択データメモリに記憶された情報の一例を示す図である。図１５に示す例では、ＸＳＬ選択データメモリ３１１は、ＷｅｂページＩＤに対応付けて、ＸＳＬコードを記憶する。ここで、ＸＳＬ選択データメモリ３１１のＷｅｂページＩＤは、抽出対象となるＷｅｂページを示し、ＸＳＬ選択データメモリ３１１のＸＳＬコードは、ＸＳＬデータ記憶部２１２に記憶されたＸＳＬコードのうち、ＸＳＬ選択部３２１により選択されたＸＳＬコードを示す。
【００６７】
図１５に示す例では、ＸＳＬ選択データメモリ３１１は、ＷｅｂページＩＤ「１」とＸＳＬコード「<?xml version=“1.0” encoding=“UTF-8”?><xsl:stylesheet ...〜</xsl:stylesheet>」とを含むレコードを記憶する。すなわち、ＸＳＬ選択データメモリ３１１は、ＷｅｂページＩＤ「１」により示されるＷｅｂページについて、ＸＳＬ選択部３２１によりＸＳＬコード「<?xml version=“1.0” encoding=“UTF-8”?><xsl:stylesheet ...〜</xsl:stylesheet>」が選択されたことを記憶する。
【００６８】
ＸＳＬ選択部３２１は、抽出対象となるＷｅｂページが入力されると、入力されたＷｅｂページに紐付けられたＵＲＬが特定される特定ルールをＸＳＬ選択ルールデータ記憶部２１３から選択する。そして、ＸＳＬ選択部３２１は、選択した特定ルールに対応付けられた抽出ルールをＸＳＬデータ記憶部２１２から選択する。
【００６９】
例えば、抽出対象となるＷｅｂページのＵＲＬが「https://aaa.com/item_detail?code=〜」である場合を用いて説明する。この場合、抽出対象となるＷｅｂページのＵＲＬはＵＲＬルール「https?://aaa\.com/item_detail\?code=.*」により特定され、ＸＳＬ選択部３２１は、ＵＲＬルール「https?://aaa\.com/item_detail\?code=.*」をＸＳＬ選択ルールデータ記憶部２１３から選択する。そして、ＸＳＬ選択部３２１は、選択したＵＲＬルール「https?://aaa\.com/item_detail\?code=.*」に対応付けられたＸＳＬＩＤ「１」をＸＳＬ選択ルールデータ記憶部２１３から取得する。そして、ＸＳＬ選択部３２１は、ＸＳＬＩＤ「１」に対応付けられたＸＳＬコード「<?xml version=“1.0” encoding=“UTF-8”?><xsl:stylesheet ...〜</xsl:stylesheet>」をＸＳＬデータ記憶部２１２から選択する。
【００７０】
また、例えば、ＸＳＬ選択部３２１は、抽出対象となるＷｅｂページのＷｅｂページＩＤと選択したＸＳＬコードとを含むレコードを、ＸＳＬ選択データメモリ３１１に格納する。より詳細な一例をあげて説明すると、ＸＳＬ選択部３２１は、ＷｅｂページＩＤ「１」とＸＳＬコード「<?xml version=“1.0” encoding=“UTF-8”?><xsl:stylesheet ...〜</xsl:stylesheet>」とを含むレコードを格納する。なお、ＸＳＬ選択部３２１による処理の詳細な流れの一例については、フローチャートを用いて後述するため、ここでは説明を省略する。
【００７１】
ＸＳＬＴ処理部３２２は、ＸＳＬ選択部３２１により選択された抽出ルールに基づいて抽出処理を実行することで、抽出対象のＷｅｂページからデータを抽出する。また、ＸＳＬ選択部３２１により抽出ルール群が選択された場合には、ＸＳＬＴ処理部３２２は、抽出対象となるＷｅｂページのツリー構造を識別し、識別したツリー構造に対応するツリー構造対応抽出ルールを抽出ルール群から選択する。そして、ＸＳＬＴ処理部３２２は、選択したツリー構造対応抽出ルールに基づいて抽出処理を実行することで、抽出対象のＷｅｂページからデータを抽出する。
【００７２】
具体的には、ＸＳＬＴ処理部３２２は、ＸＳＬ選択データメモリ３１１からレコードを読み出し、読み出したレコードに含まれるＷｅｂページＩＤに対応付けられたＷｅｂページのページソースをＷｅｂページデータ記憶部２１１から読み出す。そして、ＸＳＬＴ処理部３２２は、読み出したＷｅｂページのページソースに対して、読み出したレコードに含まれるＸＳＬコードを用いてＸＳＬＴ処理を実行することで、Ｗｅｂページからデータを抽出する。例えば、ＸＳＬＴ処理部３２２は、ＸＳＬＴ処理を実行することで、ＸＳＬＴコードに含まれるＸｐａｔｈにより指定される箇所からデータを抽出する。
【００７３】
例えば、ＸＳＬＴ処理部３２２は、ＷｅｂページＩＤ「１」に対応付けられたページソース「<html><head ...〜</htm>」に対して、ＸＳＬコード「<?xml version=“1.0” encoding=“UTF-8”?><xsl:stylesheet ...〜</xsl:stylesheet>」を用いてＸＳＬＴ処理を実行する。
【００７４】
なお、ＸＳＬＴ処理は、JISX4169などの標準に適合したＸＳＬＴ処理であれば任意の手法を用いて実行して良い。また、ルールとしてＸｐａｔｈを複数含む抽出ルール群である場合には、ＸＳＬＴ処理を実行する過程において、抽出対象となるＷｅｂページのページソースに基づいて、処理に用いられるＸｐａｔｈが一意に決定され、一意に決定されたＸｐａｔｈにより指定される箇所にあるデータが抽出される。
【００７５】
また、ＸＳＬＴ処理部３２２は、処理結果を抽出済データ記憶部２１４に格納する。例えば、ＸＳＬＴ処理部３２２は、ＷｅｂページＩＤ「１」により示されるＷｅｂページに対してＸＳＬＴ処理を実行することで得られたＸＭＬ出力「<?xml version=“1.0” encoding=“UTF-8”?><item><code>a001</code>...〜</item>」と、ＷｅｂページＩＤ「１」とを含むレコードを格納する。なお、ＸＳＬＴ処理部３２２による処理の詳細な流れの一例については、フローチャートを用いて後述するため、ここでは説明を省略する。
【００７６】
［ルール作成部］
図５の説明に戻り、ルール作成部４００について説明する。ルール作成部４００は、Ｗｅｂページデータ記憶部２１１、ＸＳＬデータ記憶部２１２及びＸＳＬ選択ルールデータ記憶部２１３と接続される。ルール作成部４００は、各種の処理手順などを規定したプログラムを記憶する内部メモリを有し、種々の処理を制御する。ルール作成部４００は、例えば、ＡＳＩＣ、ＦＰＧＡ、ＣＰＵ、ＭＰＵなどの電子回路が該当する。
【００７７】
ルール作成部４００は、Ｗｅｂページデータ記憶部２１１に記憶されたＷｅｂページ各々のツリー構造を比較することで、ツリー構造が類似するＷｅｂページ群を取得し、取得したＷｅｂページ群に含まれるＷｅｂページ各々のツリー構造に共通する部分からデータを抽出する抽出ルールを作成する。また、ルール作成部４００は、抽出ルールが作成されたＷｅｂページ群に含まれるＷｅｂページ各々に対応付けられたＵＲＬをＷｅｂページデータ記憶部２１１から取得し、取得したＵＲＬ各々に基づいて特定ルールを作成する。そそして、ルール作成部４００は、抽出ルールと特定ルールとを対応付けて格納する。
【００７８】
ここで、ルール作成部４００によるルール作成対象のＷｅｂページは、Ｗｅｂページデータ記憶部２１１に予め記憶されている場合に限定されるものではなく、適宜自動的にクロールしたものを用いても良く、追加収集したものを用いても良い。また、ルールを作成するためのＷｅｂページ群と、ルールに基づいた抽出処理対象となるＷｅｂページ群とは、同一であっても良く、同一とはならなくても良い。例えば、収集したＷｅｂページ群の一部のみを用いてルールを作成し、作成したルールを用いて、残りのＷｅｂページ群又は収集した全Ｗｅｂページ群に対して、抽出処理を実施しても良い。
【００７９】
図１６は、実施例２におけるルール作成部の構成の一例を示すブロック図である。図１６では、説明の便宜上、Ｗｅｂページデータ記憶部２１１と、ＸＳＬデータ記憶部２１２と、ＸＳＬ選択ルールデータ記憶部２１３とを併せて示した。図１６に示す例では、ルール作成部４００は、ＤＯＭ（Document  Object  Model）ツリーデータメモリ４１１と、部分木ハッシュデータメモリ４１２と、共通ツリーデータメモリ４１３と、ツリー変換部４２１と、部分木ハッシュ生成部４２２と、共通ツリー抽出部４２３と、ＸＳＬ生成部４２４とを有する。
【００８０】
ＤＯＭツリーデータメモリ４１１は、例えば、ＲＡＭやフラッシュメモリなどの半導体メモリ素子が該当する。ＤＯＭツリーデータメモリ４１１は、ＷｅｂページデータのＤＯＭツリーデータを記憶する。すなわち、Ｗｅｂページのツリー構造に含まれるノード各々についての情報を記憶する。ＤＯＭツリーデータメモリ４１１は、ツリー変換部４２１によりＤＯＭツリーデータが格納され、部分木ハッシュ生成部４２２により用いられる。
【００８１】
図１７は、実施例２におけるＤＯＭツリーデータメモリに記憶された情報の一例を示す図である。図１７に示す例では、ＤＯＭツリーデータメモリ４１１は、「ＷｅｂページＩＤ」と、「ノードＩＤ」と、「親ノードＩＤ」と、「要素名」と、「要素位置」と、「Ｘｐａｔｈ」とを含むレコードを記憶する。
【００８２】
ここで、ＤＯＭツリーデータメモリ４１１の「ＷｅｂページＩＤ」は、Ｗｅｂページデータ記憶部２１１のＷｅｂページＩＤと同一であり、ＷｅｂページＩＤ「２」を含むレコードは、Ｗｅｂページデータ記憶部２１１のＷｅｂページＩＤ「２」に対応付けられたページソースについてのＤＯＭツリーデータであることを示す。
【００８３】
「ノードＩＤ」は、Ｗｅｂページのツリー構造に含まれるノードを識別する。具体的には、「ノードＩＤ」は、ＤＯＭツリーデータメモリ４１１に記憶されたＷｅｂページＩＤが同じレコードの中で、レコードを一意に特定するための情報である。例えば「１」から始まる連番などを用いて良く、任意の情報を用いて良い。ただし、ノードがルートノードである場合には、親ノードＩＤを「０」とする。「親ノードＩＤ」は、ノードＩＤにより識別されるノードの親ノードを識別する。「要素名」は、ノードの要素名を識別する。「要素位置」は、要素名で識別される要素が親ノードＩＤにより識別される親ノード配下にて何回目に登場したものかを示す。「Ｘｐａｔｈ」は、ノードＩＤにより識別されるノードの位置を示す。
【００８４】
図１７に示す例では、ＤＯＭツリーデータメモリ４１１は、ＷｅｂページＩＤ「２」と、ノードＩＤ「３」と、親ノードＩＤ「２」と、要素名「title」と、要素位置「１」と、Ｘｐａｔｈ「/html[1]/head[1]/title[1]」とを含むレコードを記憶する。
【００８５】
ここで、図１８を用いて、Ｘｐａｔｈにより示されるページソース内の位置について簡単に示す。図１８は、実施例２におけるページソースの一例を示す図である。図１８に示すページソースの一例は、ＷｅｂページＩＤ「２」に対応付けられたＷｅｂページのページソースである。図１８の６３１は、Ｘｐａｔｈ「/html[1]/head[1]/title[1]」により示される位置であり、図１８の６３２は、Ｘｐａｔｈ「/html[1]/body[1]/table[1]/tr[1]/td[2]」により示される位置である。
【００８６】
部分木ハッシュデータメモリ４１２は、例えば、ＲＡＭやフラッシュメモリなどの半導体メモリ素子が該当する。部分木ハッシュデータメモリ４１２は、ＤＯＭツリーデータメモリ４１１に記憶されたレコード各々について算出されるハッシュ値と、ノードのサイズを示す「部分木サイズ」とを記憶する。
【００８７】
図１９は、実施例２における部分木ハッシュデータメモリに記憶された情報の一例を示す図である。図１９に示す例では、部分木ハッシュデータメモリ４１２は、「ＷｅｂページＩＤ」と「ノードＩＤ」と「Ｘｐａｔｈ」と「ハッシュ値」と「部分木サイズ」とを含むレコードを記憶する。図１９の「ＷｅｂページＩＤ」と「ノードＩＤ」と「Ｘｐａｔｈ」とは、ＤＯＭツリーデータメモリ４１１の「ＷｅｂページＩＤ」と「ノードＩＤ」と「Ｘｐａｔｈ」とに対応する。部分木ハッシュデータメモリ４１２は、部分木ハッシュ生成部４２２によってレコードが格納され、共通ツリー抽出部４２３とＸＳＬ生成部４２４とにより用いられる。
【００８８】
図１９に示す例では、部分木ハッシュデータメモリ４１２は、ＷｅｂページＩＤ「２」とノード「１」とＸｐａｔｈ「/html[1]」とハッシュ値「4AAQSkZJRgAB...」と部分木サイズ「１７８」とを含むレコードを記憶する。すなわち、部分木ハッシュデータメモリ４１２は、ＷｅｂページＩＤ「２」とノード「１」について算出されたハッシュ値が「4AAQSkZJRgAB...」であり、サイズが「１７８」であることを記憶する。ここで、ノードＩＤ「１」のＸｐａｔｈは「/html[1]」であり、ノードＩＤ「１」について算出されたハッシュ値は、図１８における「<html>」と「<html>」との間にあるタグ各々を入力として算出された値を示す。すなわち、ハッシュ値を算出する際に用いられるデータは、図１８に示す例では、「<html>」「<head>」「<title>」などのタグであって、「<title>」にあるデータ「sample」や「<td>」にあるデータ「fruits」などについては用いられない。
【００８９】
また、ノード「１」について算出された部分木サイズは、図１８における「<html>」と「<html>」との間にあるデータのサイズの合計を示す。また、同様に、ノードＩＤ「２」のＸｐａｔｈは「/html[1]/head[1]」であり、ノードＩＤ「２」について算出されたハッシュ値は、図１８における「/html[1]/head[1]」と「/html[1]/head[1]」との間にあるタグ各々を入力として算出された値を示す。
【００９０】
共通ツリーデータメモリ４１３は、例えば、ＲＡＭやフラッシュメモリなどの半導体メモリ素子が該当する。共通ツリーデータメモリ４１３は、ハッシュ値と部分木ハッシュ値と「行数」と「累積サイズ」とを含むレコードを記憶する。ハッシュ値と部分木ハッシュ値とは、部分木ハッシュデータメモリ４１２のハッシュ値と部分木ハッシュ値と同一である。「行数」は、同一のハッシュ値を有するレコードの数を示す。「累積サイズ」は、行数と部分木サイズとを乗算した値を示す。共通ツリーデータメモリ４１３は、共通ツリー抽出部４２３によりレコードが格納され、ＸＳＬ生成部４２４によりレコードが用いられる。
【００９１】
図２０は、実施例２における共通ツリーデータメモリに記憶された情報の一例を示す図である。図２０に示す例では、共通ツリーデータメモリ４１３は、ハッシュ値「4AAQSkZJRgAB...」と部分木サイズ「１７８」と行数「１」と累積サイズ「１７８」とを含むレコードを記憶する。すなわち、ハッシュ値「4AAQSkZJRgAB...」を含むレコードが部分木ハッシュデータメモリ４１２には「１」あり、累積サイズが「１７８」であることを記憶する。
【００９２】
また、図２０に示す例では、共通ツリーデータメモリ４１３は、ハッシュ値「QEAYABgAAD2w...」と部分木サイズ「２」と行数「５８」と累積サイズ「１１６」とを含むレコードを記憶する。すなわち、ハッシュ値「QEAYABgAAD2w...」を含むレコードが部分木ハッシュデータメモリ４１２には「５８」あり、累積サイズが「１１６」であることを記憶する。
【００９３】
ここで、行数が「１」以上になる場合について簡単に付言する。ハッシュ値は、算出対象となるデータが異なる場合には、異なる値となる。「行数」が「１」以上の値を取るということは、同一のハッシュ値が算出されたノードが複数あるということになり、ハッシュ値の算出対象となったタグの組み合わせが同一となるレコードが複数あったことを示す。言い換えると、タグの下位構造が同一となるレコードが複数あることを示す。
【００９４】
ツリー変換部４２１は、Ｗｅｂページデータ記憶部２１１に記憶されたレコードを取得し、取得したレコードに含まれるページソースに対してパース処理を実行することで、ページソースをＤＯＭツリーデータに変換する。そして、ツリー変換部４２１は、変換したＤＯＭツリーデータをＤＯＭツリーデータメモリ４１１に格納する。
【００９５】
ここで、ツリー変換部４２１によるパース処理は、「TR  X  0065:2002」などの標準に適合したパース処理であれば任意の手法を用いて良い。なお、ツリー変換部４２１による処理の詳細な流れの一例については、フローチャートを用いて後述するため、ここでは説明を省略する。
【００９６】
部分木ハッシュ生成部４２２は、ＤＯＭツリーデータメモリ４１１に記憶されたレコードを取得し、取得したレコードに含まれるノードについて、ハッシュ値と部分木サイズとを算出する。そして、部分木ハッシュ生成部４２２は、算出したハッシュ値と部分木サイズとを含むレコードを部分木ハッシュデータメモリ４１２に格納する。また、その際、部分木ハッシュ生成部４２２は、取得したレコードに含まれるＷｅｂページＩＤとノードＩＤとＸｐａｔｈとを併せて格納する。なお、部分木ハッシュ生成部４２２による処理の詳細な流れの一例については、フローチャートを用いて後述するため、ここでは説明を省略する。
【００９７】
共通ツリー抽出部４２３は、部分木ハッシュデータメモリ４１２に格納されたレコードのうち、ハッシュ値が同一となるレコードをまとめた上で、共通ツリーデータメモリ４１３に格納する。共通ツリー抽出部４２３による処理の詳細な流れの一例については、フローチャートを用いて後述するため、ここでは説明を省略する。
【００９８】
ＸＳＬ生成部４２４は、Ｗｅｂページのツリー構造を比較することで、ツリー構造が類似するＷｅｂページ群を取得し、取得したＷｅｂページ群に含まれるＷｅｂページ各々のツリー構造に共通する部分からデータを抽出する抽出ルールを作成する。具体的には、ＸＳＬ生成部４２４は、Ｗｅｂページのツリー構造を比較することで同一の下位構造を含むツリー構造を有するＷｅｂページ群を取得し、取得したＷｅｂページ群に含まれるＷｅｂページのツリー構造に共通するＸｐａｔｈからデータを抽出する抽出ルールを作成する。
【００９９】
より詳細には、ＸＳＬ生成部４２４は、共通ツリーデータメモリ４１３からレコードを１つ抽出し、抽出したレコードに含まれるハッシュ値と同一のハッシュ値を有するレコードを部分木ハッシュデータメモリ４１２から取得する。ここで、ハッシュ値が同一となるレコード各々は、下位構造が同一となるノードについてのレコードとなり、ＸＳＬ生成部４２４は、同一の下位構造を含むツリー構造を有するＷｅｂページ群を取得することになる。
【０１００】
ＸＳＬ生成部４２４は、取得したレコードに含まれるＸｐａｔｈのうち最も出現回数が多いＸｐａｔｈからデータを抽出する抽出ルールを作成する。すなわち、最も出現回数が多いＸｐａｔｈを選択することで、他のＷｅｂページからデータが抽出される可能性が高いＸｐａｔｈからデータを抽出する抽出ルールを作成する。なお、以下では、最も出現回数が多いＸｐａｔｈを用いる場合を用いて説明するが、本発明はこれに限定されるものではない。例えば、２番目に出願回数が多いＸｐａｔｈを用いても良く、出願回数ではなく出現頻度を用いても良く、任意の手法を用いて良い。
【０１０１】
図２１は、実施例２におけるＸＳＬ生成部によるＸＳＬコード生成について示す図である。例えば、ＸＳＬ生成部４２４は、図２１に示すテンプレートを用いて、ＸＳＬコードを生成する。具体的には、ＸＳＬ生成部４２４は、最も出現回数が多いＸｐａｔｈを図２１の［ＭＰ］に挿入することで、ＸＳＬコードを生成する。ＸＳＬ生成部４２４は、予めテンプレートが設定されることで、ＸＳＬコードを簡単に作成可能となる。ただし、本発明はこれに限定されるものではなく、ＸＳＬ生成部４２４は、テンプレートを用いることなく、任意の手法にてＸＳＬコードを生成して良い。
【０１０２】
なお、図２１に示す例では、１つのルールを含むＸＳＬコードを生成する場合を示した。ただし、上述したように、本発明はこれに限定されるものではなく、複数のルールを含むＸＳＬコードとしても良い。この場合、例えば、ＸＳＬ生成部４２４は、取得したＷｅｂページ群をツリー構造ごとに更に分類し、分類したツリー構造ごとにＸｐａｔｈを取得する。そして、ＸＳＬ生成部４２４は、分類したツリー構造を識別するルールとＸｐａｔｈとを紐付けた上で、複数のＸｐａｔｈを含むＸＳＬコードを生成する。
【０１０３】
また、ＸＳＬ生成部４２４は、抽出ルールが作成されたＷｅｂページ群に含まれるＷｅｂページ各々に対応付けられたＵＲＬをＷｅｂページデータ記憶部２１１から取得し、取得したＵＲＬ各々に基づいて特定ルールを作成する。例えば、ＸＳＬ生成部４２４は、取得したＵＲＬに共通する部分や高頻度にて出現する部分を取得し、取得した部分と一致するＵＲＬに紐付けられたＷｅｂページを特定する特定ルールを生成する。ここで、ＸＳＬ生成部４２４は、取得した部分と正規表現とを組み合わせた特定ルールを生成する。例えば、ＸＳＬ生成部４２４は、取得した部分がＵＲＬの先頭に出願する場合には、先頭一致を示す正規表現と取得した部分とを組み合わせた特定ルールを生成する。
【０１０４】
また、ＸＳＬ生成部４２４は、生成した抽出ルールをＸＳＬデータ記憶部２１２に格納し、生成した抽出ルールと特定ルールとを対応付けてＸＳＬ選択ルールデータ記憶部２１３に格納する。なお、ＸＳＬ生成部４２４による処理の詳細な流れの一例については、フローチャートを用いて後述するため、ここでは説明を省略する。
【０１０５】
［構造変化検出部］
図５の説明に戻り、構造変化検出部５００について説明する。構造変化検出部５００は、Ｗｅｂページデータ記憶部２１１、ＸＳＬデータ記憶部２１２、ＸＳＬ選択ルールデータ記憶部２１３及び構造変化データ記憶部２１５と接続される。構造変化検出部５００は、各種の処理手順などを規定したプログラムを記憶する内部メモリを有し、種々の処理を制御する。構造変化検出部５００は、例えば、ＡＳＩＣ、ＦＰＧＡ、ＣＰＵ、ＭＰＵなどの電子回路が該当する。
【０１０６】
構造変化検出部５００は、Ｗｅｂページのツリー構造が過去のＷｅｂページのツリー構造と比較して変化したか否かを検出する。具体的には、構造変化検出部５００は、Ｗｅｂページデータ記憶部２１１に既に記憶されているＷｅｂページのツリー構造と、新たに取得したツリー構造とを比較することで、Ｗｅｂページのツリー構造に変化があるか否かを検出する。例えば、構造変化検出部５００は、ＸＳＬＴ処理を実行した際にエラーが発生するか否かに基づいて、構造変化の有無を検出する。
【０１０７】
また、構造変化検出部５００は、所定の間隔で定期的に保存済のＷｅｂページのＵＲＬへアクセスすることでＷｅｂページを取得して処理を実行しても良く、Ｗｅｂページを管理するサーバ側から送信を受けることでＷｅｂページを取得しても良い。
【０１０８】
図２２は、実施例２における構造変化検出部の構成の一例を示すブロック図である。図２２では、説明の便宜上、Ｗｅｂページデータ記憶部２１１と、ＸＳＬデータ記憶部２１２と、ＸＳＬ選択ルールデータ記憶部２１３と、構造変化データ記憶部２１５とを併せて示した。図２２に示す例では、構造変化検出部５００は、ＸＳＬ選択データメモリ５１１と、ＸＳＬ選択部５２１と、ＸＳＬＴエラー検出部５２２とを有する。
【０１０９】
ここで、ＸＳＬ選択データメモリ５１１とＸＳＬ選択部５２１とは、それぞれ、ＸＳＬ選択部３２１とＸＳＬ選択データメモリ３１１と対応するため、説明を省略する。なお、図２２に示す例では、ＸＳＬ選択データメモリ３１１とＸＳＬ選択データメモリ５１１とを別の部として記載し、ＸＳＬ選択部５２１とＸＳＬ選択部３２１とを別の部として記載したが、本発明はこれに限定されるものではなく、ＸＳＬ選択データメモリ３１１とＸＳＬ選択データメモリ５１１とを統合し、ＸＳＬ選択部５２１とＸＳＬ選択部３２１とを統合しても良い。
【０１１０】
ＸＳＬＴエラー検出部５２２は、ＸＳＬ選択データメモリ５１１に記憶されたレコードを取得し、取得したレコードに含まれるＸＳＬコードを用いて、レコードに含まれるＷｅｂページＩＤにより識別されるＷｅｂページに対してＸＳＬＴ処理を実行する。そして、ＸＳＬＴ処理にエラーが発生すると、その旨を構造変化データ記憶部２１５に格納する。
【０１１１】
また、ＸＳＬＴエラー検出部５２２は、エラーが発生した旨を格納したレコードについて、ＸＳＬデータ記憶部２１２に記憶されたＸＳＬコードのうち、適用可能なＸＳＬコードを判別する。そして、ＸＳＬＴエラー検出部５２２は、判別したＸＳＬコードのＸＳＬＩＤを構造変化データ記憶部２１５に格納する。
【０１１２】
すなわち、過去のＷｅｂページと比較してツリー構造が変化すると、過去のＷｅｂページに適用したＸＳＬコードを用いてもデータが抽出されないことがある。このことを踏まえ、ＸＳＬＴエラー検出部５２２は、ＸＳＬＴ処理にてエラーが発生するか否かに基づいて処理を実行し、エラーが起きたＷｅｂページについて適用可能なＸＳＬコードを判別して対応付けて構造変化データ記憶部２１５に対応付けて格納する。ＸＳＬＴエラー検出部５２２による処理の詳細な流れの一例については、フローチャートを用いて後述するため、ここでは説明を省略する。
【０１１３】
なお、抽出装置２００は、例えば、既知のパーソナルコンピュータ、携帯電話、ＰＨＳ（Personal  Handyphone  System）端末、移動体通信端末又はＰＤＡ（Personal  Digital  Assistant）などの情報処理装置を利用して実現しても良い。この場合、例えば、ＰＤＡなどの情報処理装置に、図５に示した各部に対応する機能を搭載することで実現して良い。
【０１１４】
［実施例２に係る抽出装置による処理］
実施例２に係る抽出装置２００の各部による処理の詳細な流れの一例について示す。以下では、ＸＳＬ選択部３２１、ＸＳＬＴ処理部３２２、ツリー変換部４２１、部分木ハッシュ生成部４２２、共通ツリー抽出部４２３、ＸＳＬ生成部４２４、ＸＳＬＴエラー検出部５２２について、順に説明する。
【０１１５】
［実施例２におけるＸＳＬ選択部による処理］
図２３は、実施例２におけるＸＳＬ選択部による処理の詳細な流れの一例を示す図である。図２３に示すように、ＸＳＬ選択部３２１は、処理タイミングとなると、Ｗｅｂページデータを全て処理したかを判定する（ステップＳ３０１）。具体的には、Ｗｅｂページデータ記憶部２１１に記憶されたレコード全てについてＸＳＬコードを選択したかを判定する。ここで、処理していないと判定した場合には（ステップＳ３０１否定）、ＸＳＬ選択部３２１は、Ｗｅｂページデータから１行取り出し、ＰＬとする（ステップＳ３０２）。例えば、ＸＳＬ選択部３２１は、ＷｅｂページＩＤ「１」を含むレコードを取得する。
【０１１６】
なお、「ＰＬ」は変数を示す。以下では、「（変数を示す語句）とする」という表現は、変数への代入を示すものとして説明する。すなわち、ステップＳ３０２に示す例では、「Ｗｅｂページデータから１行取り出し、変数ＰＬに代入する」ことを示すものとして説明する。
【０１１７】
そして、ＸＳＬ選択部３２１は、ＸＳＬ選択ルールデータ記憶部２１３のＵＲＬルールに、ＰＬのＵＲＬとマッチするものがあるか否かを判定する（ステップＳ３０３）。すなわち、抽出対象となるＷｅｂページのＵＲＬが特定ルールにより特定されるか否かを判定する。ここで、ＸＳＬ選択部３２１は、ＰＬのＵＲＬとマッチするＵＲＬルールがないと判定した場合には（ステップＳ３０３否定）、ステップＳ３０１に戻り、処理を繰り返す。
【０１１８】
一方、ＸＳＬ選択部３２１は、ＰＬのＵＲＬとマッチするＵＲＬルールがあると判定した場合には（ステップＳ３０３肯定）、マッチしたＸＭＬ選択ルールデータの中で、ルールＩＤが最小の行のＸＳＬＩＤをＳＲとする（ステップＳ３０４）。なお、「ＳＲ」は変数を示す。すなわち、ＸＳＬ選択部３２１は、複数のＵＲＬルールがマッチする場合には、適用順位が高いＵＲＬルールを選択する。例えば、ＸＳＬ選択部３２１は、ＷｅｂページＩＤ「１」を含むレコードのＷｅｂページのＵＲＬが、ルールＩＤ「１」と「１０」との両方により特定される場合には、ルールＩＤ「１」を選択し、ルールＩＤ「１」を含むレコードに含まれるＸＳＬＩＤ「１」を選択し、ＳＲとする。
【０１１９】
そして、ＸＳＬ選択部３２１は、ＸＳＬデータの中でＸＳＬＩＤがＳＲに一致する行のＸＳＬコードと、ＰＬのＷｅｂページＩＤとをＸＳＬ選択データメモリ３１１に格納する（ステップＳ３０５）。すなわち、例えば、ＸＳＬ選択部３２１は、ＸＳＬデータ記憶部２１２に記憶されたＸＳＬコードのうち、ＸＳＬＩＤ「１」に対応付けられたＸＳＬコード「<?xml version=“1.0” encoding=“UTF-8”?><xsl:stylesheet ...〜</xsl:stylesheet>」を取得する。そして、ＸＳＬ選択部３２１は、取得したＸＳＬコード「<?xml version=“1.0” encoding=“UTF-8”?><xsl:stylesheet ...〜</xsl:stylesheet>」とＷｅｂページＩＤ「１」とを含むレコードをＸＳＬ選択データメモリ３１１に格納する。そして、ＸＳＬ選択部３２１は、ステップＳ３０１に戻り処理を繰り返す。
【０１２０】
また、ステップＳ３０１において、Ｗｅｂページデータを全て処理したと判定すると（ステップＳ３０１肯定）、処理を終了する。
【０１２１】
［実施例２におけるＸＳＬＴ処理部による処理］
図２４は、実施例２におけるＸＳＬＴ処理部による処理の詳細な流れの一例を示す図である。図２４に示すように、ＸＳＬＴ処理部３２２は、ＸＳＬ選択データを全て処理したかを判定する（ステップＳ４０１）。すなわち、ＸＳＬ選択データメモリ３１１に記憶されたレコード全てについてＸＳＬＴ処理を実行したかを判定する。ここで、処理していないと判定した場合には（ステップＳ４０１否定）、ＸＳＬＴ処理部３２２は、ＸＳＬ選択データから１行取り出し、ＸＬとする（ステップＳ４０２）。なお、「ＸＬ」は変数を示す。すなわち、ＸＳＬＴ処理部３２２は、ＸＳＬ選択データメモリ３１１からレコードを１つ取得し、ＸＬとする。例えば、ＸＳＬＴ処理部３２２は、ＷｅｂページＩＤ「１」を含むレコードを取得する。
【０１２２】
そして、ＸＳＬＴ処理部３２２は、Ｗｅｂページデータの中で、ＸＬのＷｅｂページＩＤとＩＤが同じ行のページソースをＰＳとする（ステップＳ４０３）。なお、「ＰＳ」は変数を示す。すなわち、ＸＳＬＴ処理部３２２は、取得したレコードに含まれるＷｅｂページＩＤに対応付けられたページソースをＷｅｂページデータ記憶部２１１から取得し、ＰＳとする。例えば、ＸＳＬＴ処理部３２２は、ＷｅｂページＩＤ「１」に対応付けられたページソース「<html><head ...〜</htm>」をＰＳとする。
【０１２３】
そして、ＸＳＬＴ処理部３２２は、ＰＳに対してＸＬのＸＳＬコードが表すＸＳＬＴ処理を行う（ステップＳ４０４）。すなわち、ＸＳＬＴ処理部３２２は、ＸＳＬ選択部３２１により選択された抽出ルールに基づいて抽出処理を実行することで、抽出対象のＷｅｂページからデータを抽出する。例えば、ＸＳＬＴ処理部３２２は、ページソース「<html><head ...〜</htm>」に対して、ＸＳＬコード「<?xml version=“1.0” encoding=“UTF-8”?><xsl:stylesheet ...〜</xsl:stylesheet>」を用いてＸＳＬＴ処理を実行することで、Ｗｅｂページのページソースから「<?xml version=“1.0” encoding=“UTF-8”?><item><code>a001</code>... 〜 </item>」を抽出する。
【０１２４】
そして、ＸＳＬＴ処理部３２２は、ＸＬのＷｅｂページＩＤとＸＳＬＴ処理の結果を抽出済データに格納する（ステップＳ４０５）。すなわち、例えば、ＸＳＬＴ処理部３２２は、ＷｅｂページＩＤ「１」とＸＭＬ出力「<?xml version=“1.0” encoding=“UTF-8”?><item><code>a001</code>... 〜 </item>」とを含むレコードを、抽出済データ記憶部２１４に格納する。そして、ＸＳＬＴ処理部３２２は、ステップＳ４０１に戻り、処理を繰り返す。
【０１２５】
また、ＸＳＬＴ処理部３２２は、ＸＳＬ選択データメモリ３１１に記憶されたレコード全てについてＸＳＬＴ処理を実行したと判定した場合には（ステップＳ４０１肯定）、そのまま処理を終了する。
【０１２６】
［実施例２におけるツリー変換部による処理］
図２５は、実施例２におけるツリー変換部による処理の詳細な流れの一例を示す図である。図２５に示すように、ツリー変換部４２１は、Ｗｅｂページデータを全て処理したか否かを判定する（ステップＳ５０１）。すなわち、抽出ルールと特定ルールとを作成する際に用いるＷｅｂページデータ記憶部２１１のレコードを全てについてルール作成部４００による処理が行われたか否かを判定する。
【０１２７】
ここで、処理していないと判定した場合には（ステップＳ５０１否定）、ツリー変換部４２１は、Ｗｅｂページデータから１行取り出し、ＰＬとする（ステップＳ５０２）。なお、「ＰＬ」は変数を示す。例えば、ツリー変換部４２１は、Ｗｅｂページデータ記憶部２１１から、ＷｅｂページＩＤ「１」を含むレコードを取得し、ＰＬとする。そして、ツリー変換部４２１は、ＰＬのページソースをＤＯＭパースする（ステップＳ５０３）。すなわち、取得したレコードに含まれるページソースに対してパース処理を実行することで、ページソースをＤＯＭツリーに変換する。
【０１２８】
そして、ツリー変換部４２１は、パース結果のＤＯＭツリーから要素ノードを１つ取り出し、ＤＮとし（ステップＳ５０４）、ＰＬのＷｅｂページＩＤ、ＤＮの要素名、ＤＮの兄弟要素内での位置、ＤＮのＸＰａｔｈ、ＤＮのノードＩＤ、及びＤＮの親要素のノードＩＤをＤＯＭツリーデータに出力する（ステップＳ５０５）。なお、「ＤＭ」は変数を示す。すなわち、例えば、パース処理を実行することで得られたＤＯＭツリーに含まれる要素それぞれについて、ＷｅｂページＩＤとノードＩＤと親ノードＩＤと要素名と要素位置とＸｐａｔｈとを含むレコードを、ＤＯＭツリーデータメモリ４１１に格納する。
【０１２９】
そして、ツリー変換部４２１は、ＤＯＭツリーの要素ノードを全て処理したかを判定し（ステップＳ５０６）、全て処理した判定しない場合には（ステップＳ５０６否定）、ステップＳ５０４に戻り、ステップＳ５０４〜Ｓ５０５を繰り返す。一方、ツリー変換部４２１は、全て処理した判定した場合には（ステップＳ５０６肯定）、ステップＳ５０１に戻り、処理を繰り返す。また、ツリー変換部４２１は、ステップＳ５０１において、Ｗｅｂページデータを全て処理したと判定した場合には（ステップＳ５０１肯定）、処理を終了する。
【０１３０】
［実施例２における部分木ハッシュ生成部による処理］
図２６は、実施例２における部分木ハッシュ生成部による処理の詳細な流れの一例を示す図である。以下では、ルートノードについてのレコードを取得して部分木ハッシュを算出する場合を例に説明する。部分木ハッシュ生成部４２２は、以下に示す処理と同様の処理を実行することで、ルートノード以外のレコードについても、部分木ハッシュを算出する。
【０１３１】
図２６に示すように、部分木ハッシュ生成部４２２は、処理タイミングとなると（ステップＳ６０１肯定）、ＤＯＭツリーデータからルートノードを１つ取り出し、ＲＮとする（ステップＳ６０２）。なお、「ＲＮ」は変数を示す。すなわち、親ノードＩＤが「０」のレコードを１つ取得し、ＲＮとする。そして、部分木ハッシュ生成部４２２は、ＲＮにハッシュ化処理を行う（ステップＳ６０３）。すなわち、部分木ハッシュ生成部４２２は、取得した親ノードＩＤが「０」のレコードについて、ハッシュ値を算出し、部分木ハッシュデータメモリ４１２にレコードを格納する。なお、ハッシュ値を算出する処理の詳細については、図２７を用いて後述する。部分木ハッシュ生成部４２２が処理を開始する処理タイミングとは、定期的なタイミングであっても良く、ＤＯＭツリーデータメモリ４１１に新たなレコードが格納されたタイミングであっても良く、任意のタイミングであって良い。
【０１３２】
そして、部分木ハッシュ生成部４２２は、ＤＯＭツリーデータのルートノードを全て処理したかを判定し（ステップＳ６０４）、処理したと判定した場合には（ステップＳ６０４肯定）、処理を終了し、処理していないと判定した場合には（ステップＳ６０４否定）、ステップＳ６０２に戻って処理を繰り返す。
【０１３３】
図２７は、実施例２における部分木ハッシュ生成部によるハッシュ化処理の詳細な流れの一例を示すフローチャートである。図２７に示す一連の処理は、図２６におけるステップＳ６０３に対応する。なお、以下では、ハッシュ化処理において、部分木ハッシュデータメモリ４１２にレコードを格納する処理も併せて実行する場合を用いて説明する。
【０１３４】
図２７に示すように、部分木ハッシュ生成部４２２は、処理対象のノードをＮとし（ステップＳ７０１）、文字列変数ＢにＮの要素名を代入する（ステップＳ７０２）。なお、「Ｎ」「Ｂ」は変数を示す。例えば、部分木ハッシュ生成部４２２は、ノードＩＤ「１」を含むレコードをＤＯＭツリーデータメモリ４１１から取得し、取得したレコードに含まれるノードを処理対象となる「Ｎ」とし、取得したレコードに含まれる要素名「html」を文字列変数Ｂに代入する。
【０１３５】
そして、部分木ハッシュ生成部４２２は、数値変数Ｓに１を代入する（ステップＳ７０３）。なお、「Ｓ」は変数を示す。例えば、部分木ハッシュ生成部４２２は、「Ｓ＝１」とする。
【０１３６】
そして、部分木ハッシュ生成部４２２は、Ｎの子ノードを全て処理したかを判定する（ステップＳ７０４）。つまり、ノードＩＤ「１」の配下にあるノード全てについて、後述するステップＳ７０５を実行したか否かを判定する。ここで、処理していないと判定した場合には（ステップＳ７０４否定）、部分木ハッシュ生成部４２２は、ＤＯＭツリーデータから、Ｎの子ノードＣＮを１つ取り出し、ハッシュ化処理を行う（ステップＳ７０５）。なお、「ＣＮ」は変数を示す。Ｎの子ノードＣＮは、親ノードＩＤがＮのノードＩＤに一致するレコードであって、かつ、ＷｅｂページＩＤがＮのノードＩＤに一致するレコードに含まれるノードを示す。
【０１３７】
また、部分木ハッシュ生成部４２２は、再帰呼び出しにてＮの子ノードのハッシュ値を算出する。図１７に示す例では、部分木ハッシュ生成部４２２は、ＷｅｂページＩＤ「２」と親ノードＩＤ「１」とを含むレコードを１つ取得し、取得したレコードについてのハッシュ値を算出する。例えば、部分木ハッシュ生成部４２２は、取得したレコードのノードについて、ハッシュ値「QEAYABgAAD2w...」を算出する。なお、部分木ハッシュ生成部４２２がＮの子ノードを取得するやり方は、所定の順序であれば良く、その順序は任意であって良い。
【０１３８】
そして、部分木ハッシュ生成部４２２は、ＣＮのハッシュ値をＢの末尾に加え（ステップＳ７０６）、ＣＮの部分木サイズをＳに加算する（ステップＳ７０７）。例えば、部分木ハッシュ生成部４２２は、文字列変数Ｂ「html」の末尾に、算出したハッシュ値「QEAYABgAAD2w...」を加えることで、文字列変数Ｂを「htmlQEAYABgAAD2w...」とする。また、例えば、部分木ハッシュ生成部４２２は、ハッシュ値を算出したＣＮのサイズが「２」である場合には、数値変数Ｓ「１」に「２」を加えることで、「３」とする。
【０１３９】
そして、部分木ハッシュ生成部４２２は、ステップＳ７０４に戻り、Ｎの子ノードを全て処理したかを判定し（ステップＳ７０４）、処理したと判定するまで、ステップＳ７０５〜Ｓ７０７を繰り返す。つまり、この結果、文字列変数Ｂは、Ｎの子ノード各々について算出されたハッシュ値が連結された文字列となる。
【０１４０】
一方、部分木ハッシュ生成部４２２は、Ｎの子ノードを全て処理したかを判定した場合には（ステップＳ７０４肯定）、Ｂのハッシュ値を計算する（ステップＳ７０８）。すなわち、部分木ハッシュ生成部４２２は、Ｎの子ノード各々について算出されたハッシュ値が連結された文字列から、ハッシュ値を算出する。なお、ハッシュ値を算出する手法は、ＣＲＣ３２、ＭＤ５などの一様性のあるハッシュ値計算手法であれば、任意の方法で良い。
【０１４１】
そして、部分木ハッシュ生成部４２２は、部分木ハッシュデータに、ＮのＷｅｂページＩＤ、ＮのノードＩＤ、ＮのＸＰａｔｈ、Ｂのハッシュ値、及び、部分木サイズＳを出力する（ステップＳ７０９）。つまり、部分木ハッシュ生成部４２２は、ＷｅｂページＩＤ「２」とノードＩＤ「１」とＸｐａｔｈ「/html[1]」とハッシュ値「4AAQSkZJRgAB...」と部分木サイズ「１７８」とを含むレコードを、部分木ハッシュデータメモリ４１２に格納する。
【０１４２】
［実施例２における共通ツリー抽出部による処理］
図２８は、実施例２における共通ツリー抽出部による処理の詳細な流れの一例を示す図である。図２８に示すように、共通ツリー抽出部４２３は、処理タイミングとなると（ステップＳ８０１肯定）、部分木ハッシュデータをハッシュ値順にソートする（ステップＳ８０２）。すなわち、共通ツリー抽出部４２３は、部分木ハッシュデータメモリ４１２に記憶されたレコードを、ハッシュ値順に並べなおす。なお、共通ツリー抽出部４２３の処理タイミングとは、例えば、定期的なタイミングや、部分木ハッシュデータメモリ４１２にレコードが格納されたタイミングなどが該当する。
【０１４３】
そして、共通ツリー抽出部４２３は、部分木ハッシュデータを全て処理したかを判定し（ステップＳ８０３）、処理していないと判定した場合に（ステップＳ８０３否定）、部分木ハッシュデータからハッシュ値を１つ取り出し、Ｈとする（ステップＳ８０４）。なお、「Ｈ」は変数を示す。すなわち、例えば、共通ツリー抽出部４２３は、部分木ハッシュデータメモリ４１２からレコードを１つ取得し、取得したレコードに含まれるハッシュ値を「Ｈ」とする。例えば、共通ツリー抽出部４２３は、ＷｅｂページＩＤ「２」とノードＩＤ「１」とＸｐａｔｈ「/html[1]」とハッシュ値「4AAQSkZJRgAB...」と部分木サイズ「１７８」とを含むレコードを取得し、ハッシュ値「4AAQSkZJRgAB...」を「Ｈ」とする。
【０１４４】
そして、共通ツリー抽出部４２３は、部分木ハッシュデータから、ハッシュ値がＨである行を抽出する（ステップＳ８０５）。すなわち、共通ツリー抽出部４２３は、ハッシュ値が同一となるレコードを取得する。例えば、共通ツリー抽出部４２３は、ハッシュ値が「4AAQSkZJRgAB...」となるレコードを取得する。
【０１４５】
そして、共通ツリー抽出部４２３は、抽出した行の１行目の部分木サイズＳ、抽出した行の行数Ｌ、ＳとＬの積となる累積サイズ、及びＨを共通ツリーデータに出力する（ステップＳ８０６）。すなわち、共通ツリー抽出部４２３は、取得したレコード数を識別して行数Ｌとし、最初に抽出したレコードの部分木サイズＳと行数Ｌとを乗算した値を累積サイズとする。そして、共通ツリー抽出部４２３は、識別した行数Ｌと、算出した累積サイズと、ハッシュ値Ｈと、部分木サイズＳとを含むレコードを、共通ツリーデータメモリ４１３に格納する。例えば、共通ツリー抽出部４２３は、ハッシュ値「4AAQSkZJRgAB...」と部分木サイズＳ「１７８」と行数Ｌ「１」と累積サイズ「１７８」とを含むレコードを格納する。
【０１４６】
そして、共通ツリー抽出部４２３は、ステップＳ８０３に戻り、部分木ハッシュデータを全て処理していないと判定した場合には（ステップＳ８０３否定）、上述したステップＳ８０４〜Ｓ８０６を繰り返す。一方、共通ツリー抽出部４２３は、部分木ハッシュデータを全て処理したと判定した場合には（ステップＳ８０３肯定）、処理を終了する。
【０１４７】
［実施例２におけるＸＳＬ生成部による処理］
図２９は、実施例２におけるＸＳＬ生成部による処理の詳細な流れの一例を示す図である。図２９に示すように、ＸＳＬ生成部４２４は、処理タイミングとなると（ステップＳ９０１肯定）、共通ツリーデータを累積サイズ順にソートする（ステップＳ９０２）。具体的には、ＸＳＬ生成部４２４は、共通ツリーデータメモリ４１３に記憶されたレコードを累計サイズが大きい順に並べる。ＸＳＬ生成部４２４の処理タイミングとは、例えば、定期的なタイミングや、共通ツリーデータメモリ４１３にレコードが格納されたタイミングなどが該当する。
【０１４８】
そして、ＸＳＬ生成部４２４は、数値変数ＩＤＳとＩＤＲにそれぞれ「１」を代入する（ステップＳ９０３）。なお、「ＩＤＳ」と「ＩＤＲ」とは変数を示す。具体的には、「ＩＤＳ」は、ＸＳＬデータについての変数を示し、「ＩＤＲ」は、ＵＲＬルールについての変数を示す。
【０１４９】
そして、ＸＳＬ生成部４２４は、共通ツリーデータを全て処理したかを判定する（ステップＳ９０４）。具体的には、ＸＳＬ生成部４２４は、共通ツリーデータメモリ４１３に記憶されたレコード全てについて後述する処理を行ったかを判定する。ここで、ＸＳＬ生成部４２４は、処理を行ったと判定した場合には（ステップＳ９０４肯定）、処理を終了する。
【０１５０】
一方、ＸＳＬ生成部４２４は、処理を行っていないと判定した場合には（ステップＳ９０４否定）、共通ツリーデータから行を１つ取り出し、ＣＴとする（ステップＳ９０５）。具体的には、ＸＳＬ生成部４２４は、共通ツリーデータメモリ４１３から、累計サイズが大きいレコードから順に１つのレコードを取得し、ＣＴとする。なお、「ＣＴ」は変数を示す。例えば、ＸＳＬ生成部４２４は、ハッシュ値「4AAQSkZJRgAB...」と部分木サイズ「１７８」と行数「１」と累計サイズ「１７８」とを含むレコードを取得し、ＣＴとする。
【０１５１】
そして、ＸＳＬ生成部４２４は、ＣＴにルール出力処理を行う（ステップＳ９０６）。すなわち、ＸＳＬ生成部４２４は、抽出ルールを作成し、特定ルールを作成し、抽出ルールをＸＳＬデータ記憶部２１２に格納し、特定ルールを抽出ルールと紐付けた上でＸＳＬ選択ルールデータ記憶部２１３に格納する。ルール出力処理の詳細な流れの一例については図３０を用いて後述する。
【０１５２】
そして、ＸＳＬ生成部４２４は、数値変数ＩＤＳとＩＤＲにそれぞれ１を加算する（ステップＳ９０７）。例えば、数値変数ＩＤＳとＩＤＲとに「１」加算することで、数値変数ＩＤＳとＩＤＲとを「２」とする。そして、ＸＳＬ生成部４２４は、ステップＳ９０４に戻り、処理を行ったと判定するまでステップＳ９０４〜Ｓ９０７を繰り返す。
【０１５３】
図３０は、実施例２におけるＸＳＬ生成部によるルール出力処理の詳細な流れの一例を示す図である。図３０に示す一連の流れは、図２９におけるステップＳ９０６に対応する。
【０１５４】
図３０に示すように、ＸＳＬ生成部４２４は、部分木ハッシュデータから、ハッシュ値がＣＴのハッシュ値と一致する行を抽出し、ＳＨとする（ステップＳ１００１）。例えば、ＸＳＬ生成部４２４は、部分木ハッシュデータメモリ４１２に記憶されたレコードのうち、ハッシュ値が「4AAQSkZJRgAB...」となるレコードを全て抽出し、「ＳＨ」とする。すなわち、ＸＳＬ生成部４２４は、Ｗｅｂページのツリー構造を比較することで同一の下位構造を含むツリー構造を有するＷｅｂページ群を取得する。言い換えると、ＸＳＬ生成部４２４は、Ｗｅｂページのツリー構造を比較することで、ツリー構造が類似するＷｅｂページ群を取得する。
【０１５５】
そして、ＸＳＬ生成部４２４は、ＳＨをＸＰａｔｈ順にソートし、最も出現回数が多いＸＰａｔｈをＭＰとする（ステップＳ１００２）。すなわち、下位構造が同一であったとしても、取得したレコードのノードの位置を示すＸｐａｔｈが同一とは限らないことを踏まえ、他のＷｅｂページからデータを抽出できる可能性が高いと考えられる出現回数が他と比較して多いＸｐａｔｈを取得し、ＭＰとする。なお、「ＭＰ」は図２１に示したＸＳＬコードを生成するためのテンプレートのうちＸｐａｔｈを挿入する箇所を示す。つまり、ＸＳＬ生成部４２４は、取得したレコードに含まれるＸｐａｔｈのうち最も出現回数が多いＸＰａｔｈにより指定される箇所からデータを抽出するＸＳＬコードを生成する。
【０１５６】
そして、ＸＳＬ生成部４２４は、ＳＨに、新規の列「ＵＲＬ」を追加する（ステップＳ１００３）。すなわち、ＸＳＬ生成部４２４は、部分木ハッシュデータメモリ４１２から取得したレコード群に、「ＵＲＬ」についての列を追加する。
【０１５７】
そして、ＸＳＬ生成部４２４は、ＳＨを全て処理したかを判定する（ステップＳ１００４）。つまり、ＳＨ全てについてＵＲＬを代入する処理を実行したかを判定する。ここで、処理していないと判定した場合には（ステップＳ１００４否定）、ＳＨから行を１つ取り出し、ＳＨＬとする（ステップＳ１００５）。なお、「ＳＨＬ」は変数を示す。そして、ＸＳＬ生成部４２４は、Ｗｅｂページデータの中で、ＷｅｂページＩＤがＳＨＬのＷｅｂページＩＤに一致する行のＵＲＬをＳＨＬのＵＲＬに代入する（ステップＳ１００６）。具体的には、ＸＳＬ生成部４２４は、取り出したレコードに含まれるＷｅｂページＩＤに対応付けられたＵＲＬをＷｅｂページデータ記憶部２１１から取得し、取得したＵＲＬを新たに追加した列「ＵＲＬ」に代入する。そして、ＸＳＬ生成部４２４は、ＳＨを全て処理したかを再度判定し、全て処理したと判定するまで、ステップＳ１００５及びＳ１００６の処理を繰り返す。
【０１５８】
一方、ＸＳＬ生成部４２４は、ＳＨを全て処理したと判定した場合には（ステップＳ１００４肯定）、ＳＨの１行目のＵＲＬを文字列変数ＭＵに代入する（ステップＳ１００７）。そして、ＸＳＬ生成部４２４は、ＳＨの全ての行のＵＲＬにＭＵが前方一致するかを判定し（ステップＳ１００８）、一致しないと判定した場合には（ステップＳ１００８否定）、ＭＵの末尾の１文字を削除する（ステップＳ１００９）。その後、再度前方一致すると判定するまで、ステップＳ１００９を繰り返す。すなわち、ＸＳＬ生成部４２４は、ＵＲＬ各々に共通する前方部分を抽出する。
【０１５９】
そして、ＸＳＬ生成部４２４は、再度前方一致すると判定した場合には（ステップＳ１００８肯定）、テンプレートＴＳにＭＰを埋め込んだＸＳＬコードと、ＩＤＳをＸＳＬデータに出力する（ステップＳ１０１０）。具体的には、ＸＳＬ生成部４２４は、ステップＳ１００２にて生成したＸＳＬコードをＸＳＬデータ記憶部２１２に格納し、ＸＳＬＩＤとしてＩＤＳを格納する。
【０１６０】
そして、ＸＳＬ生成部４２４は、ＭＵの末尾に文字列「.*」を結合したＵＲＬルールと、ＩＤＲと、ＩＤＳをＸＳＬ選択ルールデータに出力する（ステップＳ１０１１）。具体的には、ＸＳＬ生成部４２４は、ステップＳ１００８にて生成したＵＲＬ列と前方一致するＵＲＬを特定するＵＲＬルールを生成してＸＳＬ選択ルールデータ記憶部２１３に格納し、ルールＩＤとしてＩＤＲを格納し、ＸＳＬＩＤとしてＩＤＳを格納する。すなわち、ＸＳＬ生成部４２４は、ＵＲＬルールをＸＳＬコードと紐付けて、ＸＳＬ選択ルールデータ記憶部２１３に格納する。なお、「.*」は前方一致を示す正規表現である。
【０１６１】
なお、図３０に示す例では、ＸＳＬ生成部４２４が、ＳＨ全ての行のＵＲＬに一致する前方部分を取得し、取得した前方部分と一致するＵＲＬを特定するＵＲＬルールを生成する場合を用いて説明した。ただし、本発明はこれに限定されるものではなく、任意のＵＲＬルールを生成して良い。すなわち、後方部分と一致するＵＲＬを特定するＵＲＬルールを生成しても良く、中間部分が一致するＵＲＬルールを生成しても良く、任意のＵＲＬルールを任意の手法にて生成して良い。
【０１６２】
［実施例２におけるＸＳＬＴエラー検出部による処理］
図３１は、実施例２におけるＸＳＬＴエラー検出部による処理の詳細な流れの一例を示す図である。図３１に示すように、ＸＳＬＴエラー検出部５２２は、Ｗｅｂページデータを全て処理したか否かを判定する（ステップＳ１１０１）。例えば、ＸＳＬＴエラー検出部５２２は、Ｗｅｂページデータ記憶部２１１に記憶されたレコード全てについて、構造変化検出部５００による処理が行われたか否かについて判定する。
【０１６３】
そして、ＸＳＬＴエラー検出部５２２は、処理していないと判定した場合には（ステップＳ１１０１否定）、Ｗｅｂページデータから１行取り出し、ＷＰとし（ステップＳ１１０２）、ＸＳＬ選択データにＷｅｂページＩＤが、ＷＰのＷｅｂページＩＤと一致する行（ＸＬ）があるかを判定する（ステップＳ１１０３）。すなわち、ＸＳＬＴエラー検出部５２２は、Ｗｅｂページデータ記憶部２１１から取得したレコードに関するＷｅｂページについて、ＸＳＬコードが選択済であり、ＸＳＬ選択データメモリ５１１に格納済であるかを判定する。なお、「ＷＰ」「ＸＬ」は変数を示す。
【０１６４】
そして、ＸＳＬＴエラー検出部５２２は、ＷＰのＷｅｂページＩＤと一致する行（ＸＬ）があると判定した場合には（ステップＳ１１０３肯定）、ＷＰのページソースに対して、ＸＬのＸＳＬコードが表すＸＳＬＴ処理を行う（ステップＳ１１０４）。具体的には、ＸＳＬＴエラー検出部５２２は、ＸＳＬ選択データメモリ５１１に記憶されたレコードを取得し、取得したレコードに含まれるＸＳＬコードを用いて、レコードに含まれるＷｅｂページＩＤにより識別されるＷｅｂページに対してＸＳＬＴ処理を実行する。
【０１６５】
そして、ＸＳＬＴエラー検出部５２２は、ＸＳＬＴ処理の結果エラーが起きたかを判定する（ステップＳ１１０５）。ここで、ＸＳＬＴエラー検出部５２２は、エラーが起きたと判定した場合には（ステップＳ１１０５肯定）、ＷＰに対してＸＳＬ検索処理を行う（ステップＳ１１０６）。すなわち、ＸＳＬＴエラー検出部５２２は、エラーが起きたＷｅｂページに対して適用可能なＸＳＬコードを検索する処理を実行する。
【０１６６】
また、上述したステップＳ１１０３において、ＷＰのＷｅｂページＩＤと一致する行（ＸＬ）がないと判定した場合には（ステップＳ１１０３否定）、ＷＰに対してＸＳＬ検索処理を行う（ステップＳ１１０６）。
【０１６７】
そして、ＸＳＬＴエラー検出部５２２は、ＷＰのＷｅｂページＩＤ、ＸＬのＸＳＬＩＤ、ＸＳＬＴ処理のエラーの有無、ＸＳＬ検索処理の結果（ＲＸＳ）を構造変化データに出力する（ステップＳ１１０７）。この場合、例えば、ＸＳＬＴエラー検出部５２２は、構造変化データ記憶部２１５に対して、Ｗｅｂページデータ記憶部２１１から取得したレコードに含まれるＷｅｂページＩＤを「ＷｅｂページＩＤ」として格納し、ＸＳＬ選択データメモリ５１１から取得したレコードに含まれるＸＳＬコードのＸＳＬＩＤを「ＸＳＬＩＤ」として格納し、エラーが起きたことを示す「ＹＥＳ」を「ＸＳＬエラー」として格納し、ＸＳＬ検索処理結果となるＸＳＬＩＤを「新ＸＳＬＩＤ」として格納する。
【０１６８】
また、上述したステップＳ１１０５において、エラーが起きなかったと判定した場合には（ステップＳ１１０５否定）、ＸＳＬ検索処理を行うことなく、ＷＰのＷｅｂページＩＤ、ＸＬのＸＳＬＩＤ、ＸＳＬＴ処理のエラーの有無、ＸＳＬ検索処理の結果（ＲＸＳ）を構造変化データに出力する（ステップＳ１１０７）。この場合、例えば、ＸＳＬＴエラー検出部５２２は、構造変化データ記憶部２１５に対して、Ｗｅｂページデータ記憶部２１１から取得したレコードに含まれるＷｅｂページＩＤを「ＷｅｂページＩＤ」として格納し、ＸＳＬ選択データメモリ５１１から取得したレコードに含まれるＸＳＬコードのＸＳＬＩＤを「ＸＳＬＩＤ」として格納し、エラーが起きなかったことを示す「ＮＯ」を「ＸＳＬエラー」として格納する。
【０１６９】
図３２は、実施例２におけるＸＳＬＴエラー検出部によるＸＳＬ検索処理の詳細な流れの一例を示すフローチャートである。図３２に示す一連の処理は、図３１におけるステップＳ１１０６に対応する。
【０１７０】
図３２に示すように、ＸＳＬＴエラー検出部５２２は、ＸＳＬデータを全て処理したか否かを判定し（ステップＳ１２０１）、処理していないと判定した場合に（ステップＳ１２０１否定）、ＸＳＬデータから１行取り出し、ＸＬとする（ステップＳ１２０２）。すなわち、ＸＳＬＴエラー検出部５２２は、ＸＳＬ検索処理を実行する場合には、ＸＳＬデータ記憶部２１２に未取得のレコードがある場合には、レコードを１つ取得する。
【０１７１】
そして、ＸＳＬＴエラー検出部５２２は、ＷＰのページソースに対してＸＬのＸＳＬコードが表すＸＳＬＴ処理を行う（ステップＳ１２０３）。そして、ＸＳＬＴエラー検出部５２２は、ＸＳＬＴ処理の結果エラーが起きたかを判定し（ステップＳ１２０４）、エラーが起きたと判定した場合には（ステップＳ１２０４肯定）、ステップＳ１０２１に戻り、未取得のレコードをＸＳＬデータ記憶部２１２から取得してステップＳ１２０２〜Ｓ１２０４を繰り返す。
【０１７２】
一方、ＸＳＬデータ記憶部２１２は、エラーが起きなかったと判定した場合には（ステップＳ１２０４否定）、ＸＳＬ検索処理の結果（ＲＸＳ）として、ＸＬのＩＤを返し（ステップＳ１２０５）、処理を終了する。つまり、エラーが起きなかったということは、ＸＳＬ検索処理の対象となったＷｅｂページに適用可能なＸＳＬコードとなり、その後、図３１におけるステップ１１０７において、ＸＳＬＴエラー検出部５２２は、構造変化データ記憶部２１５の新ＸＳＬＩＤとして格納することになる。
【０１７３】
一方、ＸＳＬＴエラー検出部５２２は、ステップＳ１２０１において、全て処理したと判定した場合には（ステップＳ１２０１肯定）、つまり、エラーが起きなかったＸＳＬコードが１つもなかった場合には、ＸＳＬ検索処理の結果（ＲＸＳ）として、ＮＵＬＬを返す（ステップＳ１２０６）。この結果、その後、図３１におけるステップ１１０７において、ＸＳＬＴエラー検出部５２２は、構造変化データ記憶部２１５の新ＸＳＬＩＤにデータを格納しない。
【０１７４】
［実施例２の効果］
上述したように、実施例２によれば、抽出装置２００は、Ｗｅｂページからデータを抽出するための抽出ルールと、ＷｅｂページのＵＲＬに基づいて抽出ルールの適用対象となるＷｅｂページを特定する特定ルールとを対応付けて記憶する。そして、抽出装置２００は、抽出対象となるＷｅｂページが入力されると、入力されたＷｅｂページに紐付けられたＵＲＬが特定される特定ルールを選択し、選択した特定ルールに対応付けられた抽出ルールを選択する。そして、抽出装置２００は、選択した抽出ルールに基づいて抽出処理を実行することで、抽出対象のＷｅｂページからデータを抽出する。この結果、実施例２によれば、Ｗｅｂページから適切にデータを抽出可能である。
【０１７５】
また、実施例２によれば、抽出装置２００は、ツリー構造を有するＷｅｂページと、ＷｅｂページのＵＲＬとを対応付けて記憶する。そして、抽出装置２００は、Ｗｅｂページ各々のツリー構造を比較することで、ツリー構造が類似するＷｅｂページ群を取得し、取得したＷｅｂページ群に含まれるＷｅｂページ各々のツリー構造に共通する部分からデータを抽出する抽出ルールを作成する。そして、抽出装置２００は、抽出ルールが作成されたＷｅｂページ群に含まれるＷｅｂページ各々に対応付けられたＵＲＬを取得し、取得したＵＲＬ各々に基づいて特定ルールを作成する。そして、抽出装置２００は、抽出ルールと特定ルールとを対応付けて格納する。この結果、ルールを自動的に作成でき、手間を省くことが可能である。
【０１７６】
また、実施例２によれば、Ｗｅｂページのツリー構造が過去のＷｅｂページのツリー構造と比較して変化したか否かを検出するので、Ｗｅｂページの構造が変化したことを簡単に把握可能である。この結果、例えば、構造が変化した場合に、抽出ルールを再度作成したり、適用するルールを再度選択したりすることで、Ｗｅｂページのツリー構造が変化したとしても適切に抽出可能である。
【０１７７】
また、実施例２によれば、ＸＳＬデータ記憶部２１２は、抽出ルールとして、Ｗｅｂページのツリー構造により一意に決定されるルールであるツリー構造対応抽出ルールを複数含む抽出ルール群を記憶する。そして、抽出装置２００は、選択した特定ルールに対応付けられた抽出ルール群を選択し、抽出対象となるＷｅｂページのツリー構造を識別し、識別したツリー構造に対応するツリー構造対応抽出ルールを抽出ルール群から選択する。そして、抽出装置２００は、選択したツリー構造対応抽出ルールに基づいて抽出処理を実行することで、抽出対象のＷｅｂページからデータを抽出する。この結果、Ｗｅｂページに適したルールを選択可能である。
【実施例３】
【０１７８】
さて、これまで本発明の実施例について説明したが、本発明は上述した実施例以外にも、その他の実施例にて実施されても良い。そこで、以下では、その他の実施例を示す。
【０１７９】
［構造変化検出部５００による処理結果］
例えば、構造変化検出部５００による処理結果をトリガとして用いても良い。例えば、ユーザの手作業によりルールを再度作成する場合には、抽出装置２００は、その旨をユーザに出力する。また、例えば、抽出ルールを抽出装置２００が自動で再度作成する場合には、その旨をルール作成部４００に通知し、ルール作成部４００が処理を開始する。
【０１８０】
［システム構成］
また、本実施例において説明した各処理のうち、自動的に行われるものとして説明した処理の全部又は一部を手動的に行うこともでき、あるいは、手動的に行われるものとして説明した処理の全部又は一部を公知の方法で自動的に行うこともできる。この他、上述文書中や図面中で示した処理手順、制御手順、具体的名称、各種のデータやパラメータを含む情報については（例えば、図１〜図３２）、特記する場合を除いて任意に変更することができる。
【０１８１】
また、図示した各装置の各構成要素は機能概念的なものであり、必ずしも物理的に図示の如く構成されていることを要しない。すなわち、各装置の分散・統合の具体的形態は図示のものに限られず、その全部又は一部を、各種の負荷や使用状況などに応じて、任意の単位で機能的又は物理的に分散・統合して構成することができる。例えば、図５に示す例では、ＸＳＬデータ記憶部２１２とＸＳＬ選択ルールデータ記憶部２１３とを統合しても良く、Ｗｅｂページデータ記憶部２１１を外部装置として抽出装置２００とネットワーク経由で接続するようにしても良い。また、例えば、データ抽出部３００と、ルール作成部４００と、構造変化検出部５００とのうち、いずれか１つまたは複数を外部装置とし、ネットワークを介して協同するようにしても良い。
【０１８２】
また、例えば、図２２に示す各部のみを有する装置とし、構造変化を検出するだけの装置である構造変化検出装置としても良い。すなわち、Ｗｅｂページデータ記憶部２１１と、ＸＳＬデータ記憶部２１２と、ＸＳＬ選択ルールデータ記憶部２１３と、構造変化データ記憶部２１５と、構造変化検出部５００とを有する構造変化検出装置としても良い。なお、構造変化を検出するだけの構造変化検出装置とする場合において、Ｗｅｂページデータ記憶部２１１と、ＸＳＬデータ記憶部２１２と、ＸＳＬ選択ルールデータ記憶部２１３とのうち、一部または全ての記憶部を外部装置とし、構造変化検出装置がネットワーク経由で各記憶部に接続してデータを参照するようにしても良い。
【０１８３】
［プログラム］
図３３は、抽出プログラムによる情報処理がコンピュータを用いて具体的に実現されることを示す図である。図３３に例示するように、コンピュータ３０００は、例えば、メモリ３０１０と、ＣＰＵ（Central  Processing  Unit）３０２０と、ハードディスクドライブインタフェース３０３０と、ディスクドライブインタフェース３０４０と、シリアルポートインタフェース３０５０と、ビデオアダプタ３０６０と、ネットワークインタフェース３０７０とを有する。コンピュータ３０００の各部はバス３１００によって接続される。
【０１８４】
なお、図３３に示すコンピュータの構成は一例であり、コンピュータの構成はこれに限定されるものではない。例えば、図３３に示す例では、コンピュータ３０００は、ハードディスクドライブ３０８０を有し、ハードディスクドライブ３０８０がプログラムデータ３０８４などを記憶する場合を示したが、本発明はこれに限定されるものではない。例えば、コンピュータ３０００は、ハードディスクドライブ３０８０を有さなくても良い。この場合、コンピュータ３０００は、例えば、メモリ３０１０にプログラムデータ３０８４などを記憶しても良く、任意の記憶領域にプログラムデータ３０８４などを記憶して良い。また、コンピュータ３０００は、任意の情報処理装置であって良く、例えば、携帯電話、ＰＨＳ（Personal  Handyphone  System）端末、移動体通信端末又はＰＤＡ（Personal  Digital  Assistant）などの情報処理装置であっても良い。
【０１８５】
メモリ３０１０は、図３３に例示するように、ＲＯＭ３０１１及びＲＡＭ３０１２を含む。ＲＯＭ３０１１は、例えば、ＢＩＯＳ（Basic  Input  Output  System）等のブートプログラムを記憶する。ハードディスクドライブインタフェース３０３０は、図３３に例示するように、ハードディスクドライブ３０８０に接続される。ディスクドライブインタフェース３０４０は、図３３に例示するように、ディスクドライブ３０９０に接続される。例えば磁気ディスクや光ディスク等の着脱可能な記憶媒体が、ディスクドライブ３０９０に挿入される。シリアルポートインタフェース３０５０は、図３３に例示するように、例えばマウス３０５１、キーボード３０５２に接続される。ビデオアダプタ３０６０は、図３３に例示するように、例えばディスプレイ３０６１に接続される。
【０１８６】
ここで、図３３に例示するように、ハードディスクドライブ３０８０は、例えば、ＯＳ３０８１、アプリケーションプログラム３０８２、プログラムモジュール３０８３、プログラムデータ３０８４を記憶する。すなわち、開示の技術に係る更新プログラムは、コンピュータによって実行される指令が記述されたプログラムモジュール３０８３として、例えばハードディスクドライブ３０８０に記憶される。具体的には、上記実施例で説明したデータ抽出部３００やルール作成部４００、構造変化検出部５００と同様の情報処理を実行する手順各々が記述されたプログラムモジュールが、ハードディスクドライブ３０８０に記憶される。
【０１８７】
また、上記実施例で説明したＷｅｂページデータ記憶部２１１やＸＳＬデータ記憶部２１２、ＸＳＬ選択ルールデータ記憶部２１３、抽出済データ記憶部２１４、構造変化データ記憶部２１５などに記憶されるデータのように、抽出プログラムによる情報処理に用いられるデータは、プログラムデータ３０８４として、例えばハードディスクドライブ３０８０に記憶される。そして、ＣＰＵ３０２０が、ハードディスクドライブ３０８０に記憶されたプログラムモジュール３０８３やプログラムデータ３０８４を必要に応じてＲＡＭ３０１２に読み出し、各種の手順を実行する。
【０１８８】
なお、抽出プログラムに係るプログラムモジュール３０８３やプログラムデータ３０８４は、ハードディスクドライブ３０８０に記憶される場合に限られない。例えば、プログラムモジュール３０８３やプログラムデータ３０８４は、着脱可能な記憶媒体に記憶されても良い。この場合、ＣＰＵ３０２０は、ディスクドライブなどの着脱可能な記憶媒体を介してデータを読み出す。また、同様に、更新プログラムに係るプログラムモジュール３０８３やプログラムデータ３０８４は、ネットワーク（ＬＡＮ（Local  Area  Network）、ＷＡＮ（Wide  Area  Network）等）を介して接続された他のコンピュータに記憶されても良い。この場合、ＣＰＵ３０２０は、ネットワークインタフェースを介して他のコンピュータにアクセスすることで各種データを読み出す。
【０１８９】
［その他］
なお、本実施例で説明した抽出プログラムは、インターネットなどのネットワークを介して配布することができる。また、抽出プログラムは、ハードディスク、フレキシブルディスク（ＦＤ）、ＣＤ−ＲＯＭ、ＭＯ、ＤＶＤなどのコンピュータで読み取り可能な記録媒体に記録され、コンピュータによって記録媒体から読み出されることによって実行することもできる。
【符号の説明】
【０１９０】
１００      抽出装置
１１１      抽出ルール記憶部
１２０      データ抽出部
１２１      抽出ルール選択部
１２２      抽出部
１３０      ルール作成部
１４０      構造変化検出部
２００      抽出装置
２１１      Ｗｅｂページデータ記憶部
２１２      ＸＳＬデータ記憶部
２１３      ＸＳＬ選択ルールデータ記憶部
２１４      抽出済データ記憶部
２１５      構造変化データ記憶部
３００      データ抽出部
３１１      ＸＳＬ選択データメモリ
３２１      ＸＳＬ選択部
３２２      ＸＳＬＴ処理部
４００      ルール作成部
４１１      ＤＯＭツリーデータメモリ
４１２      部分木ハッシュデータメモリ
４１３      共通ツリーデータメモリ
４２１      ツリー変換部
４２２      部分木ハッシュ生成部
４２３      共通ツリー抽出部
４２４      ＸＳＬ生成部
５００      構造変化検出部
５１１      ＸＳＬ選択データメモリ
５２１      ＸＳＬ選択部
５２２      ＸＳＬＴエラー検出部
【図１】
2012059212.tif 000003
【図２】
2012059212.tif 000004
【図３】
2012059212.tif 000005
【図４】
2012059212.tif 000006
【図５】
2012059212.tif 000007
【図６】
2012059212.tif 000008
【図７】
2012059212.tif 000009
【図８】
2012059212.tif 000010
【図９】
2012059212.tif 000011
【図１０】
2012059212.tif 000012
【図１１】
2012059212.tif 000013
【図１２】
2012059212.tif 000014
【図１３】
2012059212.tif 000015
【図１４】
2012059212.tif 000016
【図１５】
2012059212.tif 000017
【図１６】
2012059212.tif 000018
【図１７】
2012059212.tif 000019
【図１８】
2012059212.tif 000020
【図１９】
2012059212.tif 000021
【図２０】
2012059212.tif 000022
【図２１】
2012059212.tif 000023
【図２２】
2012059212.tif 000024
【図２３】
2012059212.tif 000025
【図２４】
2012059212.tif 000026
【図２５】
2012059212.tif 000027
【図２６】
2012059212.tif 000028
【図２７】
2012059212.tif 000029
【図２８】
2012059212.tif 000030
【図２９】
2012059212.tif 000031
【図３０】
2012059212.tif 000032
【図３１】
2012059212.tif 000033
【図３２】
2012059212.tif 000034
【図３３】
2012059212.tif 000035