第14講 進んだ検索と置換  1講 2講 3講 4講 5講 6講 7講 8講 9講 10講 11講 12講 13講

コンピュータの基礎第14講
進んだ検索と置換

【第14講のポイント】
 本講では、検索と置換についてのより進んだ手法を紹介する。

【第14講の目標】学習後、以下のことが身についたかチェックしよう。
  1. 論理式検索が行えるようになる
  2. WORDのワイルドカードを利用して検索と置換が行えるようになる
  3. 正規表現について理解する
  4. 正規表現とグラフモデルの関係を理解する

【第14講の構成】
  1. 論理式検索
  2. WORDの検索と置換
  3. 正規表現による検索と置換
  4. 正規表現とグラフモデル

本書の見方
ページをめくる
左(右)ページの左(右)端クリックまたはドラッグする
左(右)矢印キーを押す
1ページ分の移動
左右上端にある[Next]、[Previous]タブをクリックする
章の頭に移動
右上の【章の移動】タブをクリックし、現れた章を選ぶ
ページのジャンプ
右上のページ番号表示タブをクリックし、現れたページを選ぶ
画像の拡大およびリンク先への移動
画像やリンク先をクリックすれば、別ウィンドウ(タブ)で表示される

この教科書はBookletを利用して作成しています。

第1節 論理式検索

 通常の検索ではいくつかのキーワードを並べ、それらがすべて含まれるWebページや文書を検索する。しかし、検索サイトでは、いくつかのキーワードを 積(and)、和(or)、差(not)で(必要なら括弧も使って)組み合わせて検索できる。集合・論理モデルで議論したように、各キーワードの現れる・現れないを含めた組み合わせはすべて、積(and)、和(or)、差(not)を用いて表せる。

A and Bキーワード A、Bがともに現れるページを検索する。
A or Bキーワード A、B のどちらかが現れるページを検索する。
A not Bキーワード A が現れるページから、
B が現れるページを除外する。

  Googleの「検索オプション」で現れる画面では、以下の指定ができる。
  • 「すべてのキーワードを含む」: and に対応
  • 「完全一致」
  • 「いずれかのキーワードを含む」:or に対応
  • 「キーワードを含めない」:not に対応

 フレッシュアイでは、簡単なガイドに従って積(&)、和(|)、差(~)の演算子を使った論理検索式の作成ができ、その仕組みがよくわかる。
注意! 以下の実習にあたっては、半角文字と全角文字の違いに留意せよ。とくに、全角の空白は思わぬ働き(悪さ)をすることがある。

実習.以下の論理式検索をフレッシュアイで試してみよ
  1. コンピュータまたはインターネットに関する雑誌を知りたい
        雑誌&(コンピュータ | インターネット)
  2. 神奈川県の横浜か川崎の住宅か住居の情報を見たい
        神奈川県&(横浜|川崎)&(住宅|住居)
  3. 東京の本屋さん(書店も)で古本以外を探したい
        東京&(本屋|書店)~古本

問14.1.次のページを検索する論理式を答えよ。
  1. 京都か奈良のホテルに泊まりたい
  2. 日本橋の会社で本町以外の所を調べたい
  3. 東京にある金融機関でノンバンクや消費者金融以外を調べたい

第2節 WORDの検索と置換

進んだ検索

 キーワード検索では、論理式を用いたとしてもキーワードの組み合わせによる検索しかできないが、WORDの検索・置換機能では、ワイルドカードを用いたパターン指定による検索・置換が可能である。
 WORDで文書ファイルを開き、編集タグの置換を選択すると、「検索と置換」ウィンドウが開く。そこで【オプション】から「ワイルドカードを使用する」にチェックを入れると、ワイルドカードを利用した検索が可能になる。
 詳しくは、WORDのヘルプで「ワイルドカードを使って検索または置換する」や「使用できるワイルドカード」を見よ。

使用できるワイルドカード
目的記法使用例
任意の 1 文字? "s?t" で、"sat" や "set" を検索できる。
任意の文字列* "s*d" で、"sad" や "started" を検索できる。
単語の先頭< "<inter" で、"interesting" や "intercept"は検索できますが、"splintered"は検索できません。
単語の末尾> "in>" で、"in" や "within" は検索できますが、"interesting"は検索できません。
指定した文字のいずれか[ ] "w[io]n" で、"win" と "won" の両方を検索できます。
指定した範囲内の任意の 1 文字[-] "[r-t]ight" で、"right" や "sight" を検索できます。範囲は昇順で指定します。
括弧内の範囲に含まれる文字を除く任意の 1 文字[!x-z] "t[!a-m]ck" で、"tock" や "tuck" は検索できますが、"tack" や "tick"は検索できません。
直前の文字または式を n 個{n} "fe{2}d"で、"feed" は検索できますが、"fed" は検索できません。
直前の文字または式を n 個以上{n,} "fe{1,}d" で、"fed" や "feed" を検索できます。
直前の文字または式を n ~ m 個{n,m} "10{1,3}" で、"10"、"100"、および "1000" を検索できます。
直前の文字または式を 1 個以上@ "lo@t" で、"lot" や "loot" を検索できます。
 例えば、数字列を検索するには [0-9]{1,}、小文字列の検索には、[a-z]{1,}とすればよい。また、20世紀の年号(1900以上1999以下の数)を探したければ 19[0-9]{2} とする。

