(57)【要約】      （修正有）【課題】複数の候補の正規表現の中から、漏れおよび／またはノイズの少ない正規表現を決定する。【解決手段】プログラムは、或る文書データにおける所望の１つ以上のテキスト部分に適合する複数の正規表現を記憶部３３４に保存し、複数の文書データの各々におけるその記憶部のその複数の正規表現の各々に適合するテキスト部分の数を求め、その複数の文書データの各々における所望のテキスト部分の数を取得して、その複数の正規表現の中で、その複数の文書データに関してその適合するテキスト部分の数がその所望のテキスト部分の数と一致する度合の高い正規表現を決定する処理を情報処理装置３０に実行させる。【選択図】図２
2015028699.tif 000002
【特許請求の範囲】
【請求項１】
或る文書データにおける所望の１つ以上のテキスト部分に適合する複数の正規表現を記憶部に保存し、
複数の文書データの各々における前記記憶部の前記複数の正規表現の各々に適合するテキスト部分の数を求め、前記複数の文書データの各々における所望のテキスト部分の数を取得して、前記複数の正規表現の中で、前記複数の文書データに関して前記適合するテキスト部分の数が前記所望のテキスト部分の数と一致する度合の高い正規表現を決定する
処理を情報処理装置に実行させるためのプログラム。
【請求項２】
さらに、前記複数の正規表現に、前記度合に基づいて優先度を与える処理を前記情報処理装置に実行させる、請求項１に記載のプログラム。
【請求項３】
さらに、前記複数の正規表現を、前記度合に基づいて付与された優先度の順に表示する処理を前記情報処理装置に実行させる、請求項１または２に記載のプログラム。
【請求項４】
或る文書データにおける所望の１つ以上のテキスト部分に適合する複数の正規表現を生成する生成部と、
複数の文書データの各々における前記複数の正規表現の各々に適合するテキスト部分の数を求め、前記複数の文書データの各々における所望のテキスト部分の数を取得して、前記複数の正規表現の中で、前記複数の文書データに関して前記適合するテキスト部分の数が前記所望のテキスト部分の数と一致する度合の高い正規表現を決定する決定部と、
を含む情報処理装置。
【請求項５】
情報処理装置が、
或る文書データにおける所望の１つ以上のテキスト部分に適合する複数の正規表現を記憶部に保存し、
複数の文書データの各々における前記記憶部の前記複数の正規表現の各々に適合するテキスト部分の数を求め、前記複数の文書データの各々における所望のテキスト部分の数を取得して、前記複数の正規表現の中で、前記複数の文書データに関して前記適合するテキスト部分の数が前記所望のテキスト部分の数と一致する度合の高い正規表現を決定する
処理を実行する方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、文書データのテキストに対する正規表現を用いた処理に関する。
【背景技術】
【０００２】
例えばウェブ・ページのＨＴＭＬ（HyperText Markup Language）文書中から、或る可変テキスト部分を検索しまたは抽出するために、正規表現（regular expression）が使用されることがある。
【０００３】
例えば、既知の正規表現の編集ツールであるＲｅｂｕｌａｒでは、ユーザによって入力された正規表現に対して、ＨＴＭＬ文書中で正規表現にマッチまたは適合するテキスト部分がハイライト表示される。
【０００４】
また、例えば、既知の正規表現生成ツールであるＲｅｇｅｘ Ａｓｓｅｍｂｌｅ Ｆｏｒ ＰＨＰでは、ユーザによって入力された複数のテキスト部分にマッチする正規表現が自動的に生成される。
【０００５】
或る既知の情報抽出方法は、正規表現を持つパターン・フォーマットを記憶する記憶部と、ＨＴＭＬページからパターン・フォーマットと一致するテキスト・コンテンツを取り出す抽出ルールを生成する抽出ルール生成部と、抽出ルールを所定フォーマットに変換するフォーマット変換部とを有する。それによって、タグの解析や抽出ルールの作成をしなくても、一般のユーザが有益な情報を持つテキスト・コンテンツを容易に取り出して活用することができるプログラムが提供される。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】特開２００６−２３６２６２号公報
【非特許文献】
【０００７】
【非特許文献１】Rubular 、［online］、［平成25年6月17日検索］、インターネット＜URL：http://www.rubular.com/＞
【非特許文献２】Ｒｅｇｅｘ  Ａｓｓｅｍｂｌｅ  Ｆｏｒ  ＰＨＰ、［online］、［平成25年6月17日検索］、インターネット＜URL：http://rtilabs.net/files/2011_11_02/＞
【非特許文献３】Regexpal 0.1.4、［online］、［平成25年6月17日検索］、インターネット＜http://regexpal.com/＞
【非特許文献４】SeiKiHyoGenKun ver 0.9.6、［online］、［平成25年6月17日検索］、インターネット＜URL：http://yakinikunotare.boo.jp/regexpkun/regexpkun.html＞
【非特許文献５】正規表現チェッカー、［online］、［平成25年6月17日検索］、インターネット＜URL：http://www.asterworld.com/ja/product/010/index.html＞
【非特許文献６】簡易正規表現チェックツール、［online］、［平成25年6月17日検索］、インターネット＜URL：http://autoitjp.at-ninja.jp/tools/RegExpCheck.html＞
【発明の概要】
【発明が解決しようとする課題】
【０００８】
例えばウェブ・ページのＨＴＭＬ文書中の所望の可変テキスト部分を検索しまたは抽出するために、所望の可変テキスト部分に適合する正規表現を作成する作業は、正規表現に精通していない一般のユーザにとって困難な作業である。
【０００９】
既知の正規表現生成ツールでは、ユーザによって入力されたテキストまたはキャラクタ列にのみマッチする正規表現が生成され、所望の可変テキストを抽出するための正規表現を生成させるのは困難である。
【００１０】
発明者は、実際のテキスト文書から、タグ等のテキスト部分の特徴を考慮しつつ正規表現を生成すると、同じ複数のテキスト部分とマッチする余分な複数の候補の正規表現が生成されるという不都合が生じる、と認識した。また、発明者は、複数の候補の正規表現の数を妥当なものに絞込むために、それぞれの既知の数の所望の抽出テキスト部分を含む複数のテキスト文書を、複数の候補の正規表現を用いて検索することによって、抽出漏れおよび抽出ノイズの少ない望ましい正規表現を効率的に決定できる、と認識した。
【００１１】
１つの観点では、本発明の目的は、複数の候補の正規表現の中から、漏れおよび／またはノイズの少ない正規表現を決定することである。
【課題を解決するための手段】
【００１２】
実施形態の一観点によれば、或る文書データにおける所望の１つ以上のテキスト部分に適合する複数の正規表現を記憶部に保存し、複数の文書データの各々におけるその記憶部のその複数の正規表現の各々に適合するテキスト部分の数を求め、前記複数の文書データの各々における所望のテキスト部分の数を取得して、その複数の正規表現の中で、その複数の文書データに関してその適合するテキスト部分の数がその所望のテキスト部分の数と一致する度合の高い正規表現を決定する処理を情報処理装置に実行させるためのプログラム、が提供される。
【発明の効果】
【００１３】
実施形態の一観点によれば、複数の候補の正規表現の中から、漏れおよび／またはノイズの少ない正規表現を決定することができる。
【図面の簡単な説明】
【００１４】
【図１】図１は、実施形態に使用可能な、ネットワークに接続される複数のウェブ・サーバ装置および情報処理端末を含むシステムの概略的な構成（configuration）の例を示している。
【図２】図２は、実施形態に使用可能な情報処理端末の概略的な構成（configuration）の例を示している。
【図３】図３は、情報処理端末のプロセッサの概略的な構成（configuration）の例を示している。
【図４】図４は、候補の正規表現の生成および妥当な正規表現の決定のために、情報処理端末の表示部に表示される表示画面の例を示している。
【図５】図５は、情報処理端末によって実行される、候補の正規表現の生成に使用されるＨＴＭＬ文書のソース・データを取得して格納するための処理のフローチャートの例を示している。
【図６】図６は、情報処理端末によって実行される、ＵＲＩまたはＵＲＬのＨＴＭＬ文書のソース・データを表示して、各ＨＴＭＬ文書のソース・データにおけるテキスト部分の正解数を保存するための処理のフローチャートの例を示している。
【図７Ａ】図７Ａ〜７Ｃは、情報処理端末によって実行される、１つ以上のサンプルのＨＴＭＬ文書のソース・データに基づいて、１つ以上の候補の正規表現を生成するための処理のフローチャートの例を示している。
【図７Ｂ】(図7Aで説明)
【図７Ｃ】(図7Aで説明)
【図８】図８は、指定テキスト部分のグループの例について、ツリーの根ノードに対して順次連鎖的に形成された子ノードおよび葉ノードを含むツリーの例を示している。
【図９Ａ】図９Ａおよび９Ｂは、情報処理端末によって実行される、生成された候補の正規表現に優先度を与えるための処理のフローチャートの例を示している。
【図９Ｂ】(図9Aで説明)
【図１０】図１０は、情報処理端末によって表示される、各候補の正規表現とサンプルのＵＲＩまたはＵＲＬとの各組合せに対するマッチ数、正解数および一致割合を含む表示画面の例を示している。
【発明を実施するための形態】
【００１５】
発明の目的および利点は、請求の範囲に具体的に記載された構成要素および組み合わせによって実現され達成される。
前述の一般的な説明および以下の詳細な説明は、典型例および説明のためのものであって、本発明を限定するためのものではない、と理解される。
【００１６】
本発明の非限定的な実施形態を、図面を参照して説明する。図面において、同様のコンポーネントおよび要素には同じ参照番号が付されている。
【００１７】
例えば、正規表現の編集ツールである既知のサービスＲｅｂｕｌａｒでは、ユーザによって入力された正規表現がＨＴＭＬ文書中の所望のテキスト部分とマッチするかどうかを、試行錯誤で確認することができる。しかし、正規表現そのものは、ユーザによって個々に繰り返し入力されるものであり、ユーザにとってその作業負担は大きい。
【００１８】
また、例えば、既知の正規表現生成ツールであるＲｅｇｅｘ Ａｓｓｅｍｂｌｅ Ｆｏｒ ＰＨＰでは、ユーザによって入力された複数のテキストにマッチする正規表現が自動的に生成される。しかし、この正規表現生成ツールでは、入力されたテキストのみにマッチする正規表現だけが生成され、ユーザの所望の可変テキスト部分を検索または抽出するのに適した望ましい正規表現を生成させるのは困難である。
【００１９】
例えば、タグ＜ｈ１＞と＜／ｈ１＞で挟まれた任意の文字数の任意のテキスト部分を抽出するための正規表現“＜ｈ１＞（［＾＜］＊）＜／ｈ１＞”を用いて、例えば“＜ｈ１＞あああ＜ｈ１＞”、“＜ｈ１＞いいい＜ｈ１＞”のような可変なテキスト部分が自動生成されることが望ましい。しかし、既知の正規表現生成ツールでは、例えば、“＜ｈ１＞（？：あああ｜いいい）＜／ｈ１＞”といった、入力されたテキストにしかマッチしない正規表現が生成される。ここで、“（？：ａ｜ｂ）”は、後方参照を伴わないテキストａとｂの単純なグループ化を表す。このように入力されたテキストにしかマッチしない正規表現が生成される理由は、既知の正規表現生成ツールでは、ｈｔｍｌのタグが固定され、入力されたテキストが可変テキスト部分を表すことを、認識できないからである。
【００２０】
発明者は、実際のＨＴＭＬ文書データから、ＨＴＭＬのタグ等のテキストの特徴または構造を考慮しつつ正規表現を生成すれば、同じテキスト部分の集合とマッチする冗長な複数の候補の正規表現が生成される、と認識した。また、発明者は、複数の候補の正規表現を少数の正規表現に絞込むために、夫々の既知の数の所望の抽出テキスト部分を含む複数のＨＴＭＬ文書データを、複数の候補の正規表現を用いて検索することによって、テキスト部分の抽出漏れおよび抽出ノイズの少ない正規表現を効率的に決定できる、と認識した。
【００２１】
実施形態の目的は、テキスト文書データにおける可変テキスト部分または可変キャラクタ列を検索または抽出するための漏れおよび／またはノイズの少ない正規表現を効率的に決定または生成できるようにすることである。
【００２２】
図１は、実施形態に使用可能な、ネットワーク５に接続される、複数のウェブ・サーバ装置１０、１２および１４、および情報処理端末３０を含むシステムの概略的な構成（configuration）の例を示している。
【００２３】
ネットワーク５は、例えばインターネットのようなＩＰ（Internet Protocol）ネットワークであってもよい。ウェブ・サーバ装置１０〜１４は、ウェブ・サーバとして動作可能な任意のサーバ装置であってもよい。
【００２４】
図２は、実施形態に使用可能な情報処理端末３０の概略的な構成（configuration）の例を示している。
【００２５】
情報処理端末３０は、例えば、デスクトップ型、ノートブック型またはタブレット型のパーソナル・コンピュータのような情報処理装置であってもよい。情報処理端末３０は、例えば、プロセッサ３０２、メモリ３０４および記憶部３３４、ネットワーク・インタフェース（ＮＷ／ＩＦ）３３０、ＵＳＢ通信部３３２、入力部３４２、表示部３４４、および音響部３４６を含んでいる。ネットワーク・インタフェース３３０は、ネットワーク５に、例えばＬＡＮケーブルのようなケーブルを介して接続可能である。ＵＳＢ通信部３３２は、外付けドライブ３３６に接続可能である。ドライブ３３６は、プログラムが記録された例えば光ディスクまたは磁気ディスクのような記録媒体３６４を読み取るためのものであってもよい。
【００２６】
プロセッサ３０２は、コンピュータ用のＣＰＵ（Central Processing Unit）であってもよい。メモリ３０４には、例えば、主記憶装置および半導体メモリ等が含まれる。記憶部３３４には、例えば、ＳＤ（セキュア・ディジタル）メモリまたはハードディスク・ドライブ（ＨＤＤ）が含まれてもよい。
【００２７】
プロセッサ３０２は、例えば集積回路として実装された専用のプロセッサであってもよい。また、プロセッサ３０２は、メモリ３０４または記憶部３３４に格納されたアプリケーション・プログラムに従って動作するものであってもよい。アプリケーション・プログラムは、記録媒体３６４に格納されていて、ドライブ３３６によって記録媒体５６４から読み出されて情報処理端末３０にインストールされてもよい。
【００２８】
入力部３４２は、例えば、複数のキー、タッチパッド、テンキー、キーボード、タッチパネル、および／またはポインティング・デバイスを含んでいてもよい。表示部３４４は、例えば、液晶表示装置、またはタッチパネル付き液晶表示装置であってもよい。音響部３４６は、例えば、マイクロホン、スピーカおよびレシーバを含んでいてもよい。
【００２９】
図３は、情報処理端末３０のプロセッサ３０２の概略的な構成（configuration）の例を示している。
【００３０】
プロセッサ３０２は、制御部３０２０およびアプリケーション部３０２２を含んでいる。プロセッサ３０２は、さらに、ウェブ・ページ取得部３０２４、ブラウザ部３０２６、ソース・データ表示部３０２８、正解数設定部３０３０、候補正規表現生成部３０３２、優先度付与部または決定部３０３４、およびその他の処理部３０４０を含んでいる。優先度付与部または決定部３０３４は、複数の候補の正規表現に優先度を与えて、高い優先度の正規表現を決定する。制御部３０２０は、アプリケーション部３０２２、ウェブ・ページ取得部３０２４、ブラウザ部３０２６、ソース・データ表示部３０２８、正解数設定部３０３０、候補正規表現生成部３０３２、優先度付与部３０３４および処理部３０４０に制御信号を供給して、これらの要素の動作を制御してもよい。ウェブ・ページ取得部３０２４、ソース・データ表示部３０２８、正解数設定部３０３０、候補正規表現生成部３０３２および優先度付与部３０３４の少なくとも一部は、ブラウザ部３０２６またはアプリケーション部３０２２に組み込まれていてもよい。
【００３１】
代替形態として、情報処理端末３０は、サーバ−クライアント・システムにおけるクライアントとして動作してもよい。この場合、情報処理端末３０のプロセッサ３０２は、送受信部３０１２、入力処理部３０１４、および表示処理部３０１６を少なくとも含んでいてもよい。入力処理部３０１４は、ユーザによる入力部３４２の入力操作に応じて入力情報を生成し一時的に格納する。送受信部３０１２は、入力情報をサーバ装置１６へ送信し、サーバ装置１６からアプリケーションの表示画面情報を受信する。表示処理部３０１６は、サーバ装置１６から受信したアプリケーションの表示画面情報を復号し処理してアプリケーションの表示画面を再生成して表示部３４４に表示する。制御部３０２０は、さらに、送受信部３０１２、入力処理部３０１４および表示処理部３０１６に制御信号を供給して、これらの要素の動作を制御してもよい。
【００３２】
図４は、候補の正規表現の生成および妥当な正規表現の決定のために、情報処理端末３０の表示部３４４に表示される表示画面４００の例を示している。表示画面４００は、例えば、ＵＲＩまたはＵＲＬ入力領域４０２、ＨＴＭＬデータ取得ボタンまたはテキスト文書データ取得ボタン４０４、ウェブ・ページ表示領域４０６、ソース・データ表示領域４０８、および正解数入力領域４１０を含んでいる。表示画面４００は、さらに、例えば、正解数保存ボタン４１２、候補の正規表現の自動生成ボタン４１４、候補の正規表現の表示領域４１６、および優先度付与ボタン４１８を含んでいる。
【００３３】
次は、プロセッサ３０２における、アプリケーション部３０２２、ウェブ・ページ取得部３０２４、ブラウザ部３０２６、ソース・データ表示部３０２８、正解数設定部３０３０、候補正規表現生成部３０３２および優先度付与部３０３４によって実行される処理を説明する。
【００３４】
ＨＴＭＬ文書の取得
情報処理端末３０上で、ユーザが、入力部３２４を操作してアプリケーション３０２２またはブラウザ部３０２６における正規表現を作成する機能を選択して起動させる。その起動に応答して、アプリケーション３０２２またはブラウザ部３０２６は、例えば図４の表示画面４００を表示部３４４に表示する。表示画面４００において、初期状態では、ＵＲＩまたはＵＲＬ入力領域４０２、ウェブ・ページ表示領域４０６、ソース・データ表示領域４０８、候補の正規表現の表示領域４１６、等の領域は、空白である。
【００３５】
ユーザは、入力部３４２を用いて、ＵＲＩまたはＵＲＬ入力領域４０２にサンプルまたは事例としての１つのＵＲＩまたはＵＲＬを入力し、ＨＴＭＬデータ取得ボタン４０４を押下操作する。その操作に応答して、ウェブ・ページ取得部３０２４は、ネットワーク５を介して対応するウェブ・サーバ装置１０〜１４からＨＴＭＬ文書データのファイルを取得して記憶部３３４に保存する。ウェブ・ページ取得部３０２４は、表示部３４４上の、例えば図４のウェブ・ページ表示領域４０６に、そのＵＲＩまたはＵＲＬのＨＴＭＬ文書をウェブ・ページとして表示する。そのために、ウェブ・ページ取得部３０２４は、ウェブ・ブラウザ３０２６と協働して、ウェブ・サーバ装置１０〜１４からＨＴＭＬ文書データのファイルを取得し、ウェブ・ページとしてウェブ・ページ表示領域４０６に表示してもよい。同様に、サンプルとしての複数のＵＲＩまたはＵＲＬのＨＴＭＬ文書データのファイルが取得されて記憶部３３４に保存されてもよい。
【００３６】
ＨＴＭＬ文書に対する抽出テキスト部分と正解数の設定
ソース・データ表示部３０２６は、表示部３４４のソース・データ表示領域４０８に、記憶部３３４に保存されたＨＴＭＬ文書のソース・データを表示する。また、正解数設定部３０３０は、表示されたＨＴＭＬ文書のソース・データにおける所望の抽出テキスト部分の正解数Ｄを入力するための正解数入力領域４１０を表示する。ここで、そのテキスト部分は、ＨＴＭＬ文書のソース・データの断片であり、１個以上の連続するキャラクタまたは文字を含むキャラクタ列または文字列であり、タグ・テキストまたはタグ・キャラクタおよび表示テキストまたは表示キャラクタを含んでいてもよい。
【００３７】
ユーザは、その表示されたＨＴＭＬ文書のソース・データおよび／またはウェブ・ページを参照して、入力部３４２を操作して、作成される正規表現によって抽出しようとするソース・データ中の所望の抽出テキスト部分を確認または指定し、例えば図４の正解数入力領域４１０にその正解数Ｄを入力する。ここで、正解数とは、ＨＴＭＬ文書のソース・データについて、ユーザによって指定された抽出テキスト部分の数である。次いで、ユーザは、入力部３４２を用いて、正解数保存ボタン４１２を押下操作する。その操作に応答して、正解数設定部３０３０は、その正解数Ｄを、ＵＲＩまたはＵＲＬおよびそのＨＴＭＬ文書に対応づけて記憶部３３４に保存する。
【００３８】
同様の処理が複数のＵＲＩまたはＵＲＬについて行われて、各ＵＲＩまたはＵＲＬとそのＨＴＭＬ文書に対応づけてそれぞれの正解数Ｄが入力されて記憶部３３４に保存される。また、正解数設定部３０３０は、複数のＵＲＩまたはＵＲＬとその正解数Ｄのリストを作成して、記憶部３３４に保存する。正解数ＤおよびＨＴＭＬ文書の数が多ければ多いほど、正規表現の妥当性の判定の精度が向上するであろう。ＵＲＩまたはＵＲＬと正解数Ｄのリストは、さらに、それぞれのＵＲＩまたはＵＲＬごとの抽出される正解のテキスト部分を含んでいてもよい。
【００３９】
各ＵＲＩまたはＵＲＬに対する正解数Ｄは、例えば、次のようになる。
ＵＲＩ“http://kigyou.homepage.com/kigyouA”に対して、正解数Ｄ＝５、
ＵＲＩ“http://kigyou.homepage.com/kigyouB”に対して、正解数Ｄ＝４、
ＵＲＩ“http://kigyou.homepage.com/kigyouC”に 対して、正解数Ｄ＝５。
【００４０】
次いで、ユーザは、入力部３４２のポインティング・デバイス等でドラッグ操作して、例えばソース・データ表示領域４０８の１つ以上のＨＴＭＬ文書のソース・データにおいて正解として抽出されることを希望する１つまたは２つ以上のテキスト部分またはキャラクタ列を指定する。このＨＴＭＬ文書のソース・データは、候補の正規表現を生成するために用意されたものであってもよい。図４のソース・データ表示領域４０８において、それぞれ破線で囲まれた各テキスト部分は、ユーザによって指定された抽出されることを希望するテキスト部分またはキャラクタ列の例である。そのテキスト部分は、可変の表示テキスト部分またはキャラクタ列を含んでいる。
【００４１】
候補の正規表現の生成
次いで、ユーザは、入力部３４２を用いて、表示部３４４に表示された候補の正規表現の自動生成ボタン４１４を押下操作する。その操作に応答して、候補正規表現生成部３０３２は、ソース・データ表示領域４０８のＨＴＭＬ文書のソース・データにおける、指定された複数のテキスト部分に共通するタグ、属性および値、等を解析して、複数の候補の正規表現を生成して、例えば図４の候補の正規表現の表示領域４１６に表示する。
【００４２】
ユーザは、例えば、企業の基本情報を収集するために、企業情報のサイトのＨＴＭＬ文書のソース・データから、特定の可変項目とその可変値を含む複数のテキスト部分を抽出するのに適した正規表現を作成することを意図しているとする。そのテキスト部分は、例えば、可変項目の表示キャラクタ列“従業員数”、“資本金”、“本社所在地”、“業種分類”および“株価”と、その可変の値またはデータの表示キャラクタ列“３５０人”、“１０００万円”、“福岡県福岡市” 、“機械”および“３００円”であってもよい。この場合、ユーザは、図４のソース・データ表示領域４０８のＨＴＭＬ文書のソース・データにおいて、例えば、次の５つのＨＴＭＬ断片またはテキスト部分Ｆ１〜Ｆ５を指定する。
【００４３】
Ｆ１：  <div class="row1"><span style="font-weight:bold;">従業員数</span></div><div> 350人</div></div>
Ｆ２：  <div class="row2"><span style="font-weight:bold;">資本金</span></div><div>1000万円</div></div>
Ｆ３：  <div class="row1"><span style="font-weight:bold;">本社所在地</span></div><div>福岡県福岡市</div></div>
Ｆ４：  <div class="row2"><span style="font-weight:bold;">業種分類</span></div><div>機械</div></div>
Ｆ５：  <div class="row1"><span style="font-weight:bold;">株価</span></div><div>300円</div></div>
【００４４】
候補正規表現生成部３０３２は、指定テキスト部分Ｆ１〜Ｆ５を解析して、例えば、タグ名、属性名、値のような構造の共通性を判定し、図４の候補の正規表現の表示領域４１６に、全ての指定テキスト部分Ｆ１〜Ｆ５に適合またはマッチする候補の正規表現を生成する。その候補の正規表現は、例えば、次の６つの候補Ｒ１〜Ｒ６の正規表現であってもよい。
【００４５】
Ｒ１：  <div class="([^<]*?)"><span style="font-weight:bold;">(.*?)</span></div><div>(.*?)</div></div>
Ｒ２：  <div class="([^<]*?)"><span style="([^<]*?)">(.*?)</span></div><div>(.*?)</div></div>
Ｒ３：  <div class="([^<]*?)"><span([^<]*?)>(.*?)</span></div><div>(.*?)</div></div>
Ｒ４：  <div ([^<]*?)><span style="font-weight:bold;">(.*?)</span></div><div>(.*?)</div></div>
Ｒ５：  <div ([^<]*?)><span style="([^<]*?)">(.*?)</span></div><div>(.*?)</div></div>
Ｒ６：  <div ([^<]*?)><span([^<]*?)>(.*?)</span></div><div>(.*?)</div></div>
【００４６】
候補正規表現生成部３０３２は、さらに、例えば図４の候補の正規表現の表示領域４１６に、ユーザの別の候補の正規表現Ｒ７を追加的に入力させることができてもよい。それによって、ユーザは、自動生成されなかった自分で作成した候補の正規表現Ｒ７が所望の指定テキスト部分に対して適合性があるかどうかを確認することができる。
【００４７】
候補の正規表現によるマッチ数と正解数の一致の割合の算出
次いで、ユーザは、入力部３４２を用いて、表示部３４４上の優先度付与ボタン４１８を押下操作する。その操作に応答して、優先度付与部３０３４は、候補の正規表現Ｒ１〜Ｒ７の中の１つを取り出す。次いで、優先度付与部３０３４は、対応するＵＲＩまたはＵＲＬと正解数Ｄのリストから、１組のＵＲＩまたはＵＲＬとその正解数Ｄとを取り出す。次いで、優先度付与部３０３４は、そのＵＲＩまたはＵＲＬのＨＴＭＬ文書のソース・データを、候補の正規表現Ｒ１〜Ｒ７の１つで検索して、その候補の正規表現にマッチするテキスト部分を抽出する。次いで、優先度付与部３０３４は、１つのＨＴＭＬ文書について、１つの候補の正規表現を用いた検索の結果として抽出されたテキスト部分の合計数をマッチ数Ｍとして求める。
【００４８】
１つのＨＴＭＬ文書について、１つの候補の正規表現を用いて抽出されたテキスト部分のマッチ数Ｍと正解数Ｄとが一致する（Ｍ＝Ｄ）場合は、優先度付与部３０３４は、例えばそのスコアＳをＳ＝１点と設定する。ここで、スコアＳは、マッチ数Ｍと正解数Ｄの一致の割合または度合を表す。一方、その抽出されたテキスト部分のマッチ数Ｍが正解数Ｄより少ない（Ｍ＜Ｄ）場合は、検索または抽出漏れがあり、優先度付与部３０３４は、スコアＳを、マッチ数Ｍを正解数Ｄで除算した値ＤＦ（ＤＦ＝Ｍ／Ｄ、０＜ＤＦ＜１）と設定する（Ｓ＝ＤＦ＝Ｍ／Ｄ）。また、抽出されたテキスト部分のマッチ数Ｍが正解数Ｄより多い（Ｍ＞Ｄ）場合は、検索または抽出ノイズがあり、優先度付与部３０３４は、スコアＳを、正解数Ｄをマッチ数Ｍで除算した値ＤＮ（ＤＮ＝Ｄ／Ｍ、０＜ＤＮ＜１）と設定する（Ｓ＝ＤＮ＝Ｄ／Ｍ）。このようにして、候補の正規表現ごとに、リスト中の複数のサンプルのＵＲＩまたはＵＲＬのＨＴＭＬ文書のソース・データについて、各候補の正規表現とマッチするテキスト部分の検索または抽出が行われ、候補の正規表現ごとにスコアＳが算出されて、合計スコアＳが得られる。ここで、合計スコアＳは、複数のＨＴＭＬ文書に関するマッチ数Ｍと正解数Ｄの一致の割合または度合を表す指標である。代替形態として、複数のＨＴＭＬ文書に関するマッチ数Ｍと正解数Ｄの一致の割合または度合を表す指標として、例えば、個々のスコアＳの単純平均または二乗平均平方根が用いられてもよい。
【００４９】
また、代替形態として、１つのＨＴＭＬ文書について、１つの候補の正規表現を用いて抽出されたテキスト部分とユーザの所望の抽出テキスト部分の一致の割合または度合（Ｓ）は、マッチ数と正解数または正解数とマッチ数の比とは異なる値として求められてもよい。例えば、その一致の割合または度合は、正解数Ｄに対する、正解数Ｄからマッチ数Ｍの抽出漏れ数Ｆを減じた数値の一致の割合（Ｄ−Ｆ）／Ｄと、正解数Ｄに対する、正解数Ｄからマッチ数Ｍの抽出ノイズ数Ｎを減じた数値の一致の割合（Ｄ−Ｎ）／Ｄとの平均値、として求められてもよい。この場合、スコアＳは、Ｓ＝（Ｄ−Ｆ）／２Ｄ＋（Ｄ−Ｎ）／２Ｄで表される。ここで、Ｄ−Ｎ＜０の場合、（Ｄ−Ｎ）／Ｄは０で置換されてもよい。或いは、例えば、その一致の割合または度合は、正解数Ｄに対する、正解数Ｄから抽出漏れ数Ｆを減じた数値の一致の割合（Ｄ−Ｆ）／Ｄと、正解数Ｄと抽出ノイズ数Ｎの和に対する正解数Ｄの一致の割合Ｄ／（Ｄ＋Ｎ）との平均値、として求められてもよい。この場合、スコアＳは、Ｓ＝（Ｄ−Ｆ）／２Ｄ＋Ｄ／２（Ｄ＋Ｎ）で表される。
【００５０】
候補の正規表現の優先度の付与および表示
優先度付与部３０３４は、候補の正規表現Ｒ１〜Ｒ７の中で、合計スコアＳがより高い候補の正規表現を、より高い優先度Ｐの候補の正規表現として決定する。次いで、優先度付与部３０３４は、表示部３４４の、例えば図４のような候補の正規表現の表示領域４１６に、候補の正規表現Ｒ１〜Ｒ７を優先度順に提示する。ユーザは、候補の正規表現Ｒ１〜Ｒ７の中から所望の候補の正規表現を、検索に使用される正規表現Ｒとして選択しまたは決定する。それによって、ユーザは、所望の可変テキスト部分を検索し抽出するのに適した正規表現Ｒを容易に効率的に生成しまたは選択することができる。
【００５１】
次は、サンプルのＵＲＩまたはＵＲＬに基づいて、候補の正規表現が生成され、候補の正規表現に優先度が付与されて提示または表示されるまでの具体的な手順を説明する。
【００５２】
図５は、情報処理端末３０によって実行される、候補の正規表現の生成に使用されるＨＴＭＬ文書のソース・データを取得して格納するための処理のフローチャートの例を示している。
【００５３】
図５を参照すると、ステップ５１０において、情報処理端末３０のプロセッサ３０２（またはそのウェブ・ページ取得部３０２４）は、ユーザにＵＲＩまたはＵＲＬ入力領域４０２に、所望のＵＲＩまたはＵＲＬを入力させる。
【００５４】
ステップ５１２において、プロセッサ３０２（ウェブ・ページ取得部３０２４）は、ネットワーク５を介して、ＵＲＩまたはＵＲＬに対応するウェブ・サーバ装置１０〜１４からＵＲＩまたはＵＲＬのＨＴＭＬ文書のソース・データを取得する。その際、プロセッサ３０２（ウェブ・ページ取得部３０２４）は、ウェブ・ブラウザ３０２６を起動してウェブ・ブラウザ３０２６と協働して、ＵＲＩまたはＵＲＬのＨＴＭＬ文書のソース・データにアクセスしてもよい。
【００５５】
ステップ５１４において、プロセッサ３０２（ウェブ・ページ取得部３０２４）は、取得されたＨＴＭＬ文書のソース・データを記憶部３３４に保存する。その後、手順は図５のルーチンを出る。
【００５６】
ユーザは、候補の正規表現を生成しその妥当性を確認するためのサンプルとして使用されるＵＲＩまたはＵＲＬの数の分だけ、図５の処理を繰り返し実行する。それによって、サンプルとして使用されるＵＲＩまたはＵＲＬの数のＨＴＭＬ文書のソース・データのファイルが、記憶部３３４に保存される。
【００５７】
図６は、情報処理端末３０によって実行される、ＵＲＩまたはＵＲＬのＨＴＭＬ文書のソース・データを表示して、各ＨＴＭＬ文書のソース・データにおけるテキスト部分の正解数Ｄを保存するための処理のフローチャートの例を示している。
【００５８】
図６を参照すると、ステップ５２０において、プロセッサ３０２（またはそのソース・データ表示部３０２６）は、ユーザに、候補の正規表現の妥当性を確認するためのＨＴＭＬ文書のＵＲＩまたはＵＲＬを、ＵＲＩまたはＵＲＬ入力領域４０２に入力させる。
【００５９】
ステップ５２２において、プロセッサ３０２（ソース・データ表示部３０２６）は、入力されたＵＲＩまたはＵＲＬに対応するＨＴＭＬ文書のソース・データを記憶部３３４から取り出してソース・データ表示領域４０８に表示する。
【００６０】
ステップ５２４において、プロセッサ３０２（またはその正解数設定部３０３０）は、ソース・データ表示領域４０８のＨＴＭＬ文書のソース・データにおける、ユーザが抽出を希望するテキスト部分の数を、正解数Ｄとして正解数入力領域４１０に入力させる。さらに、プロセッサ３０２（正解数設定部３０３０）は、ソース・データ表示領域４０８のＨＴＭＬ文書のソース・データにおける、ユーザが抽出を希望するテキスト部分を指定させてもよい。
【００６１】
ステップ５２６において、プロセッサ３０２（正解数設定部３０３０）は、各正解数Ｄをそれぞれの１つのＵＲＩまたはＵＲＬに対応づけて記憶部３３４に保存する。さらに、プロセッサ３０２（正解数設定部３０３０）は、ＨＴＭＬ文書のソース・データにおけるその指定されたテキスト部分を、それぞれのＵＲＩまたはＵＲＬデータに対応づけて記憶部３３４に保存してもよい。
【００６２】
ステップ５２８において、プロセッサ３０２（ソース・データ表示部３０２６）は、全てのＵＲＩまたはＵＲＬに関する入力が終了したか、即ち全てのサンプルのＨＴＭＬ文書について正解数Ｄが入力されたかどうかを判定する。入力が終了したと判定された場合は、手順は図６のルーチンを出る。入力が終了していないと判定された場合は、手順はステップ５２０に戻る。
【００６３】
このようにして、ステップ５２０〜５２６が繰り返し実行されることによって、サンプルとして使用される各ＨＴＭＬ文書のＵＲＩまたはＵＲＬごとの、所望の抽出テキスト部分の数または正解数Ｄのリストが、生成されて記憶部３３４に保存される。
【００６４】
図７Ａ〜７Ｃは、情報処理端末３０によって実行される、１つ以上のサンプルのＨＴＭＬ文書のソース・データに基づいて、１つ以上の候補の正規表現を生成するための処理のフローチャートの例を示している。
【００６５】
図７Ａを参照すると、ステップ６０２において、プロセッサ３０２（またはその候補正規表現生成部３０３２）は、候補の正規表現を生成するためのＵＲＩまたはＵＲＬの１つ以上のＨＴＭＬ文書のソース・データをソース・データ表示領域４０８に表示する。プロセッサ３０２（候補正規表現生成部３０３２）は、ソース・データ表示領域４０８のソース・データにおいて１つまたは２つ以上の所望の抽出テキスト部分を、ユーザに指定させて抽出する。そのために、ユーザは、入力部３４２を操作して、ソース・データ表示領域４０８のＨＴＭＬ文書のソース・データにおいて、所望の抽出テキスト部分を指定する。その際、プロセッサ３０２（候補正規表現生成部３０３２）は、指定されたテキスト部分を、識別可能な形態でハイライト（強調）表示してもよい。所望の抽出テキスト部分または断片として、例えば、上述の指定テキスト部分Ｆ１〜Ｆ５が、指定されて抽出されてもよい。
【００６６】
ステップ６０４において、プロセッサ３０２（候補正規表現生成部３０３２）は、初期設定として、候補の正規表現の一部を形成する短いテキスト部分またはキャラクタ列を保存するための一時的なリストをクリアする。また、一時的なリストは、後で説明されるように、生成されて一時的に格納された短いテキスト部分が、他の根ノードまたは子ノードにリンクされる子ノードとして記憶部３３４のツリー構造記憶領域に保存された後、次の新しい短いテキスト部分を保存するために再びクリアされる。
【００６７】
ステップ６０６〜６１８は、１つ以上のＨＴＭＬ文書のソース・データにおいて指定された１つ以上の指定テキスト部分（例えば、Ｆ１〜Ｆ５）の各々に対して、順次繰り返し実行される。
【００６８】
ステップ６０８において、プロセッサ３０２（候補正規表現生成部３０３２）は、１つの指定テキスト部分において、現在のポインタが位置するキャラクタを読み取って、ポインタを次のキャラクタ位置に進める。最初は、ポインタの位置する各テキスト部分の最初または先頭のキャラクタが読み取られる。ここで、キャラクタは、文字、数字、またはその他の符号もしくは記号であってもよい。ポインタは、最初、例えば、上述の指定テキスト部分Ｆ１中の最初の１つのキャラクタ“<”に位置する。
【００６９】
ステップ６１０において、プロセッサ３０２（候補正規表現生成部３０３２）は、その読み取られたキャラクタがタグの最初の記号キャラクタ“<”（レフト・アングル）であるかどうかを判定する。そのキャラクタが記号“<”であると判定された場合は、手順はステップ６１２に進む。例えば、指定テキスト部分Ｆ１のキャラクタ列では、最初のポインタ位置のキャラクタは“<”である。そのキャラクタが記号“<”でないと判定された場合は、手順はステップ６１４に進む。
【００７０】
ステップ６１２において、プロセッサ３０２（候補正規表現生成部３０３２）は、その後にある次の記号“>”（ライト・アングル）までの１つ以上のキャラクタを読取って、ポインタをその次のキャラクタへ進める。それによって、記号“<”から“>”までの短いテキスト部分またはキャラクタ列が読み取られる。その記号“<”から“>”までの短いキャラクタ列は、１つのタグを表すものと想定される。例えば、上述の指定テキスト部分Ｆ１では、最初のキャラクタ“<”から次のキャラクタ“>”までのキャラクタ列はタグ“<div class="row1">”である。
【００７１】
ステップ６１４において、プロセッサ３０２（候補正規表現生成部３０３２）は、次の記号“<”の直前までのキャラクタを読み取って、ポインタを記号“<”の位置へ進めるか、または、記号“<”が存在しない場合には、最後までのキャラクタを読取る。最初のキャラクタが記号“<”でない場合の最初から次の記号“<”の直前までのキャラクタ列は、タグでない可変の表示キャラクタ列のデータを表すものと想定される。
【００７２】
ステップ６１６において、プロセッサ３０２（候補正規表現生成部３０３２）は、その読み取られた短いテキスト部分またはキャラクタ列を、記憶部３３４の一時的リストに格納する。例えば、上述の指定テキスト部分Ｆ１では、最初、一時的リストは、次の１つのキャラクタ列を含んでいる。
<div class="row1">
【００７３】
１つ以上のＨＴＭＬ文書の１つ以上のテキスト部分の各々についてステップ６０６〜６１８が繰り返されることによって、１つ以上のＨＴＭＬ文書の１つ以上のテキスト部分の各々における互いに対応する位置にある１つのタグまたは表示データのキャラクタ列が一時的リストに格納される。その後、手順はステップ６２２に進む。
【００７４】
ステップ６０６〜６１６が、例えば、指定テキスト部分Ｆ１〜Ｆ５の各々に対して繰り返し実行されると、一時的リストは、次のような、互いに対応する位置にある短いキャラクタ列である５つの部分Ｐ１〜Ｐ５のリストを含むこととなる。
Ｐ１：  <div class="row1">
Ｐ２：  <div class="row2">
Ｐ３：  <div class="row1">
Ｐ４：  <div class="row2">
Ｐ５：  <div class="row1">
この時点で、指定テキスト部分Ｆ１〜Ｆ５における各ポインタは、その次の位置にあるキャラクタ“<”に位置する。
【００７５】
ステップ６２２において、プロセッサ３０２（候補正規表現生成部３０３２）は、タグ、属性および値、等を解析するために、その一時的リスト中の１つ以上の短いキャラクタ列のデータを同時に検査または走査する。例えば、上述の５つの部分Ｐ１〜Ｐ５が同時に検査される。
【００７６】
以下で説明するように、図７Ｂのステップ６２４〜図７Ｃのステップ６６４は、一時的リスト中の１つ以上のキャラクタ列（例えば、Ｐ１〜Ｐ５）のグループについて、実行されて、可能な場合には１つ以上の候補の正規表現の部分的なキャラクタ列が生成される。その生成のために、記憶部３３４にツリー構造記憶領域が形成されて、初期状態で、そのツリー構造記憶領域にツリーの根ノードが生成されて保存される。一時的リスト中の１つ以上の指定テキスト部分（例えば、Ｆ１〜Ｆ５）のタグおよび非タグの短いキャラクタ列に対して、ステップ６２４〜６６２が実行されることによって、根ノードに対して、候補の正規表現の各部分を表すテキスト部分が子ノードとして連結またはリンクされる。
【００７７】
図８は、上述の指定テキスト部分Ｆ１〜Ｆ５のグループの例について、ツリーの根ノードに対して順次連鎖的に形成された子ノードおよび葉ノードを含むツリーの例を示している。
【００７８】
図７Ｂを参照すると、ステップ６２４において、プロセッサ３０２（候補正規表現生成部３０３２）は、一時的リストのキャラクタ列において、タグと非タグのキャラクタ列が混在しているかどうかを判定する。タグと非タグのキャラクタ列が混在していない、またはタグのみ若しくはタグ以外のキャラクタ列のみが含まれていると判定された場合は、手順は、ステップ６２６に進む。例えば、上述の５つの部分Ｐ１〜Ｐ５は、共にｄｉｖタグのみを含んでおり、タグと非タグのキャラクタ列が混在していない。タグと非タグのキャラクタ列が混在していると判定された場合は、図７Ａ〜７Ｃのルーチンを出る。この場合、５つの部分Ｐ１〜Ｐ５を同時に満たす正規表現を生成することはできないので、例えば、テキスト部分の指定エラーとして処理され表示されてもよい。
【００７９】
ステップ６２６において、プロセッサ３０２（候補正規表現生成部３０３２）は、一時的リストのキャラクタ列において、全てのキャラクタ列がタグ以外（非タグ）のキャラクタ列かどうかを判定する。全てのキャラクタ列がタグ以外のキャラクタ列であると判定された場合は、手順はステップ６２８に進む。全てのキャラクタ列がタグ以外のキャラクタ列でないまたはタグのキャラクタ列であると判定された場合は、手順はステップ６３２に進む。例えば、上述の５つの部分Ｐ１〜Ｐ５は、共にｄｉｖタグのみを含んでおり、全てがタグのキャラクタ列である。
【００８０】
ステップ６２８において、プロセッサ３０２（候補正規表現生成部３０３２）は、ツリー構造記憶領域のツリーの根ノードまたは全ての末端の子ノードに対して、子ノードとしてキャラクタ列“（．＊？）”を追加する。子ノード“（．＊？）”によって、非タグの連続する任意の数の表示キャラクタが抽出できる。その後、手順は図７Ｃのステップ６６０へ進む。
【００８１】
ステップ６３２において、プロセッサ３０２（候補正規表現生成部３０３２）は、一時的リストのキャラクタ列が同一種類の終了タグであるかどうかを判定する。データが同一種類の終了タグであると判定された場合は、手順はステップ６３４に進む。例えば、上述の５つの部分Ｐ１〜Ｐ５は、共に開始タグであり、終了タグではない。データが同一種類の終了タグでないと判定された場合は、手順はステップ６３６に進む。
【００８２】
ステップ６３４において、プロセッサ３０２（候補正規表現生成部３０３２）は、ツリーの根ノードまたは全ての末端の子ノードに対して、子ノード“＜タグ名／＞”を追加する。子ノード“＜タグ名／＞”の追加によって、特定のタグ名の終了タグを表すキャラクタ列が抽出できる。その後、手順は図７Ｃのステップ６６０へ進む。
【００８３】
ステップ６３６において、プロセッサ３０２（候補正規表現生成部３０３２）は、一時的リストのキャラクタ列が同一種類の開始タグであるかどうかを判定する。一時的リストのキャラクタ列が同一種類の開始タグであると判定された場合は、手順はステップ６４２に進む。例えば、上述の５つの部分Ｐ１〜Ｐ５は、共に同一種類の開始タグである。一時的リストのキャラクタ列が同一種類の開始タグでないと判定された場合は、手順は図７Ａ〜７Ｃのルーチンを出る。この場合、一時的なリスト中のキャラクタ列を同時に満たす正規表現を生成することはできないので、例えば、テキスト部分の指定エラーとして処理されて表示されてもよい。
【００８４】
ステップ６４２において、プロセッサ３０２（候補正規表現生成部３０３２）は、一時的リストのキャラクタ列において、開始タグに属性があるかどうかを判定する。開始タグに属性がないと判定された場合は、手順は、ステップ６４４に進む。開始タグに属性があると判定された場合は、手順はステップ６４６に進む。例えば、上述の５つの部分Ｐ１〜Ｐ５は、全ての開始ｄｉｖタグには属性“class”がある。
【００８５】
ステップ６４４において、プロセッサ３０２（候補正規表現生成部３０３２）は、ツリーの根ノードまたは全ての末端の子ノードに対して、子ノード“＜タグ名＞”を追加する。子ノード“＜タグ名＞”によって、特定のタグ名の開始タグのキャラクタ列が抽出できる。その後、手順は図７Ｃのステップ６６０へ進む。
【００８６】
ステップ６４６において、プロセッサ３０２（候補正規表現生成部３０３２）は、一時的リストの開始タグのキャラクタ列について、属性名が共通かどうかを判定する。属性名が共通であると判定された場合は、手順はステップ６５２に進む。例えば、上述の５つの部分Ｐ１〜Ｐ５は、全ての開始ｄｉｖタグには共通の属性“class”がある。属性名が共通でないと判定された場合は、手順はステップ６４８に進む。
【００８７】
ステップ６４８において、プロセッサ３０２（候補正規表現生成部３０３２）は、ツリーの根ノードまたは全ての末端の子ノードに対して、子ノード“＜タグ名（．＊？）＞”を追加する。子ノード“＜タグ名（．＊？）＞”によって、属性を表す連続する任意の数のキャラクタを含む相異なる特定のタグ名の開始タグを表す短いキャラクタ列が抽出できる。その後、手順は図７Ｃのステップ６６０へ進む。
【００８８】
ステップ６５２において、プロセッサ３０２（候補正規表現生成部３０３２）は、一時的リストの開始タグのキャラクタ列について、属性値が共通かどうかを判定する。属性値が共通であると判定された場合は、手順はステップ６５６に進む。属性値が共通でないと判定された場合は、手順はステップ６５４に進む。例えば、上述の５つの部分Ｐ１〜Ｐ５では、ｄｉｖタグの属性値“row1”と“row2”が共通でない。
【００８９】
ステップ６４５において、プロセッサ３０２（候補正規表現生成部３０３２）は、ツリーの根ノードまたは全ての末端の子ノードに対して、２つの子ノード“＜タグ名（．＊？）＞”および“＜タグ名 属性名＝“（［＾＜］＊？）”＞”を追加する。例えば、上述の５つの部分Ｐ１〜Ｐ５の場合、図８に示されているように、異なる２つのキャラクタ列が、根ノードにリンクされる次の２つの子ノードとして形成される。
Ｃ１：  <div(.*?)>
Ｃ２：  <div class="([^<*?">
子ノード“<div(.*?)>”および“<div class="([^<]*?)>”の追加によって、それぞれ異なる属性値の同じ属性名を有する開始タグのキャラクタ列が抽出できる。その後、手順は図７Ｃのステップ６６０へ進む。
【００９０】
ステップ６５６において、プロセッサ３０２（候補正規表現生成部３０３２）は、ツリーの根ノードまたは全ての末端の子ノードに対して、３つの子ノード“＜タグ名（［＾＜］＊？”＞”、“＜タグ名 属性名＝“（［＾＜］＊？）”＞”および“＜タグ名 属性名＝値＞”を追加する。３つの子ノードのキャラクタ列“＜タグ名（［＾＜］＊？”＞”、“＜タグ名 属性名＝“（［＾＜］＊？）”＞”および“＜タグ名 属性名＝値＞”によって、同じ属性値の同じ属性名を有する開始タグのキャラクタ列が抽出できる。その後、手順は図７Ｃのステップ６６０へ進む。
【００９１】
図７Ｃを参照すると、ステップ６６０において、プロセッサ３０２（候補正規表現生成部３０３２）は、全てのポインタが指す位置にキャラクタが存在しないかどうかを判定する。全てのポインタの指す位置にキャラクタが存在しないと判定された場合は、手順はステップ６６４に進む。いずれかのポインタの指す位置にキャラクタが存在すると判定された場合は、手順はステップ６６２に進む。例えば、上述の５つの部分Ｐ１〜Ｐ５の場合、指定テキスト部分Ｆ１〜Ｆ５において全てのポインタの指す位置に次のキャラクタ“<”が存在する。
【００９２】
ステップ６６２において、プロセッサ３０２（候補正規表現生成部３０３２）は、全てのポインタの指す位置にキャラクタが存在するかどうかを判定する。全てのポインタの指す位置にキャラクタが存在すると判定された場合は、手順は図７Ａのステップ６０４に戻る。例えば、上述の５つの部分Ｐ１〜Ｐ５の場合、指定テキスト部分Ｆ１〜Ｆ５において全てのポインタの指す位置に次のキャラクタ“<”が存在する。いずれかのポインタの指す位置にキャラクタが存在しないと判定された場合は、手順は図７Ａ〜７Ｃのルーチンを出る。この場合、共通の正規表現が得られず、従って候補の正規表現は生成できない。
【００９３】
ステップ６６４において、プロセッサ３０２（候補正規表現生成部３０３２）は、ツリーの根ノードから各葉ノードまでの一連のリンクされた複数のキャラクタ列を１つの候補の正規表現とする、全ての候補の正規表現のリストを、記憶部３３４に保存する。この時点で、１つ以上のＵＲＩまたはＵＲＬのＨＴＭＬ文書の１つまたは２つ以上のテキスト部分に対して１つ以上の候補の正規表現のリストが生成される。プロセッサ３０２（候補正規表現生成部３０３２）は、さらに、例えば図４の候補の正規表現の表示領域４１６に、ユーザによって作成された別の候補の正規表現を追加的に入力させて、候補の正規表現のリスト中に含ませて記憶部３３４に保存してもよい。その後、手順は図７Ａ〜７Ｃのルーチンを出る。
【００９４】
次は、上述の指定テキスト部分Ｆ１〜Ｆ５の例について、図７Ａ〜７Ｃの処理が行われて、上述の図９の２つの子ノード“＜ｄｉｖ（.＊？）＞”および“＜ｄｉｖ  ｃｌａｓｓ＝“（［＾＜］＊？＞”にリンクする子ノードが順次形成されて、１つ以上の候補の正規表現が生成される手順を説明する。
【００９５】
ステップ６５４において指定テキスト部分Ｆ１〜Ｆ５について正規表現の部分を表す２つの子ノードＣ１、Ｃ２が形成された後、手順はステップ６６２からステップ６０４に戻る。次のステップ６０４において、初期設定として、候補の正規表現の一部を形成する次の新しい短いテキスト部分またはキャラクタ列を保存するために、一時的なリストがクリアされる。
【００９６】
ステップ６０８において、指定テキスト部分Ｆ１のキャラクタ列中の２番目の１つのキャラクタ“<”が読み取られる。従って、ステップ６１０の後のステップ６１２において、指定テキスト部分Ｆ１では、次のキャラクタ“>”までの短いキャラクタ列“<span style="font-weight:bold;">”が読み取られる。ステップ６１６において、指定テキスト部分Ｆ１について、一時的リストは、例えば次のキャラクタ列を含んでいる。
<span style="font-weight:bold;">
【００９７】
ステップ６０６〜６１６が、さらに他の指定テキスト部分Ｆ２〜Ｆ５に対して同様に実行されて、一時的リストは、次のような、互いに対応する位置にある短いキャラクタ列の５つの部分Ｐ１〜Ｐ５を含むこととなる。
Ｐ１：  <span style="font-weight:bold;">
Ｐ２：  <span style="font-weight:bold;">
Ｐ３：  <span style="font-weight:bold;">
Ｐ４：  <span style="font-weight:bold;">
Ｐ５：  <span style="font-weight:bold;">
【００９８】
この時点で、指定テキスト部分Ｆ１〜Ｆ５における各ポインタは、“<span style="font-weight:bold;">”の次のキャラクタ“従”、“資”、“本”、“業”、“株”にそれぞれ位置する。
【００９９】
次いで、ステップ６２２において、５つの部分Ｐ１〜Ｐ５が同時に検査または走査される。ステップ６２４において、５つの部分Ｐ１〜Ｐ５は、共にｓｐａｎタグのみを含んでおり、タグと非タグのキャラクタ列が混在していないと判定される。ステップ６２６において、５つの部分Ｐ１〜Ｐ５は、共にｓｐａｎタグのみを含んでおり、全てがタグであり、タグのキャラクタ列であると判定される。ステップ６３２において、５つの部分Ｐ１〜Ｐ５は、共に開始タグであり、終了タグではないと判定される。
【０１００】
ステップ６３６において、５つの部分Ｐ１〜Ｐ５は、共に同一種類の開始タグであると判定される。ステップ６４２において、５つの部分Ｐ１〜Ｐ５は、全ての開始ｓｐａｎタグに属性“style”があると判定される。ステップ６４６において、５つの部分Ｐ１〜Ｐ５は、全ての開始ｓｐａｎタグに共通の属性名“style”があると判定される。ステップ６５２において、５つの部分Ｐ１〜Ｐ５は、全ての開始ｓｐａｎタグに共通の属性値“font-weight:bold;”があると判定される。ここで、属性値“font-weight:bold;”は文字の太さが太字（ボールド）であることを表す。
【０１０１】
ステップ６５６において、図９に示されているように、ツリーの２つの末端の子ノード“<div(.*?)>”と“<div class="([^<]*?)>”に、それぞれ３つの子ノード“＜タグ名（［＾＜］＊？”＞”、“＜タグ名 属性名＝“（［＾＜］＊？）”＞”、および“＜タグ名 属性名＝値＞”が追加される。この場合、ツリーの末端の子ノードＣ１“<div class="([^<]*?)">”にリンクする次の３つの子ノードが追加される。
Ｃ１１：  <span style="font-weight:bold;">
Ｃ１２：  <span style="([^<]*?)">
Ｃ１３：  <span([^<]*?)>
また、ツリーの末端の子ノードＣ２“<div class="([^<]*?)>”にリンクする次の３つの子ノードが追加される。
Ｃ２１：  <span style="font-weight:bold;">
Ｃ２２：  <span style="([^<]*?)">
Ｃ２３：  <span([^<]*?)>
【０１０２】
その後のステップ６６０において、５つの部分Ｐ１〜Ｐ５について、指定テキスト部分Ｆ１〜Ｆ５における各ポインタ位置に、次のキャラクタ“従”、“資”、“本”、“業”、“株”が存在するので、いずれかのポインタの指す位置にキャラクタが存在すると判定される。ステップ６６２において、５つの部分Ｐ１〜Ｐ５について、指定テキスト部分Ｆ１〜Ｆ５における各ポインタ位置に、次のキャラクタ“従”、“資”、“本”、“業”、“株”が存在するので、全てのポインタの指す位置にキャラクタが存在すると判定されて、手順は図７Ａのステップ６０４に戻る。
【０１０３】
ステップ６０４において、初期設定として、テキストを保存するための一時的なリストがクリアされる。ステップ６０８において、例えば、指定テキスト部分Ｆ１のキャラクタ列中の１つのキャラクタ“従”が読み取られる。この場合、ステップ６１０の後のステップ６１４において、指定テキスト部分Ｆ１について、次のキャラクタ“<”の直前までのキャラクタ列“従業員数”が読み取られる。従って、ステップ６１６において、指定テキスト部分Ｆ１について、一時的リストは、次のキャラクタ列を含んでいる。
従業員数
【０１０４】
ステップ６０６〜６１６が、さらに他の指定テキスト部分Ｆ２〜Ｆ５に対して同様に実行されて、一時的リストは、次のような、互いに対応する位置にある短いキャラクタ列の５つの部分Ｐ１〜Ｐ５を含むこととなる。
Ｐ１：  従業員数
Ｐ２：  資本金
Ｐ３：  本社所在地
Ｐ４：  業種分類
Ｐ５：  株価
【０１０５】
この時点で、指定テキスト部分Ｆ１〜Ｆ５における各ポインタは、“従業員数”、“資本金”、“本社所在地”、“業種分類”、“株価”の次のキャラクタ“<”に位置する。
【０１０６】
次いで、ステップ６２２において、５つの部分Ｐ１〜Ｐ５が同時に検査または走査される。ステップ６２４において、５つの部分Ｐ１〜Ｐ５は、非タグのキャラクタ列のみを含んでおり、タグと非タグのキャラクタ列が混在していないと判定される。ステップ６２６において、５つの部分Ｐ１〜Ｐ５は、タグ以外のキャラクタ列のみを含んでおり、全てがタグ以外のキャラクタ列であると判定される。
【０１０７】
ステップ６２８において、図９に示されているように、ツリーの６つの各末端の子ノードＣ１１、Ｃ１２、Ｃ１３、Ｃ２１、Ｃ２２、Ｃ２３にそれぞれリンクする次のような子ノード（．＊？）が追加される。
Ｃ１１１：  (.*?)
Ｃ１２１：  (.*?)
Ｃ１３１：  (.*?)
Ｃ２１１：  (.*?)
Ｃ２２１：  (.*?)
Ｃ２３１：  (.*?)
【０１０８】
その後のステップ６６０において、５つの部分Ｐ１〜Ｐ５について、指定テキスト部分Ｆ１〜Ｆ５における各ポインタの指す位置に次のキャラクタ“<”が存在するので、いずれかのポインタの指す位置にキャラクタが存在すると判定される。ステップ６６２において、５つの部分Ｐ１〜Ｐ５について、指定テキスト部分Ｆ１〜Ｆ５において各ポインタの指す位置に次のキャラクタ“<”が存在するので、全てのポインタの指す位置にキャラクタが存在すると判定されて、手順は図７Ａのステップ６０４に戻る。
【０１０９】
ステップ６０４において、初期設定として、テキストを保存するための一時的なリストがクリアされる。ステップ６０８において、指定テキスト部分Ｆ１のキャラクタ列中の３番目の１つのキャラクタ“<”が読み取られる。この場合、ステップ６１０の後のステップ６１２において、指定テキスト部分Ｆ１のキャラクタ列では、次のキャラクタ“>”までのキャラクタ列“</span>”が読み取られる。従って、ステップ６１６において、指定テキスト部分Ｆ１について、一時的リストは、次の１つのキャラクタ列を含んでいる。
<span style="font-weight:bold;">
【０１１０】
ステップ６０６〜６１６が、さらに他の指定テキスト部分Ｆ２〜Ｆ５に対して同様に実行されて、一時的リストは、次のような、互いに対応する位置にある短いキャラクタ列の５つの部分Ｐ１〜Ｐ５を含むこととなる。
Ｐ１：  </span>
Ｐ２：  </span>
Ｐ３：  </span>
Ｐ４：  </span>
Ｐ５：  </span>
【０１１１】
この時点で、指定テキスト部分Ｆ１〜Ｆ５における各ポインタは、“</span>”の次のキャラクタ“<”にそれぞれ位置する。
【０１１２】
次いで、ステップ６２２において、５つの部分Ｐ１〜Ｐ５が同時に検査または走査される。ステップ６２４において、５つの部分Ｐ１〜Ｐ５は、共にｓｐａｎタグのみを含んでおり、タグと非タグのキャラクタ列が混在していないと判定される。ステップ６２６において、５つの部分Ｐ１〜Ｐ５は、共にｓｐａｎタグのみを含んでおり、全てがタグであり、タグのキャラクタ列があると判定される。ステップ６３２において、５つの部分Ｐ１〜Ｐ５は、共に終了タグであると判定される。
【０１１３】
ステップ６３４において、図９に示されているように、ツリーの６つの各末端の子ノードＣ１１１、Ｃ１２１、Ｃ１３１、Ｃ２１１、Ｃ２２１、Ｃ２３１に対して、それぞれ次のような子ノード“</span>”が追加される。
Ｃ１１１１：  </span>
Ｃ１２１１：  </span>
Ｃ１３１１：  </span>
Ｃ２１１１：  </span>
Ｃ２２１１：  </span>
Ｃ２３１１：  </span>
【０１１４】
その後のステップ６６０において、５つの部分Ｐ１〜Ｐ５について、指定テキスト部分Ｆ１〜Ｆ５における各ポインタの指す位置に次のキャラクタ“<”が存在するので、いずれかのポインタの指す位置にキャラクタが存在すると判定される。ステップ６６２において、５つの部分Ｐ１〜Ｐ５について、指定テキスト部分Ｆ１〜Ｆ５において各ポインタの指す位置に次のキャラクタ“<”が存在するので、全てのポインタの指す位置にキャラクタが存在すると判定されて、手順は図７Ａのステップ６０４に戻る。
【０１１５】
ステップ６０４において、初期設定として、テキストを保存するための一時的なリストがクリアされる。ステップ６０８において、指定テキスト部分Ｆ１のキャラクタ列中の４番目の１つのキャラクタ“<”が読み取られる。従って、ステップ６１０の後のステップ６１２において、指定テキスト部分Ｆ１について、次のキャラクタ“>”までのキャラクタ列“</div>”が読み取られる。従って、ステップ６１６において、指定テキスト部分Ｆ１について、一時的リストは、次の１つのキャラクタ列を含んでいる。
</div>
【０１１６】
ステップ６０６〜６１６が、さらに他の指定テキスト部分Ｆ２〜Ｆ５に対して同様に実行されて、一時的リストは、次のような、互いに対応する位置にある短いキャラクタ列の５つの部分Ｐ１〜Ｐ５を含むこととなる。
Ｐ１：  </div>
Ｐ２：  </div>
Ｐ３：  </div>
Ｐ４：  </div>
Ｐ５：  </div>
【０１１７】
この時点で、指定テキスト部分Ｆ１〜Ｆ５における各ポインタは、“</div>”の次のキャラクタ“<”にそれぞれ位置する。
【０１１８】
次いで、ステップ６２２において、５つの部分Ｐ１〜Ｐ５が同時に検査または走査される。ステップ６２４において、５つの部分Ｐ１〜Ｐ５は、共にｄｉｖタグのみを含んでおり、タグと非タグのキャラクタ列が混在していないと判定される。ステップ６２６において、５つの部分Ｐ１〜Ｐ５は、共にｄｉｖタグのみを含んでおり、全てがタグであり、タグのキャラクタ列があると判定される。ステップ６３２において、５つの部分Ｐ１〜Ｐ５は、共に終了タグであると判定される。
【０１１９】
ステップ６３４において、図９に示されているように、ツリーの６つの各末端の子ノードＣ１１１１、Ｃ１２１１、Ｃ１３１１、Ｃ２１１１、Ｃ２２１１、Ｃ２３１１に対して、それぞれ次のような子ノード“</div>”が追加される。
Ｃ１１１１１：  </div>
Ｃ１２１１１：  </div>
Ｃ１３１１１：  </div>
Ｃ２１１１１：  </div>
Ｃ２２１１１：  </div>
Ｃ２３１１１：  </div>
【０１２０】
指定テキスト部分Ｆ１〜Ｆ５における次の残りのキャラクタ列についても、順次同様に処理される。
Ｆ１：  <div> 350人</div></div>
Ｆ２：  <div>1000万円</div></div>
Ｆ３：  <div>福岡県福岡市</div></div>
Ｆ４：  <div>機械</div></div>
Ｆ５：  <div>300円</div></div>
【０１２１】
それによって、図９に示されているように、６つの末端の子ノードＣ１１１１１、Ｃ１２１１１、Ｃ１３１１１、Ｃ２１１１１、Ｃ２２１１１、Ｃ２３１１１“</div>”に対して、それぞれ子ノード“<div>”、“ (.*?)”、“</div>”、“</div>”が順次連鎖的に追加される。それによって、ツリーの根ノードに対して、次の６つの候補の正規表現Ｒ１〜Ｒ６が形成される。
【０１２２】
Ｒ１：  <div class="([^<]*?)"><span style="font-weight:bold;">(.*?)</span></div><div>(.*?)</div></div>
Ｒ２：  <div class="([^<]*?)"><span style="([^<]*?)">(.*?)</span></div><div>(.*?)</div></div>
Ｒ３：  <div class="([^<]*?)"><span([^<]*?)>(.*?)</span></div><div>(.*?)</div></div>
Ｒ４：  <div ([^<]*?)><span style="font-weight:bold;">(.*?)</span></div><div>(.*?)</div></div>
Ｒ５：  <div ([^<]*?)><span style="([^<]*?)">(.*?)</span></div><div>(.*?)</div></div>
Ｒ６：  <div ([^<]*?)><span([^<]*?)>(.*?)</span></div><div>(.*?)</div></div>
【０１２３】
この時点で、指定テキスト部分Ｆ１〜Ｆ５における各ポインタは、最後のキャラクタ列“</div>”の後のキャラクタの存在しないスペースに位置する。この場合、ステップ６６０において、指定テキスト部分Ｆ１〜Ｆ５において全てのポインタの指す位置に次のキャラクタが存在しないと判定される。従って、ステップ６６４において、根ノードから末端の各１つの葉ノードまでの一連のリンクを１つの候補の正規表現として、全ての候補の正規表現Ｒ１〜Ｒ６のリストが生成されて記憶部３３４に保存される。
【０１２４】
このようにして、指定テキスト部分Ｆ１〜Ｆ５に対して、複数の候補の正規表現を自動的に生成することができる。但し、ステップ６２８、６３４、６４４、６４８、６５４および６５６における部分的な正規表現は、これらに限定されることなく、他の表現形態で表してもよい。
【０１２５】
次は、生成された候補の正規表現に対して優先度を付与して、候補の正規表現を優先度順に表示するための具体的な手順を説明する。
【０１２６】
図９Ａおよび９Ｂは、情報処理端末３０によって実行される、生成された候補の正規表現に優先度を与えるための処理のフローチャートの例を示している。
【０１２７】
図９Ａを参照すると、ステップ７０２において、プロセッサ３０２（またはその優先度付与部３０３４）は、記憶部３３４に保存された候補の正規表現のリストから１つの候補の正規表現を取り出す。ステップ７０４において、プロセッサ３０２（優先度付与部３０３４）は、ＵＲＩまたはＵＲＬと正解数のリストから、サンプルの１つのＵＲＩまたはＵＲＬとその正解数Ｄを取得する。ステップ７０６において、プロセッサ３０２（優先度付与部３０３４）は、記憶部３３４からそのＵＲＩまたはＵＲＬに対応するＨＴＭＬ文書のソース・データを取得する。
【０１２８】
ステップ７０８において、プロセッサ３０２（優先度付与部３０３４）は、ＨＴＭＬ文書のソース・データを検索して、そのソース・データにおいて候補の正規表現にマッチまたは適合するテキスト部分の数をマッチ数Ｍとして取得する。ステップ７１０において、プロセッサ３０２（優先度付与部３０３４）は、マッチ数Ｍが正解数Ｄと等しい（Ｍ＝Ｄ）かどうかを判定する。マッチ数Ｍが正解数Ｄと等しい（Ｍ＝Ｄ）と判定された場合は、手順はステップ７２２に進む。マッチ数Ｍが正解数Ｄと等しくない（Ｍ≠Ｄ）と判定された場合は、手順はステップ７1２に進む。
【０１２９】
ステップ７２２において、プロセッサ３０２（優先度付与部３０３４）は、その候補の正規表現について、スコアＳを１と設定する（Ｓ＝１）。その後、手順は図９Ｂのステップ７３０に進む。
【０１３０】
ステップ７１２において、プロセッサ３０２（優先度付与部３０３４）は、正解数Ｄがマッチ数Ｍより多い（Ｄ＞Ｍ）かどうかを判定する。正解数Ｄがマッチ数Ｍより多い（Ｄ＞Ｍ）と判定された場合は、手順はステップ７２４に進む。正解数Ｄがマッチ数Ｍより多くない、または正解数Ｄがマッチ数Ｍより少ない（Ｄ＜Ｍ）と判定された場合は、手順はステップ７２６に進む。
【０１３１】
ステップ７２４において、プロセッサ３０２（優先度付与部３０３４）は、その候補の正規表現について、スコアＳを、マッチ数Ｍを正解数Ｄで除算した値に設定する（Ｓ＝Ｍ／Ｄ＜１）。それによって、候補の正規表現を用いた検索または抽出に漏れがある場合は、その候補の正規表現に対して、漏れ数に応じてスコアＳとして１より小さい値が与えられる。その後、手順は図９Ｂのステップ７３０に進む。
【０１３２】
ステップ７２６において、プロセッサ３０２（優先度付与部３０３４）は、スコアＳを、正解数Ｄをマッチ数Ｍで除算した値に設定する（Ｓ＝Ｄ／Ｍ＜１）。それによって、候補の正規表現を用いた検索または抽出にノイズがある場合は、その候補の正規表現に対して、ノイズ数に応じてスコアＳとして１より小さい値が与えられる。その後、手順は図９Ｂのステップ７３０に進む。
【０１３３】
図１０は、情報処理端末３０によって表示部３４４に表示される、各候補の正規表現とサンプルのＵＲＩまたはＵＲＬとの各組合せに対するマッチ数Ｍ、正解数Ｄおよび一致割合（Ｓ）を含む表示画面の例を示している。
【０１３４】
ステップ７２２、７２４および７２６において、プロセッサ３０２（優先度付与部３０３４）は、各候補の正規表現と各ＵＲＩまたはＵＲＬの各組合せに対して設定されたスコアＳを、例えば図１０のように表示部３４４に表示してもよい。
【０１３５】
図９Ｂを参照すると、ステップ７３０において、プロセッサ３０２（優先度付与部３０３４）は、候補の正規表現に対するそのスコアＳで、複数の候補の正規表現とそれぞれのスコアＳのリストを更新する。その際、候補の正規表現とスコアＳのリスト中に、同じ候補の正規表現がない場合には、例えば、その候補の正規表現とそのスコアＳが追加されてもよい。また、候補の正規表現とスコアＳのリスト中に、同じ候補の正規表現がある場合には、例えば、その候補の正規表現のスコアＳに新しいスコアＳが加算されてもよい。
【０１３６】
ステップ７３２において、プロセッサ３０２（優先度付与部３０３４）は、ＵＲＩまたはＵＲＬと正解数のリスト中に、残りのサンプルのＵＲＩまたはＵＲＬと正解数Ｄが存在するかどうかを判定する。ここで、残りのサンプルのＵＲＩまたはＵＲＬと正解数Ｄとは、ＵＲＩまたはＵＲＬと正解数のリスト中で、取り出された候補の正規表現で検索または抽出が未だ行われていないサンプルのＵＲＩまたはＵＲＬと正解数Ｄである。残りのサンプルのＵＲＩと正解数Ｄが存在しないと判定された場合は、手順はステップ７３４に進む。残りのサンプルのＵＲＩと正解数Ｄが存在すると判定された場合は、手順は図９Ａのステップ７０２に戻る。
【０１３７】
ステップ７３４において、プロセッサ３０２（優先度付与部３０３４）は、候補の正規表現のリスト中に、検索または抽出に使用されていない残りの候補の正規表現が存在するかどうかどうかを判定する。残りの候補の正規表現が存在しないと判定された場合は、手順はステップ７３６に進む。残りの候補の正規表現が存在すると判定された場合は、手順は図９Ｂのステップ７０４に戻る。
【０１３８】
ステップ７３６において、プロセッサ３０２（優先度付与部３０３４）は、候補の正規表現をその合計のスコアＳの高い順に優先度を付与して記憶部３３４に保存し、複数の候補の正規表現をその優先度順にソートして表示部３４４に表示する。さらに、プロセッサ３０２（優先度付与部３０３４）は、最も高いまたはより高い優先度の１つ以上の或る数の候補の正規表現を、望ましい候補の正規表現として決定してもよい。その或る数は、例えば、１つ、２つまたは３つであってもよい。それによって、表示部３４４に、複数のサンプルのＨＴＭＬ文書について抽出データの正解数Ｄにより近い一致割合または一致度合のマッチ数Ｍを有する候補の正規表現が、より高い優先順で表示される。それによって、ユーザは、複数の候補の正規表現の中から、抽出または検索したいデータを、より少ない検索または抽出漏れおよびより少ないノイズで検索または抽出できる候補の正規表現を効率的に選択するのを、支援することができる。
【０１３９】
ユーザは、さらに、例えば図１０の各候補の正規表現のスコアＳ、正解数Ｄとマッチ数Ｍの差、マッチ数Ｍと正解数Ｄの一致の割合に基づいて、複数の候補の正規表現の中から所望の正規表現を選択してもよい。それによって、ユーザは、検索の目的に応じて、例えば、検索ノイズも検索漏れもない所望の正規表現、或る程度の検索ノイズを許容する所望の正規表現、または或る程度の検索漏れを許容する所望の正規表現を、効率的に選択することもできる。
【０１４０】
このように、実施形態によれば、ユーザが、複数のＨＴＭＬ文書中の１つまたは２つ以上の所望のテキスト部分を検索または抽出するのに適した正規表現を効率的に作成し決定するのを、支援することができる。
【０１４１】
以上の実施形態では、主としてＨＴＭＬ文書中のテキストの検索について説明したが、実施形態は、例えばＸＭＬ（Extensible Markup Language）文書またはＸＰＳ（XML Paper Specification）文書のような、ＨＴＭＬ文書以外のテキスト文書データ中のテキストの検索または抽出にも同様に適用できる。
【０１４２】
ここで挙げた全ての例および条件的表現は、発明者が技術促進に貢献した発明および概念を読者が理解するのを助けるためのものであり、ここで具体的に挙げたそのような例および条件に限定することなく解釈され、また、明細書におけるそのような例の編成は本発明の優劣を示すこととは関係ない、と理解される。本発明の実施形態を詳細に説明したが、本発明の精神および範囲から逸脱することなく、それに対して種々の変更、置換および変形を施すことができる、と理解される。
【０１４３】
以上の実施例を含む実施形態に関して、さらに以下の付記を開示する。
（付記１）或る文書データにおける所望の１つ以上のテキスト部分に適合する複数の正規表現を記憶部に保存し、
複数の文書データの各々における前記記憶部の前記複数の正規表現の各々に適合するテキスト部分の数を求め、前記複数の文書データの各々における所望のテキスト部分の数を取得して、前記複数の正規表現の中で、前記複数の文書データに関して前記適合するテキスト部分の数が前記所望のテキスト部分の数と一致する度合の高い正規表現を決定する
処理を情報処理装置に実行させるためのプログラム。
（付記２）さらに、前記複数の正規表現に、前記度合に基づいて優先度を与える処理を前記情報処理装置に実行させる、付記１に記載のプログラム。
（付記３）さらに、前記複数の正規表現を、前記度合に基づいて付与された優先度の順に表示する処理を前記情報処理装置に実行させる、付記１または２に記載のプログラム。
（付記４）さらに、前記複数の正規表現に、ユーザによって入力された別の正規表現を含ませる処理を、前記情報処理装置に実行させることを特徴とする、付記１乃至３のいずれかに記載のプログラム。
（付記５）さらに、前記或る文書データにおける指定された２つ以上のテキスト部分の構造の共通性を判定し、
前記複数の正規表現は、前記判定された共通性に基づいて前記２つ以上のテキスト部分に適合するように、生成されるものであることを特徴とする、付記１乃至４のいずれかに記載のプログラム。
（付記６）前記共通性は、タグ種別、属性、属性名および属性値の少なくとも１つに関するものであることを特徴とする、付記５に記載のプログラム。
（付記７）或る文書データにおける所望の１つ以上のテキスト部分に適合する複数の正規表現を生成する生成部と、
前記複数の文書データの各々における前記複数の正規表現の各々に適合するテキスト部分の数を求め、前記複数の文書データの各々における所望のテキスト部分の数を取得して、前記複数の正規表現の中で、前記複数の文書データに関して前記適合するテキスト部分の数が前記所望のテキスト部分の数と一致する度合の高い正規表現を決定する決定部と、
を含む情報処理装置。
（付記８）情報処理装置が、
或る文書データにおける所望の１つ以上のテキスト部分に適合する複数の正規表現を記憶部に保存し、
前記複数の文書データの各々における前記記憶部の前記複数の正規表現の各々に適合するテキスト部分の数を求め、前記複数の文書データの各々における所望のテキスト部分の数を取得して、前記複数の正規表現の中で、前記複数の文書データに関して前記適合するテキスト部分の数が前記所望のテキスト部分の数と一致する度合の高い正規表現を決定する
処理を実行する方法。
【符号の説明】
【０１４４】
５  ネットワーク
１０、１２、１４  ウェブ・サーバ装置
３０  情報処理端末
３０２  プロセッサ
３０２２  アプリケーション部
３０２４  ウェブ・ページ取得部
３０２６  ブラウザ部
３０２８  ソース・データ表示部
３０３０  正解数設定部
３０３２  候補正規表現生成部
３０３４  優先度付与部
【図１】
2015028699.tif 000003
【図２】
2015028699.tif 000004
【図３】
2015028699.tif 000005
【図４】
2015028699.tif 000006
【図５】
2015028699.tif 000007
【図６】
2015028699.tif 000008
【図７Ａ】
2015028699.tif 000009
【図７Ｂ】
2015028699.tif 000010
【図７Ｃ】
2015028699.tif 000011
【図８】
2015028699.tif 000012
【図９Ａ】
2015028699.tif 000013
【図９Ｂ】
2015028699.tif 000014
【図１０】
2015028699.tif 000015