« 2013年3月 | トップページ | 2013年5月 »

2013.04.29

# 翻訳者のための正規表現~勉強会の解説、その3

4/23に開催した「十人十色・正規表現入門セミナー」後半の内容の復習、第3回です。

明日から天気が崩れますが、GW後半はまたいい天気になりそうですね。

お題その4

・数字の全角半角、それに続く丸カッコの全角半角が混在しているとき、
 ぜんぶ一括して「半角数字 + 半スペ + 半角丸カッコ(
この中は任意) + 半スペ」に置換する

【考え方の整理】

 ・全角半角すべての数字
 ・数字の直後はスペースがあったりなかったり
 ・全角半角の開き丸カッコ
 ・カッコの中身は任意の文字の続き
 ・全角半角の閉じ丸カッコ
 ・閉じカッコの直後はスペースがあったりなかったり

【ひとこと】

これはかなり高度な検索/置換になりますので、上の「考え方の整理」にあげたポイントを、順番に作っていくことにしましょう。これを順番に理解していけば、正規表現のマスターもかなりの段階まで進むはずです。


【検索その1】

 [0-90-9]+

 ---> 前半が半角数字、後半が全角数字です。+ を付けて1回以上の出現。

【検索その2】

 [0-90-9] ?+

 ---> もうお分かりですね。「半スペがあったりなかったり」は △? です。

