SQL, 簡易検索システム,情報検索システム

SQL
• リレーショナルデータベース
を管理する言語に
SQL(Structured Query
Language)がある。すなわち、
• テーブルを作成・削除・変更
したり、
• テーブルに追加・削除・編集
したり、
• テーブル内データの検索な
どを行うプログラム言語
• 流通しているSQL DBMS実装
• Ingres, Oracle Database, IBM DB2,
Microsoft SQL Server, Postgre SQL,
MySQL, SQLite 等
• SQL蔵書検索システム例では、
SELECT フィールド FROM テーブル
WHERE フィールド LIKE ‘%キーワード%’
というような構文でキーワードを探せる。
具体的には、「書誌」テーブルの「タイト
ル」フィールドに「義経千本桜 」 「著者」
フィールドに「国立劇場調査記録課」を
探したい場合、
SELECT タイトル FROM 書誌 WHERE
タイトル LIKE ‘%義経%’ AND 著者 LIKE
‘%劇場%’ と記入すればよい。
%はワイルドカードといいトランプの「バ
バ」のようなもので任意の文字列
簡易検索システム: Excel VBA例
念のためウィルスチェック後使用下され
1. 変数である「見つかったセル」, 「最初のセル」, 「見つける列」, 「ワークシート」,
「キーワード」等の型を定義
2. どんなキーワードが入っても良い変数をつくる
3. キーワードを探し、見つかったセルにする
4. 見つからなければ、表示しプログラムから抜け出る
5. 見つかったセルを最初のセルにする
6. 見つかったセルの行全体を別シートにコピーする
7. 次に見つかったセルを見つかったセルにする
8. もし、最初のセルの番地と見つかったセルの番地が同じなら抜け出す
9. でなければ、別シートの行末にコピーする
キーワードを入れ→
シート「検索結果」を見よ
ID
タイトル
アドレス
4001
絵画と物語絵
http://cinii.ac.jp/naid/1023
4002
源氏物語絵巻の構図
4003
徳川本源氏物語絵巻
簡易検索システム: Excel VBA例
Sub 検索結果別シートへ()
Dim 見つかったセル As Range, 最初のセル
As Range, 見つける列 As Range
Dim WS1 As Worksheet, WS2 As Worksheet,
キーワード As String
Set WS1 = Sheets("全文")
Set WS2 = Sheets("検索結果")
WS2.Cells.Clear
WS1.Activate
キーワード = Range("B2").Value
Set 見つける列 = Range("全文[タイトル]")
Set 見つかったセル = Cells.Find(What:=キー
ワード)
If 見つかったセル Is Nothing Then
MsgBox "見つかりません"
Exit Sub
Else
念のためウィルスチェック後使用下され
Set 最初のセル = 見つかったセル
見つかったセル.EntireRow.Copy
WS2.Cells(Rows.Count, 1).End(xlUp).Offset(1, 0)
End If
Do
Set 見つかったセル = Cells.FindNext(見つ
かったセル)
If 見つかったセル.Address = 最初のセ
ル.Address Then
Exit Do
Else
見つかったセル.EntireRow.Copy
WS2.Cells(Rows.Count, 1).End(xlUp).Offset(1, 0)
End If
Loop
End Sub
参考:Office Tanaka [見つかったセ
ルを別のシートにコピーする] , 早川清志『Excel
VBAで行うデータベース活用の教科書』p.48
情報検索システム:
• ソート済みが前提
対象全文データ
全文検索の手法:例:Google
• クロール→インデックス化
• アルゴリズム
• スパム対策
• ポリシー
• クロール(検索ロボット)ソフト
全文データ
1bt
ID: A12301
雨にも負け|ず 風にも|負けず 雪|にも夏の暑
タイトル: 飴にも負けず
41
著者: 宮澤賢治
さにも負け|ぬ 丈夫な|体をもち |欲はなく決
11
21
51
61
1bt
ID: B10023
風の物語 = |A story o|f wind 菩 提の曲
URL:
http://www2.mmc.atomi
.ac.jp/~artnavi1/worksho
p/makeMusic/workIndex
.html
101
111
121
131
秋、嵯峨野| を佳人と歩|く、、、ふ|と、、、雨
141 151
161
171
が降る。
11
21
• 転置索引ファイル
• インデックス化
• 図書の巻末索引と同様の手法
• 「キーワード, 資料ID, 場所(例1バイト
目)」の索引ファイルを作る
71
全文データ
• Index.htmlからタイトル、作者、アドレス、
キーワード等を収集。リンクをたどり、
最終リンクまでのアドレス、キーワード、
タイトルを収集し、データベース化する
• 転置索引
31
キーワード
資料ID
場所
雨
A12301
1バイト目
B10023
139バイト目
A12301
13バイト目
B10023
1バイト目
風
31
情報検索システム:
• 見出し語抽出法(含む:分かち書き)
• N-gram (N文字インデックス法)
形態素解析とN-gramの手法が知られ
る
• 対象全文を文字単位でN数で分割
する
• 形態素解析
• 例:対象文字「情報探索の方法を調
べる」
文章を品詞ごとに分かち書きする方法
例:Yahoo! 日本語形態素解析
(「みんなの知識ちょっと便利帳」より)
• 文章例:情報探索の方法を調べる
• 解析結果:情報 | 探索 | の | 方法 |
を | 調べる |
• オプション:品詞の指定:名詞、動詞
• 表示全情報
標記
よみ
品詞
基本形
全情報
情報
じょうほ
う
名詞
情報
名詞,名詞,*,情報,じょうほう,情報
探索
たんさく
名詞
探索
名詞,名サ他,*,探索,たんさく,探索
方法
ほうほう
名詞
方法
名詞,名詞,*,方法,ほうほう,方法
調べる
しらべる
動詞
調べる
動詞,一段,基本形,調べる,しらべる,調
べる
N=1
情
報
探
索
の
方
法
を
調
べ
る
N= 2
情報
報探
探索
索の
の方
方法
法を
を調
調べ
べる
る
N=3
情報探
法探索
探索の
索の方
の方法
方法を
法を調
を調べ
調べる
べる
る
情報検索システム:
線形探索法、2分探索法、ハッシュ探
索法などがある
• 線形探索法 (逐次探索する)
UNIXのGrep検索(正規表現した文字列検
索)やSQLのLike検索と同様。
•
A列に利用者番号
•
B列に利用者名があるとする。
•
全部でN件。利用者番号Kを探索する。
1. はじめ→利用者番号Kを手入力
2. J番目に1を代入する
3. N件よりJ番目が多ければ、該当なしと
表示して終わる。違う場合、手順4へ
4. A列のJ番目が求めるKと同じなら、そ
のB列のJ番目(=利用者名)を表示して
終わる
5. 見つからなければ、J番目に1を加え
(つまり次のJ番目を探し)、手順2と3の
間に移動を繰り返す
•
毎回最終番号を判断するのは時間が
かかるので「番兵」を入れる方法もあ
る。
はじめ
k
1→ j
yes
J> N
no
yes
A(j) = k
no
該当なし
B(j)
J+1→ j
おわり
情報検索システム:
る。ハッシュ関数を(利用者ID,9)+1と
すると下のハッシュ表ができる。
2分探索法
• N個のデータを昇順でソートしておく
•
源 義経 mod(13001,9)+1=6
•
織田信長 mod(13003,9)+1=8
あれば表示、なければ、
•
豊臣秀吉 mod(13203,9)+1=1
3.
後半部の中央点を見る
•
徳川家康 mod(13304,9)+1=3
4.
手順1-3を繰り返す。
1.
半分にし、中央点 ((1+N)/2)を見る
2.
1
B列
利用
者ID
氏名
13203
豊臣秀吉
13304
徳川家康
13001
源義経
13003
織田信長
2
•
=mod ( a, b) はa ÷b の余り
•
計算すると同じハッシュ値に
3
ハッシュ表探索法
なる場合がある(衝突)、格納
4
• A列に番号、B列に対応の氏名を格納
するとする。探しやすくするためデー
タの格納位置を決めたのをハッシュ
表という。計算式をハッシュ関数(mod
関数),返り値をハッシュ値という。
できない番号をシノニム。
5
• Excelで=mod(数値,除数)で計算でき
る。例えば、利用者IDに
13001,13003,13203,13304がいたとす
A列
対処法:チェイン法とオープン
6
アドレス法がある。
7
これらの方法を利用して検索。
8
9