HTML表の構造認識および形式変換システム

1. はじめに

HTMLの表を記述するためには、表頭を表す <th> と、データ部分を表す <td> が用意されています。 しかし、実際の使われ方には Webブラウザ上での表示 (見かけ) に重きが置かれ、 表内の意味を表すために適切にこれらのタグが使い分けられているとは言い難い 現状があります。 HTML表に <td> タグのみを使用して、様々な文字装飾や配置装飾をしてい るページが多々見られます。 人間が表を見ればどこが表頭であるかがすぐにわかりますが、 計算機でこれらの表を扱おうとすると、 どこが表頭の部分であるのかを示す必要があります。

そこで、表内のデータを認識して、表頭とデータ部分の切り分けを自動的に行う ことができるシステムがあると、様々な応用が考えられます。

  1. HTMLの表を収集して、表頭を列名とするリレーショナルデータベースを自動構築する
  2. HTMLの表を Excel 等で利用できる形式に変換する
  3. HTMLの表を表ではない別の形式に変換して利用する
  4. HTMLの表に対して柔軟なインタフェースを提供する

2. 原理と応用例

HTML表のセル間の類似度を計算するために様々な言語的性質を利用し、 類似度が低い場合には、 行間あるいは列間に内容的な切れ目があると認識するアルゴリズムを開発しました。

本研究ではセル間の類似度をベクトル空間法によって計算し、 類似度の比を用いて、行と列の項目名と項目データを計算し区別します。 まず、表の正規化 (第一正規形) を行い、 表の各セルデータに対して言語的性質を適用したベクトルのマトリク スを作成します。 次に行方向の切れ目を認識するために、 各セルの列方向の類似度をベクトル空間法によって算出します。 算出したセルの類似度に対して行ごとの平均値を求め、 行の類似度が低くなる部分には、行間に内容的な切れ目があると認識します。 行と列を入れ換えて類似度を計算すれば、 列間の切れ目を認識することができます。 評価実験では80%程度の認識率が得られました。

詳細については参考文献をご覧ください。

増田英孝, 塚本修一, 安富大輔, 中川裕志: HTMLの表形式データの構造認識と携帯端末表示への応用, 情報処理学会論文誌: データベース, Vol.44, No. SIG 12 (TOD 19), pp.23-32 (2003年9月).

本システムでは、HTMLの表を表ではない別の形式に変換します。 特に、 携帯端末上に表を表示する際の問題として、 項目名と項目データが乖離してしまう、 表示に充分は幅がとれないために改行が増えてしまうことがあります。 そこで、 携帯端末上で理解しやすい形に表示するための変換の方針としては、 常に項目名と項目データをペアで表示することにしました。 これには、システムが認識した項目名(表頭)と項目データを利用します。 変換の例は 変換前の表変換後 にリンクを貼ってあります。 これらのファイルを携帯端末で表示した例を以下に示します。

変換前変換後
スクロール前スクロール後 スクロール前スクロール後

本システムに関連した卒業研究として主に以下のような論文があります。

 著者  論文題名 卒業年
小西 陽子 複数Webページからの表情報の抽出と統合 2007
臼田 雄一 HTML表形式データの構造解析の精度向上 2005
福原 健介

3. 動作環境および使用方法

3.1 謝辞

本ソフトウェアを公開するにあたって、開発に尽力を頂いた 本学大学院修士課程修了の 安富大輔 氏、塚本修一 氏に感謝します。

3.2 動作に必要なソフトウェア

  1. Java の開発環境 http://www.java.com/ja/
  2. Jakarta-ORO Java クラス群
    Apache Jakarta プロジェクト http://jakarta.apache.org/ において開発されている テキスト処理関係の Jakarta-ORO Java クラス群が必要です。 http://jakarta.apache.org/oro/index.html
    例えば、jakarta-oro-2.0.8.tar.gz (バイナリ形式) をダウンロードし、 展開してできる jakarta-oro-2.0.8.jar を使います。
  3. 表形式変換ソフトウェア tableconverter年月日.tar.gz

3.3 使用方法

jakarta-oroのjarがある場所を確認しておきます。 jakarta-oroのjarが$JAVA_HOME/jre/lib/ext に置いてある場合には -classpath や -cp オプションは不要になります。

tableconverter年月日.tar.gz をダウンロードして展開します。 TableConvert.java がある tableconverter ディレクトリに移動します。