進んだ置換

 次に、進んだ置換機能について説明しよう。ワイルドカードを使用した検索式の一部を括弧"("、")"で括ると、その部分の検索が優先されるがそれだけでなく、その部分と合致した文字列を \n (nは数)で表すことができる。 ここで \nn番目の括弧対で括られた式に合致した文字列を表す。例えば
  検索する文字列:(米国)(*)(日本)
は、「米国…日本」と合致し、\1=米国、\2=…、\3=日本となるので
  置換後の文字列: \3\2\1
は、文書中の「米国」(\1)とその後方にある「日本」(\3)を入れ替える。

コラム.ワイルドカード
ワイルドカードは、トランプ等のカードゲームにおいて、ジョーカー等他のカードの代わりとして使えるカードをさす言葉であるが、情報科学においては他の文字(列)の代わりに使える(マッチする)特殊な文字を指し、一般に、任意の文字列を表す * と、任意の1文字を表す ? が使われる。
 例えば、ファイルの「開く」や「名前をつけて保存」のウィンドウで「ファイルの種類」を指定する欄には、すべてのファイル(*.*)、Word文書(*.doc)が指定できる。 *.doc を指定すれば、vb.doc、perl.doc、文書.doc のような・・・.docの形をしたすべてのファイル名を意味し、このパターンに合致する名前のファイルだけが、一覧表示される。

*問14.2.以下の実習を行い、問に答えよ
WORDを起動し、以下の4行を文書にコピーして、
   山田 太郎 (Taro Yamada)
   金岡 健二 (Kenji Kanaoka)
   田中 正一 (Syouichi Tanaka)
   文書中の「米国」をその後方にある「日本」と入れ替える。
次の実習を行い、そのときの検索文字列や置換文字列を答えよ
  1. ワイルドカード置換を使って 米国 と 日本 を入れ替えよ
  2. ワイルドカード置換を使って、最初「 」内の語と2番目の「 」内の語を入れ替えよ
  3. ローマ字からなる単語を検索せよ
  4. ローマ字の名前と苗字の順番を入れ替えよ

第3節 正規表現による検索と置換

 前節で学んだWORDの検索・置換はWORDでしか使えないが、一般のテキスト(文字列)に対してより強力なパターンマッチング機能を提供するものに正規表現がある。正規表現はテキスト処理に威力を発揮するとともに、インターネット上でも正規表現による検索が可能なサービスが多数存在する。ここでは、正規表現による検索・置換について学ぼう。
 例:インター?フ[エェ](イ|ー)ス は、インターフェイス、インターフェース、インターフエイス、インターフエース、インタフェイス、インタフェース、インタフエイス、インタフエース、の8種類の文字列と合致する。 ?、[ ]、|、の意味については以下を参照せよ。

正規表現の記法

 赤字の部分は、WORDのワイルドカードとは異るものなので、注意せよ。

(1)基本演算:正規表現の基本演算は次の3種類の演算である。
記法説明使用例
連接正規表現を続けて書けば、それらを続けた文字列と合致 abc と def の連接は abcdef
| 和(または)。どちらかのパターンと合致すれば合致。 (this|that) is a sample → this is a sample、that is a sample と合致
* 直前の文字(文字列)の0回以上の繰り返しと合致 12* → 1、12、122、・・・ と合致。
(ab)*a →a、aba、ababa、・・・と合致。
 また、演算の順序を表すために括弧 (, ) を用いる。さらに、*、|、(、)など特別な意味を持つ文字自身を表すには、直前に"\"をつける。例えば、\ は * と、\\ は \ と合致する。

 正規表現では、基本演算の他に便利のために種々の演算・記法が用意される。