【検索その3】

 [0-90-9] ?+[((] または

 ---> 半スペあり/なしの後に、全角半角の開き丸カッコ。

ここで、今までの内容をちゃんと理解してきた人であれば、[((]の部分に疑問を持った方がいらっしゃるかもしれません。そうです。正規表現を使っているときに半角の丸カッコを指定するには、\( のようにエスケープする必要があったはずですよね。

参照リンク:# 翻訳者のための正規表現~基本その4

はい。その通りです。したがって、上のパターンは

 [0-90-9] ?+[\((] または

と書いても同じ機能になります。ところが、[ ] で囲んだ範囲指定の中では、

 ピリオド(.)
 アスタリスク(*)
 プラス(+)
 クエスチョンマーク(?)
 丸カッコ ( )

はエスケープしなくても、その文字のままとして解釈されるのです。


【検索その4】

 [0-90-9]+ ?[((].+[))]

 ---> 開きカッコ [((]、閉じカッコ [))]、その間にある .+ が任意の文字列です。

さあ、今回最大の難関です。記事のいちばん下に練習用のテキストがあるので、ためしにこのパターンをコピペして検索を実行してみてください。

1304291

こんな風に、数字から、最後の閉じカッコまで一気にヒットしてしまいました。これでは、全体が1回だけ置換されて、とんでもない結果になってしまいます。本当は、

1304292

というようにそれぞれの箇所をヒットさせて、それを置換したいわけです。

どうして、上のスクリーンショットのように広い範囲がヒットしてしまうかというと、その原因は、.+ の部分にあります。このパターンの意味は「任意の1文字を1回以上繰り返す」ということでした。

さて、ここで指定しようと考えているのは、

 全角半角の数字 + 半スペあり/なし + 開きカッコ + 任意の文字列 + 閉じカッコ

というパターンです。たとえば、2013 (平成25) にヒットさせたいわけですから、

 2013 …… [0-90-9]+ でヒット
 △ …… △? でヒット
 ( …… [((] でヒット
 平成25 …… 任意の文字列 .+ でヒット
 ) …… [))] でヒット

するはずと想定したわけですが、.+ という指定が「平成25」でストップせず、

任意の文字にヒットするかぎりずーっと

(=次の条件にヒットするまで)ヒットしてしまうのです。

つまり、この例で言うと「~150」のところまでが .+ でヒットし、その後の全角丸カッコ [))] に当たって、そこでようやく止まったということです。

このように、「任意の文字(の複数回出現)」を指定したとき、別の条件が出てくるまでずーっと当たりになってしまう動作を、

最長一致

と言います。英語では、このような性質を greedy と表します。

ではどうするかというと、「任意の文字(の複数回出現)」が必要最小限の回数だけ当たる、

最短一致

(英語では non-greedy)で動作するよう指定します。

 [0-90-9]+ ?[((].+?[))]

またクエスチョンマークですね。.+ の後に ? を指定すると、上で想定したとおりの動作になります。

これで検索については、すべてのパターンを網羅できました。これに、区切り \f を入れれば完成です。


【検索その5 ~ 最終形】

 [0-90-9]+\f ?\f[((]\f.+?\f[))]

【置換】

 \0 \(\3\)

【解説】

 ・検索パターンについては、上に詳しく説明しました。
 ・区切り \f は4個入っています。説明すると、

  全角半角の数字\f△?\f開きカッコ\f任意の文字列\f閉じカッコ

 となっているはずです。

 ・\0△\(\3\)△ …… 最初の数字 + 半スペ + 半角開きカッコ + 任意の文字列 + 半角閉じカッコ + 半スペ


これで置換してみると ...... うまくいきませんね。スペースと半角カッコの処理はうまくいっているのですが、

全角数字を半角数字に置換

というのは、実は通常の正規表現ではできないのです。[0-9]と範囲指定しているだけですから、ヒットした数字をどの半角数字に置換していいか、までは判断できませんからね。

ということで、実は数字の全角/半角置換となると、これはマクロの領域になってしまいます。


…… というのが、私も佐川さんも共通の見解だったのですが、実は、これがつい最近のバージョンの秀丸エディタ(ver.8.20)からは可能になったのです。

私自身、今回の勉強会の準備をしているとき、初めて知りました。


さすがに長くなったので、これは次回に回します。興味のある方は、秀丸エディタのヘルプで「変換モジュールによる変換の指定」というトピックを調べてみてください。


----------練習用テキスト・始----------

2013 (平成25) 年4月15(現地時間)日、アメリカ北東部・ボストンで開催されていたボストンマラソンのゴール付近で2(あるいは3)回の爆発が起き、100(~150)人以上が死傷する事件が発生した。

----------練習用テキスト・終----------

ふー、疲れた。


でも、こんな風に勉強会の準備をすると、自分でもいい勉強になるんですよね。今回もそれを痛感しました。

03:48 午後 翻訳者のPCスキル | | コメント (0) | トラックバック (0)

はてなブックマークに追加

# 翻訳者のための正規表現~勉強会の解説、その2

4/23に開催した「十人十色・正規表現入門セミナー」後半の内容の復習、第2回いってみます。

お題その3

・和文中の余分なスペースを削除する
例:国内の△農業△生産 → 国内の農業生産


【考え方の整理】

 ・和文文字すべてにヒットするパターンを作る
 ・\f 区切りを使って、半角スペースだけ削除するように置換する

【検索】

 [亜-熙ぁ-んァ-ヶー。、・]\f \f[亜-熙ぁ-んァ-ヶー。、・]

【置換】

 \0\2

【解説】

 ・[亜-熙ぁ-んァ-ヶー。、・] …… 漢字、ひらがな、カタカナ(長音含む)、句読点
 ・\f△\f …… 半角スペースの前後に区切り


これ、使う場面は多いと思います。リクエストで説明いただいたのは、「PDFなどをOCRすると、(原典の改行がスペースに置き換えられる等の理由で)不要な半角スペースが入る、それを削除したい」ということでした。そのほか、ブラウザ上の文字列をコピーしたときにも、同じように不要な半角スペースが入ることがあります。

ひらがなの範囲指定は[ぁ-ん]、1文字目は小さい「ぁ」であることに注意してください。

カタカナの範囲指定[ァ-ヶー]でも、「ァ」と「ヶ」はそれぞれ小さい文字です。

漢字の範囲については、佐川さんと私でちょっと流儀が違いました。佐川さんは、「第1水準と第2水準の漢字」ということで、

[亜-黑]

と指定していましたが、私はいつもこのパターンです。「熙」より後の漢字(シフトJISの文字コードで)は一般的な文章にほとんど出てこないので。ちなみに、秀丸エディタで検索文字に「熙」より後の漢字(「神」や「祥」)を指定すると、ダイアログの右下のほうに「機種依存文字です」という警告メッセージが出ます。詳しくは、秀丸エディタのヘルプで「機種依存文字について 」を参照してください。


お題その4については、失敗例を挙げながら説明するので、かなり長くなります。稿を改めましょう。

----------練習用テキスト・始----------

また、農地集積の推進に関して、「我が国の食と 農林漁業の再生のための基 本方針・行動計画」(平成 23 年 10 月 25 日食と農林漁業の再生推進本部決定)及び「「我が国の食と農林漁 業の再生のための基本方針・行動計画」に関する取組方針」(平成 23 年 12 月 24 日農林水産省)において、①戸別所得補償制度の規模拡大加算、②人・農地プラン(地域農業マスタープラン)に位置付けられた中 心経営体への農地集積に協力する者に対する協力金の交付等の施策により農地集積を加速化し、これによ り、土地利用型農業について、平成 28 年度までに「平地で 20~30ha、中山間地域で 10~20ha の規模の経 営体が大宗を占める構造を目指す」こととされている。

----------練習用テキスト・終----------

01:59 午後 翻訳者のPCスキル | | コメント (0) | トラックバック (1)

はてなブックマークに追加

2013.04.28

# 翻訳者のための正規表現~勉強会の解説、その1

前回は、置換の初回からいきなり難しい話になってしまいましたが、先日(4/23)の勉強会に参加していただいた方には、\f の使い方もだいぶわかっていただけたかもれしません。


今回は、特別編として、先日の勉強会でみなさんからいただいたお題に対する回答を説明しながら、置換の実例をいくつか紹介しようかと思います。勉強会では、回答をスライドでお見せしながら、いくつか実際に試していただきましたが、公開録画では画面が見えないので、録画の説明音声を聞きながら、以下の説明を読んでいただくといいかもしれません。

これ以降、表記は以下のようにします。

・「お題」と【解説】の中では半角スペースを△、全角スペースを□で表します。

・【検索】、【置換】の中では、半角スペースも全角スペースも実際の文字で表しています。

・したがって、「回答」の文字列は、そのままコピペすれば試すことができます。
 (コピペできる範囲は水色を付けてあります)

・【解説】を読む前に、できるだけ検索/置換の意味を自分で考えると練習になります。


お題その1

・Page△12 → 12ページ

【考え方の整理】

 ・数字はそのままにする(複数桁の場合もある)
 ・半角スペースは削除する
 ・"Page" → 「ページ」に置換する
 ・数字と「ページ」の順序を入れ替える

【検索】

 Page \f[0-9]+

【置換】

 \1ページ

【解説】

 Page△ …… 英語の"Page"と半角スペース
 \f …… 区切り文字
 [0-9]+ …… 半角数字が1回以上出現

 \1ページ …… 区切り文字 \f の後の部分(=数字)に、「ページ」を続ける


お題その1の応用

・Page△12 → 12ページ
・Page24 → 24ページ

【考え方の整理】

 ・数字はそのままにする(複数桁の場合もある)
 ・原典がいい加減で、半角スペースがあったりなかったりする
 ・どちらにしても、半角スペースは削除する
 ・"Page" → 「ページ」に置換する
 ・数字と「ページ」の順序を入れ替える

【検索】

 Page ?\f[0-9]+

【置換】

 \1ページ

【解説】

 Page△? …… 英語の"Page"と、半角スペースが0回か1回
 \f …… 区切り文字
 [0-9]+ …… 半角数字が1回以上出現

 \1ページ …… 区切り文字 \f の後の部分(=数字)に、「ページ」を続ける


前回書いたように、\f で区切ったパートを表すとき、1つ目は \0 で始まることに注意してください。したがって、今回の場合、数字に当たる部分は \1 です。

このお題のように、「一部を置換し、順序を入れ替える」というパターンを習得するだけで、正規表現による置換を活用できる場面は大きく広がります。ぜひマスターしましょう。

「応用」で違っているのは、半角スペースの直後のクエスチョンマーク(?)だけです。「ある文字があったりなかったりする」とき、これを使いこなせるとかなり実用性が上がります。


お題その2

・長いカタカナ語を最初の3文字にしたい
 例:「クルーズ・コントロール」を「クルー」に

【考え方の整理】

 ・カタカナすべてを表すパターンは、[ァ-ヶ]
 ・2文字目以降には中黒(・)と長音記号(ー)も出てくる
 ・3文字目まで、とそれ以降を区切る

【検索】

 [ァ-ヶ][ァ-ヶー・]{2}\f[ァ-ヶー・]+

【置換】

 \0

【解説】

 [ァ-ヶ] …… 1文字目はカタカナのみ
 [ァ-ヶー・] …… 2文字目以降は長音記号と中黒もあり
 {2} …… 直前の文字が2回繰り返される
 \f …… 区切り文字
 [ァ-ヶー・]+ …… 任意の数のカタカナ(長音と中黒を含む)が続く

 \0 …… 区切り文字 \f の前の部分(=カタカナ3文字分)


途中で区切り文字 \f を使うことは予想できたと思います。\f より前の部分を

[ァ-ヶー・]{3}

と書いてもよさそうですが、こうすると箇条書きの行頭マークとして中黒が使われている場合にもヒットしてしまうので、1文字目だけパターンを変える必要がありました。

上の説明で使った {2} とか {3} とか、つまり「中括弧でくくった数字」は、基本編で説明していませんでした。

基本編では、「直前の文字を繰り返す」指定として、

アスタリスク(*)…… 0文字以上
プラス(+)…… 1文字以上
クエスチョンマーク(?)……0文字または1文字

を紹介しましたが、中括弧 { } を使うと、繰り返し回数を任意で指定することができます。


{2}、{3} のように数字を1つだけ指定すると(桁数は任意)、その回数の繰り返しになります。

例:

[0-9]{4}
2013 のような年号にヒットします。


{2,5} のように、カンマで区切って数字を2つ指定すると(桁数は任意)、その範囲の繰り返しになります。

例:

[ぁ-ん]{4,8}
4文字以上8文字以下のひらがなにヒットします。


{5,} のように、数字(桁数は任意)とカンマだけ指定すると、その数以上の繰り返しになります。

例:

[亜-熙]{4,}
4文字以上連続する漢字にヒットします。


第1回はここまでですが、以上の内容を練習するためのテキストも以下に貼っておきます。これをテキストファイルにコピペして、上の検索/置換を練習してみてください。


----------練習用テキスト・始----------

Page 1
Page5
Page 234

クルーズ・コントロール
ユーザーインタフェース
・クルーズ・コントロール(冒頭の中黒)

----------練習用テキスト・終----------

11:27 午後 翻訳者のPCスキル | | コメント (0) | トラックバック (0)

はてなブックマークに追加

2013.04.22

# 正規表現入門セミナー(十人十色勉強会)

定員の関係でFacebook上でのみご案内していましたが、直前になって数名分の空きができたので、急な話ではありますが、こちらでも告知します。

3月にもご紹介したことがある、Facebook上の勉強会グループ「十人十色」の主催で、正規表現の勉強会があります。空きはわずかですが、以下、ご都合と興味しだいで、いかがでしょうか。


日時:
4月23日(火)……明日です
14:00〜17:00

場所:
国際文化会館セミナーD室(港区六本木)
http://www.i-house.or.jp/facilities/

参加費:
会場使用料として1人1500円程度
(参加人数で頭割りしますので、多少は上下します)


参加の前提
・各自ノートPC持参
・そのPCに「秀丸エディタ」をインストールしておく
・拙ブログでシリーズ連載している「翻訳者のための正規表現」を読んでおく
(この前提をクリアしておくほうが、当日の収穫はまちがいなく大きいはずですが、急な告知ですので、満たしていなくても興味のある方はご参加ください)


Facebookアカウントをお持ちの方は、Facebook経由でお申し込みください。Facebookアカウントをお持ちでない、またはあっても方法がわからない方は、baldhatterまで直接ご連絡ください。

11:15 午前 翻訳・英語・ことば | | コメント (0) | トラックバック (0)

はてなブックマークに追加

2013.04.06

# 久しぶりに中華街

怒濤の3月もようやく終わったので、子どもの春休みも終盤の4月5日、ひさしぶりに中華街へ出かけました。

よく考えたら、今まではいつも日曜か祝日だったので、こんなに空いてる中華街は初めてだったかも。いつも長い行列のできている招福門でさえ待ち時間ありませんでした。

チャイハネ(私がよく行く、エスニック系服飾屋さん)で服買って、新しい帽子もゲットして... さらに今回は、子どもも大きくなって、あまり帰宅時間を気にしなくてよくなったので、ゆっくり買い食い歩きなどしつつ、今まで行ったことのなかった関帝廟にも行ってきました。

130405_01

いいですねー、このセンス。

130405_02

お祈りのためのロウソクなど立てて……

130405_03

なるほど、「関聖帝君」というのですね。

130405_05

末っ子、写真はうまくないなぁ ^^;


130405_07

狛犬(って言うのか?)の顔がとぼけていて、いい味だしてました。

帰りは、そのままみなとみらい線に乗らず、シーバスで夜景を楽しむことにしました。

130405_09

いや、これは氷川丸ですけど...

シーバスといえば、2010年の9月、Project Tokyoの前日に、現在の通訳翻訳クラスタにつながる通翻の面々がはじめて横浜に集った、あの日ですよねー。あのときの逆コースをたどったことになります。

1009152

これが、あのときの氷川丸です(Sagtranさんの写真です)。

1009151
(同じく、Sagtranさんの写真)

あのとき、横浜を出て昼間見たコスモワールドの観覧車を……

130405_11

逆方向から夜景で眺めました。


2010年当時のことをいろいろ懐かしく思い出したので、1枚だけ写真貼っておきます。

1009153

なんでだか忘れたけど、ぜんいん後ろ向きの写真。
(これでもマズい、という人がいたらご連絡ください、削除します)

ところで、シーバスを下船してから、横浜駅までの道のりって、なんだか、思いっきりわかりにくくないですか?


05:01 午後 旅行・地域 | | コメント (4) | トラックバック (0)

はてなブックマークに追加