コンパイル:
javac [-classpath .:jakarta-oroのjarがあるパス] TableConvert.java
使用例:
javac TableConvert.java
javac -classpath .:/tmp/jakarta-oro-2.0.8.jar TableConvert.java
各ディレクトリに *.class ファイルができれば完了です。
実行一般形:
java [-cp .:jakarta-oroのjarがあるパス] TableConvert 変換したいhtmlファイルへのパス
使用例:
java TableConvert ~/htdocs/thesis/index.html
java -cp .:/tmp/jakarta-oro-2.0.8.jar TableConvert ~/htdocs/thesis/index.html
上の使用例は、jakarta-oro-2.0.8.jar ファイルが /tmp ディレクトリ下にあり、 変換したいファイルが ~/htdocs/thesis/index.html である場合の例です。
結果:
標準出力に結果が出力されると共に、変換前後のファイルが出力される。 結果ファイル出力ディレクトリは ./buddha/source/ 下に
として保存される。変換の例は上の source.htmlsourceConvert.html にリンクを貼ってあります。

4. 使用条件

使用にあたり、以下の各点にご留意ください。
  1. 本システムのダウンロードは無償である。
  2. 本システムの改良については特に制限をしない。ただし、改良版の再配布にあたっては、本システムを元にしたことを明記されたい。
  3. 当方での実験では VineLinux, WindowsXP において動作確認されているが、ダウンロードした個々の利用者の環境における本システムの動作は保証しない。
  4. 本システムを利用した結果を論文などで公表する際には、「東京電機大学増田研究室・東京大学中川研究室で開発された表変換システムを使用した」ことを明記されたい。
  5. 本システムの使用において生じたいかなる結果に関しても当方では責任を負わない。
  6. 本プログラムに関する質問にはお答えできません。
以上の条件に承諾してダウンロードする: はい

5. ファイル構成

以下に展開されるファイルの構成を示します。
臼田雄一, 福原健介: HTML表形式データの構造解析の精度向上, 2004年度 東京電機大学 コミュニケーションデザイン研究室 卒業研究論文 (2005).
により、
  1. buddha.tableAnalyzer.TableDistinct.java
  2. buddha.util.TablePerl.java
の2つのファイルが改良されています。
.
|-- TableConvert.java (起動用メイン)
|-- buddha
|   |-- Path
|   |   |-- GetPath.java
|   |   `-- Stdin.java
|   |-- controller
|   |   `-- ConvertController.java (旧: サーブレットとして提供していた名残)
|   |-- main
|   |   `-- SourceConverter.java
|   |-- source
|   |   |-- source.html (変換前のHTMLファイル)
|   |   `-- sourceConvert.html (変換後のHTMLファイル)
|   |-- tableAnalyzer
|   |   |-- AttributeNumberChecker.java
|   |   |-- SemanticAttributeAnalyzer.java
|   |   |-- StructualAttributeAnalyzer.java
|   |   |-- TableDistinct.java (臼田、福原改良済)
|   |   `-- originalTableDistinct.java (オリジナル動作に戻す場合)
|   |-- tableConverter
|   |   |-- EmphasisTableConverter.java
|   |   |-- LayoutTableTypeConverter.java
|   |   |-- ListTypeConverter.java
|   |   |-- ReverseListTypeConverter.java
|   |   |-- ScheduleTableTypeConverter.java
|   |   `-- TableConverter.java
|   |-- util
|   |   |-- ArrayChain.java
|   |   |-- HtmlGetter.java
|   |   |-- HtmlStyle.java
|   |   |-- RemoveTag.java
|   |   |-- TableArray.java
|   |   |-- TableDataWriter.java
|   |   |-- TablePerl.java (臼田、福原改良済)
|   |   `-- originalTableArray.java (オリジナル動作に戻す場合)
|   `-- vectorspace
|       |-- CellVector.java
|       |-- Data.java
|       |-- Fileio.java
|       |-- StructureTableArray.java
|       |-- VectorCosine.java
|       |-- cell.data (作業用ファイル)
|       |-- cellvector.data (作業用ファイル)
|       |-- kutouten.data (句読点の定義ファイル)
|       |-- renzoku.data (連続データの定義ファイル)
|       |-- settouji.data (接頭辞の定義ファイル)
|       |-- setubiji.data (接尾辞の定義ファイル)
|       |-- tani.data (単位の定義ファイル)
|       |-- tokushu.data (特殊文字の定義ファイル)
|       `-- weight.data (各ベクトルの重み定義ファイル)
|-- readme-j.txt
`-- usage.txt
./buddha/vectorspace/ 以下の *.data ファイルを調整することで精度の向上が期待できます。