« 語釈を作る | Main | 動詞活用の正規表現 »

2016.10.29

同じ文字列の扱いを変える

今の日本語文書には漢字・平仮名・片仮名だけではなく欧文が普通に使われるが、そのような日本語を電子機器で入力していると余分な文字や半角の空白が文書に残ることがある。これを取り除くにはどうするか。

例えば半角の空白が文書の中に紛れていることは結構ある。それを削除するには、ワードやエクセル、テキストエディターなどのソフトに検索置換の機能を使う。半角空白を検索して置換後の文字列に何も入力しないという操作を行うのである。

これは単純な例であるが、さらに検索置換に正規表現を使うと、個別の文字をいちいち指定することなく一定の文字列を全て検索して削除することができる。例えば全角文字の中にある半角の英文字や空白を取り除くときには、秀丸のスクリプトなら
replaceallfast "([a-zA-Z ]{1,})", "" , regular, nocasesense, inselect, nohilight;
とすればよい。これによって全角文字の中にある半角の英文字と空白が全て削除される。

しかし日本語の文書であっても人名、組織、略語、書籍、論文などを欧文のまま残すことがある。文書の中にあるOECDという組織名、あるいはJames Watsonという人物名はそのままにして、それ以外の英文字を削除したいというような場合である。

上に掲げた正規表現では、残したい文字や半角もすべて削除されてしまう。同じ文字でも削除するものと残すものとを区別するにはどのような正規表現を書けばよいのか。それが今回の課題である。

これを実現するには、残したいものに標識を付けておいて、それ以外のものを削除するという2段階操作をする。

まず標識を付けるのであるが、ここでは標識にすみつき括弧を使ってみる。つまり残したい文字列の部分を【OECD】あるいは【James Watson】のようにするのである。

その次の段階で削除をするのであるが、最初はその論理を普通の言葉で表現してみる。実現したいのは
  和文の中にある英文字と半角空白を削除するが
  すみつき括弧内の英文字と半角空白は削除しない
ということになる。

単純化すれば
  ○○を削除するが
 【○○】は削除しない
である。つまり【○○】という形になっていない○○を検索して、置換後の文字列に何も入力しない、ということになる。

この検索を分解して表現すると、
  ○○の前に【がなく
  ○○の後に】がないときの
  ○○を検索する
ということである。

ここまで来ると実現したいことを正規表現にするまであと一歩になる。

前に【がない○○を検索するためには、前方不一致という条件式を使う。ある文字・正規表現の後に、別の文字・正規表現を指定したうえで、前方部分がないときの後方部分だけ検索することができるのである。条件式は?<!である。

後に】がない○○を検索するには、後方不一致を使う。ある文字・正規表現の後に、別の文字・正規表現を指定し、後方部分がないときの前方部分だけを検索するという条件式で、?!と書く。

これを使うと検索式は
  (?<![【a-zA-Z ]{1,})([a-zA-Z ]{1,})(?!】)
ということになる。

この正規表現の検索式を普通の日本語に翻訳すれば、前に【や英文字や半角空白がなく、後に 】が続かないときの英文字や半角空白を検索する、という条件である。ここですみつき括弧【を[ ]の外に出さずに[ ]の中に入れたのが味噌。

これですみつき括弧に挟まれていない英文字と半角空白を削除できる。つまり同じ文字列でありながら、すみつき括弧の有無で扱いを変えることが可能になるのである。

尚このスクリプトを用語辞書と組み合わせる場合は注意すべき点がある。用語辞書にある単語がすみつき括弧内にあるときには、検索対象から外すという工夫が必要になるのであるが、この干渉回避のやり方についての説明は別の機会に譲る。

|

« 語釈を作る | Main | 動詞活用の正規表現 »

Comments

Post a comment



(Not displayed with comment.)


Comments are moderated, and will not appear on this weblog until the author has approved them.



TrackBack

TrackBack URL for this entry:
http://app.cocolog-nifty.com/t/trackback/20048/64416414

Listed below are links to weblogs that reference 同じ文字列の扱いを変える:

« 語釈を作る | Main | 動詞活用の正規表現 »