(2)繰り返し指定:直前の文字(列)の繰り返し回数を指定する
記法説明使用例
+ 1回以上の繰り返し 12+ → 12、122、・・・ と合致 12+=122*
? 0,1回の繰り返 12? → 1、12 と合致 12?=1|12
{n}n回繰り返し(ab){3} → abababに合致
{n, }n回以上繰り返しa{3,} →aaa、aaaa、…に合致
{m,n}m~n回繰り返しa{3,5} →aaa、aaaa、aaaaaに合致
(3)文字の集合:1文字指定する
記法説明使用例
. 改行文字を除く任意の1文字 windows.. windowsの後に2文字続く文字列と合致
[  ][ ] 内に並べた文字のどれか[ab]=a|b
-文字の区間。[ ] 内で用いる[a-z]=a|b|・・・|z a-zの小文字アルファベット全て
[0-9]=0|1|・・・|9 全角の数字
[0-9A-Z] 大文字のアルファベットか数字
^否定。[ ] 内で用いる[^a-z] 小文字のアルファベット以外全て


合致する文字列は、通常はパターンに適合する最長の文字列(最長合致)であるが、"?"を付加する事によって最短合致となる。
  12+ →1222222222 に対し10桁目の1222222222までと合致 
  12+? →1222222222 に対し2桁目の12までと合致

(4)特殊な意味を持つ文字
記法説明使用例
^行頭^abc →行頭にある abc と合致
$行末abc$ →行末にある abc と合致
その他特殊な意味を持つ文字
記法説明
\wアルファベット、数字又は下線
\d数字
\s空白文字(スペース、タブ、改行)
\b単語の区切り
\n改行
\rリターン(復帰)
\tタブ
記法説明
\Wアルファベット、数字、下線以外
\D数字以外。[^0-9] と同じ
\S空白文字以外
\B単語の区切り以外

正規表現による検索と置換

 正規表現による検索を用いると、例えば英語の学習に役立つばかりでなく、文書・文献の特徴を数量的に抽出し、著者の異同や時代の推定、思想と文体との関係等を分析することも可能になる。その意味で、正規表現は文体の処理・解析のための重要なツールになっている。

問14.3.以下の実習を行い、問に答えよ
  1. 秋田大学のSCORP検索では、正規表現検索を応用して、電子的に保存されている英文の解析を行うことができる。このページを表示させよ。
  2. Search Word欄に \s(for|in|on|to|with)\s[a-z]+ing\s(for|in|of|on|to|with)\s を入れて検索せよ。また、これが何を意味するか説明せよ。
  3. Lewis Carrollの作品で、適当な動詞(過去、過去分詞、三単元を含む)の出現数を調べ、結果を報告せよ。

 正規表現においてn 番目の括弧対で括られた部分に合致した文字列は、$n で表せる(\ではなく$)ので、置換に利用できる。

実習.正規表現による検索・置換
 次ページは Java Script で実装した正規表現による検索・置換アプリである。検索文字列や置換文字列を指定して[検索]、[置換]を押すと結果が下の欄に表示される。これを使用して、Wordで行った実習と同じことを行え。

**問14.4.以下のパターンの正規表現を求めよ。また、その検索結果を次ページのアプリで確認せよ
  1. 3桁の数字
  2. 3000未満の非負整数
  3. aで始まりaで終わる6文字以下の英小文字列
  4. 全角の数字0~9で始まり句点。で終わる行

第4節 正規表現とグラフモデル

 正規表現は、情報の基本モデルであるグラフモデル(ネットワークモデル)と密接な関係がある。グラフは対象を○や□で図示し、その間の関係を矢印(→)や実線(―)で図示したものであった。ここで、特に対象を「状態」と呼んで○で表し、関係を「状態遷移」と呼んで→で表したグラフを状態遷移図(有限オートマトン)と呼ぶ。
 右上図はDVDプレイヤーの状態遷移を表現した図である。これに早送りや巻き戻ボタン(機能)がある場合を追加してみよう。右下図は初期状態 0(→○)から0,1の列を入力したとき、それが表す2進数を3で割った余り n を状態 n で表した状態遷移図である。
 状態遷移図で、ある初期状態から、ある終了状態への遷移列のパターン(集合)は、正規表現で表されることが知られている。(鉄道路線図で言えば、出発の駅から目的の駅までの経路のパターンは正規表現で表される。)したがって、あるパターンの正規表現を求めようとするとき、そのパターンを表す状態遷移図を考えてみるとよい。
 また逆に、正規表現に対して、それを遷移列(経路)集合に持つ状態遷移図を作ることもできる。これらの詳細については、言語理論、オートマトン理論に関する書物を参考にしてほしい。

**問14.5.
  1. DVDの状態遷移図に、早送りや巻き戻しボタン(機能)がある場合の状態遷移図を描け
  2. 3で割り切れる2進数を表す正規表現を求めよ
    ヒント.上右図で初期状態q0から3で割った余り0の状態q0への入力列(経路)パターンを表す正規表現を求める
  3. aaを含まないa,b上の文字列を表す正規表現を求めよ
    ヒント.aaを含まない文字列を表す状態遷移図を考え、正規表現になおす