コンピュータの基礎第14講
進んだ検索と置換
【第14講のポイント】
本講では、検索と置換についてのより進んだ手法を紹介する。
【第14講の目標】学習後、以下のことが身についたかチェックしよう。
- 論理式検索が行えるようになる
- WORDのワイルドカードを利用して検索と置換が行えるようになる
- 正規表現について理解する
- 正規表現とグラフモデルの関係を理解する
【第14講の構成】
- 論理式検索
- WORDの検索と置換
- 正規表現による検索と置換
- 正規表現とグラフモデル
本書の見方
- ページをめくる
- 左(右)ページの左(右)端クリックまたはドラッグする
左(右)矢印キーを押す
- 1ページ分の移動
- 左右上端にある[Next]、[Previous]タブをクリックする
- 章の頭に移動
- 右上の【章の移動】タブをクリックし、現れた章を選ぶ
- ページのジャンプ
- 右上のページ番号表示タブをクリックし、現れたページを選ぶ
- 画像の拡大およびリンク先への移動
- 画像やリンク先をクリックすれば、別ウィンドウ(タブ)で表示される
第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 に対応
フレッシュアイでは、簡単なガイドに従って積(&)、和(|)、差(~)の演算子を使った論理検索式の作成ができ、その仕組みがよくわかる。
注意! 以下の実習にあたっては、半角文字と全角文字の違いに留意せよ。とくに、全角の空白は思わぬ働き(悪さ)をすることがある。
実習.以下の論理式検索をフレッシュアイで試してみよ |
- コンピュータまたはインターネットに関する雑誌を知りたい
雑誌&(コンピュータ | インターネット)
- 神奈川県の横浜か川崎の住宅か住居の情報を見たい
神奈川県&(横浜|川崎)&(住宅|住居)
- 東京の本屋さん(書店も)で古本以外を探したい
東京&(本屋|書店)~古本
|
問14.1.次のページを検索する論理式を答えよ。 |
- 京都か奈良のホテルに泊まりたい
- 日本橋の会社で本町以外の所を調べたい
- 東京にある金融機関でノンバンクや消費者金融以外を調べたい
|
第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は数)で表すことができる。 ここで \
n は
n番目の括弧対で括られた式に合致した文字列を表す。例えば
検索する文字列:(米国)(*)(日本)
は、「米国…日本」と合致し、\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)
文書中の「米国」をその後方にある「日本」と入れ替える。
次の実習を行い、そのときの検索文字列や置換文字列を答えよ
- ワイルドカード置換を使って 米国 と 日本 を入れ替えよ
- ワイルドカード置換を使って、最初「 」内の語と2番目の「 」内の語を入れ替えよ
- ローマ字からなる単語を検索せよ
- ローマ字の名前と苗字の順番を入れ替えよ
|
第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.以下の実習を行い、問に答えよ |
- 秋田大学のSCORP検索では、正規表現検索を応用して、電子的に保存されている英文の解析を行うことができる。このページを表示させよ。
- Search Word欄に \s(for|in|on|to|with)\s[a-z]+ing\s(for|in|of|on|to|with)\s を入れて検索せよ。また、これが何を意味するか説明せよ。
- Lewis Carrollの作品で、適当な動詞(過去、過去分詞、三単元を含む)の出現数を調べ、結果を報告せよ。
|
正規表現において
n 番目の括弧対で括られた部分に合致した文字列は、
$n で表せる(
\ではなく$)ので、置換に利用できる。
実習.正規表現による検索・置換 |
次ページは Java Script で実装した正規表現による検索・置換アプリである。検索文字列や置換文字列を指定して[検索]、[置換]を押すと結果が下の欄に表示される。これを使用して、Wordで行った実習と同じことを行え。
|
**問14.4.以下のパターンの正規表現を求めよ。また、その検索結果を次ページのアプリで確認せよ |
- 3桁の数字
- 3000未満の非負整数
- aで始まりaで終わる6文字以下の英小文字列
- 全角の数字0~9で始まり句点。で終わる行
|
第4節 正規表現とグラフモデル
![](../parts/imgs/DVD状態遷移.jpg)
正規表現は、情報の基本モデルであるグラフモデル(ネットワークモデル)と密接な関係がある。グラフは対象を○や□で図示し、その間の関係を矢印(→)や実線(―)で図示したものであった。ここで、特に対象を「状態」と呼んで○で表し、関係を「状態遷移」と呼んで→で表したグラフを状態遷移図(有限オートマトン)と呼ぶ。
右上図はDVDプレイヤーの状態遷移を表現した図である。これに早送りや巻き戻ボタン(機能)がある場合を追加してみよう。右下図は初期状態 0(→○)から0,1の列を入力したとき、それが表す2進数を3で割った余り n を状態 n で表した状態遷移図である。
![](../parts/imgs/Mod3.png)
状態遷移図で、ある初期状態から、ある終了状態への遷移列のパターン(集合)は、正規表現で表されることが知られている。(鉄道路線図で言えば、出発の駅から目的の駅までの経路のパターンは正規表現で表される。)したがって、あるパターンの正規表現を求めようとするとき、そのパターンを表す状態遷移図を考えてみるとよい。
また逆に、正規表現に対して、それを遷移列(経路)集合に持つ状態遷移図を作ることもできる。これらの詳細については、言語理論、オートマトン理論に関する書物を参考にしてほしい。
**問14.5. |
- DVDの状態遷移図に、早送りや巻き戻しボタン(機能)がある場合の状態遷移図を描け
- 3で割り切れる2進数を表す正規表現を求めよ
ヒント.上右図で初期状態q0から3で割った余り0の状態q0への入力列(経路)パターンを表す正規表現を求める
- aaを含まないa,b上の文字列を表す正規表現を求めよ
ヒント.aaを含まない文字列を表す状態遷移図を考え、正規表現になおす
|