データマイニングシステム

人工無脳を改良して、データを覚えさせるようなしくみを作る。

次に、何回同じキーワードが出てきたがどうか、調べるようなしくみを作る。

データ集め

木構造のデータ

Web サイトに仕込んでおいた RDMS のデータを分析する必要がある。 とくに、アンケートシステムなどの自由記述を分析する必要があるだろう。 自由記述には要望などが含まれており、分析は重要だが、 枚数が多いと人力ではかなり難しい。 この分析には、データマイニングという手法がよく使われる。 Twitter の Bot にも使われている。 RDB とは異なる方法でデータを分類する。

木構造のデータとして分類するのには XML 形式が便利である。

XML とデータベース

1998 年に提案され、以降はインターネットビジネス、表計算ソフトとともに進 化してきた。

XML と HTML は SGML のうちに含まれ、tag を用いて要素を記述する。 文書の記述を統一することにより情報交換が容易になることを期待している。

XML には XML 宣言、スキーマ宣言(DTD)、本文の 3 つから更正される。

スキーマは省略あるいは別のファイルに記述してもよい。本文は文書の本体とな る。

DTD: Document Type Definition (XML1.0) に含まれるスキーマ言語

データの記述のためには 3 種類の分類を行う。

データ内容の記述例

例を見る。


<講義ノート 種類="情報特別選抜">

<講義名>データベース応用</講義名>
<著者>西村まどか</著者> <所属>公益学部<所属/>
</講義ノート>

スキーマの記述例

スキーマは XML 文書がしたがう形式を指定する。これにより、 プログラムであつかうことを容易にする。

例を見る。


<!element 講義ノート (講義名+, 著者)>
<!element 講義名 (#pcdata)>
<!element 著者 (氏名, 所属)>
<!element 氏名 (#pcdata)>
<!element 所属 (#pcdata)>
<!attlist 講義ノート 種類 cdata #required>

+ は 1 回以上を示す。 1 行目はtag 名講義ノートの記述中に、講義名と著者が tag 名として使用され ることを記述している。 2 行目では tag 名講義名が文字列であることを記述している。 最後の行は講義ノートの属性である種類について記述している。

XML 文書が XML 規格にしたがって記述されているとき、well-formed (整形式文 書) と呼ばれ、さらにスキーマにしたがって記述されているとき、valid 妥当な 文書と呼ばれる。

XSL は文書のスタイルを記述するもので、CSS のように文書の飾りや整形した表 示ばかりでなく、動作を指定できたり状況に応じて表示を変化させたりすること ができるよう設計されることが望ましい。この規格は XSLT と呼ばれる。

XML は Tree 構造であるが、その扱いには Xpath を用いる。 問い合わせには SQL に類似した XQuery を使い、データの種類を検索させるこ とが可能である。

XML の API

XML のアプリケーションのインタフェース仕様 (API) として、DOM が標準化さ れている。

DOM はプラットフォームに依存せず、XML 文書内のデータの検索、追加、削除可 能な関数を定義が定義されており、XML 文書の木構造をメモリに展開して操作し、 データの取り出しなどができる。

この他、API として SAX が提案されているが、イベント駆動型でメモリを DOM ほど必要とはしないが、情報を処理する順序が制約される。

XML が使われはじめたきっかけ

XML で発展を遂げたのは B2B EC (企業間電子商取引) である。

XML 文書の集まりをデータベースとして考える。

関係データベースのデータ構造は表形式である。一方、XML は Tree 構造で、 自由度が大きい。 Tag を用いて検索を行うことができるため、半構造データを扱うと考える。

XML 文書をデータベースで管理するにあたって、

  1. データ
  2. 書類

のうち、データに属するものならば、XML + DBMS の組み合わせが便利である。

  1. 非構造化格納法
  2. 構造化格納法
  3. ハイブリッド方式
  4. 木構造格納法

で分類される。

Ruby で XML

rexml/document を require することによって使用できる。

#!/usr/koeki/bin/ruby
# -*- coding: euc-jp -*-

require "rexml/document"
include REXML    
                 
string = <
      EXML document
   
EOF
doc = Document.new string
print doc

あるデータを解析するには、

doc = <
  
    12345
    67890
  

EOF

xmldoc = Document.new hoge


elems = xmldoc.elements
elems = xmldoc.elements
p elem = elems[2]

p elems = xmldoc.elements
p elem = elems['aaa/bbb/ccc']
p elem = elems[1, 'bbb']
p elems.to_a('aaa/bbb/ccc')
p elems.size
p elems = xmldoc.elements
elems.each("aaa/bbb/ccc") do |elem|
  p elem
end