jeyseni's diary

「ジェイセニ」と呼んでください。批判ではなく提案をするのが生き甲斐です。

「MBS」で正規表現処理を実現し,キーワードを抽出

「MBS」というファイルメーカープラグインがとんでもなく多機能な件 - jeyseni's diary 2021/5/20 でMBSというファイルメーカープラグインを紹介した。QRコードなどのバーコードを作成したり,メールを受信したり,1レコードの中でのテキストソートの実験をしてきた。

 その後,機能を見つけていたが試していなかったのが,「正規表現」処理である。ファイルメーカーで文字列を処理しようとすると,途轍もない関数表現をする必要がある。正規表現が使えないのが欠点なのである。

 たとえば,テキストの中に数字を消したい場合は,通常は,「0」を「""」に検索置換する,という処理を0から9まで繰り返さなければならない。数字だけを抽出する場合はFilter関数があるのだが,その逆がない。

 MBS正規表現を使うと,任意の数字は[0-9]と表現できるので,これを「""」に検索置換するというスクリプトを1行書けばいい。

 同じようにして,長い文章からキーワードを抜き出してみることにした。やり方はとりあえず1つで,上のやり方でひらがなをすべて改行に置換してしまうことにする。ひらがなのキーワードは少ないからである。検索対象を「[ぁ-ん]」と正規表現し,これを改行マークに置き換える。ついでに,「カッコ」や句読点も改行マークに置き換える。次に,以前実現したフィールド内のリストソートをかける。さらに,隣り合う行で同じものがある場合に消去する関数を使って,キーワードの重複をなくす。あとは,たとえば数字だけの行は前半に固まっているので,ごっそり削除していくことで,ほぼ目的としたキーワード抽出ができることを確認した。

 正規表現での置換処理,フィールド内ソート,重複行削除のそれぞれの処理は,たとえば5000字のテキストなら一瞬である。

 かつてトライした方法は,日本語テキストを分かち書きに変換し,ひらがなだけを削っていく方法だった。何の処理をするにしても,50音を1つずつ処理していかなければならなかったから,マクロの行数も半端なく多かった。これが1行で書けるメリットは大きい。

 テキスト処理というと,Windowsが始まる以前からあったgrep, sed, awkなどのスクリプト言語は実に強力だった。検索,文字列処理,文字の入れ替えなど,何でもまずこれらで下処理してから整理してきた。データベース時代に入って,これらのスクリプト処理がほとんど使えなくなり,まずテキストエディタで処理してからデータベースにぶち込む,といった面倒臭い時代がずっと続いていた。

 ファイルメーカーに出会ったのが1995年ごろで,それ以来ずっと活用シている中で,初めて正規表現が利用できる環境を組み込むことができて,大変興奮している。純米国産プラグインでありながら,日本語でも使える柔軟さには敬服する。さらに使い方を考えていきたい。