最先端の検索ツール「汎用検索」を使おう(活用編・part1)
汎用検索に出会って人生変わりました
EnigmaStudio Proにてリリースされた「汎用検索」というツールの紹介をしたい。
EnigmaStudioとはわんど氏によって展開されている謎制作支援ツールであり、機能の充実はもちろん、収録辞書の種類だけ見ても他ツールとは段違いだ。
登場から約1年しか経っていないが、高度な謎制作において超重要なツールとなってきている。
無料でも十分に使える機能が多いが、有料プラン(Pro)ではさらに便利な機能が多く使える。その中に、「汎用検索」という機能が加わった。
「汎用検索」は実は2023年末にひっそりとリリースされていたが、活用方法の解説記事を書くのに苦労し、情報がなかなか出せずにいた。
「汎用検索」ついての情報が初めて出たのはこの記事だ。
まだ読んでなければ、今読むよりも後で読む方が良い。
もし既に読んだ人がいたら「意味不明すぎてよく分からん」と思っただろう。それで正しい。
この記事は、私が過去に書いた「正規表現は今日から使おう」という記事へのアンサーだ。
私の記事は謎制作で行う単語検索に正規表現を活用する方法の記事だ。
序盤は正規表現の基礎的な解説をしつつ、途中からマニアックな手法を用いた複雑な正規表現を紹介した。
その記事で、例えば中級編の途中で
ローマ字表記した時に母音aiueoが1度ずつ現れる単語
例:ぽりばけつ(oiaeu)、れいだんぼう(eiaou)、いっちょうまえ(iouae)
の検索方法として、以下の正規表現を紹介した。
^(?=.*([あかさたなはまやらわがざだばぱ](?![ぁぃぅぇぉゃゅょゎ])|.[ぁゃゎ]))(?!.*([あかさたなはまやらわがざだばぱ](?![ぁぃぅぇぉゃゅょゎ])|.[ぁゃゎ]).*([あかさたなはまやらわがざだばぱ](?![ぁぃぅぇぉゃゅょゎ])|.[ぁゃゎ]))(?=.*([いきしちにひみりぎじぢびぴ](?![ぁぃぅぇぉゃゅょゎ])|.[ぃ]))(?!.*([いきしちにひみりぎじぢびぴ](?![ぁぃぅぇぉゃゅょゎ])|.[ぃ]).*([いきしちにひみりぎじぢびぴ](?![ぁぃぅぇぉゃゅょゎ])|.[ぃ]))(?=.*([うくすつぬふむゆるぐずづぶぷゔ](?![ぁぃぅぇぉゃゅょゎ])|.[ぅゅ]))(?!.*([うくすつぬふむゆるぐずづぶぷゔ](?![ぁぃぅぇぉゃゅょゎ])|.[ぅゅ]).*([うくすつぬふむゆるぐずづぶぷゔ](?![ぁぃぅぇぉゃゅょゎ])|.[ぅゅ]))(?=.*([えけせてねへめれげぜでべぺ](?![ぁぃぅぇぉゃゅょゎ])|.[ぇ]))(?!.*([えけせてねへめれげぜでべぺ](?![ぁぃぅぇぉゃゅょゎ])|.[ぇ]).*([えけせてねへめれげぜでべぺ](?![ぁぃぅぇぉゃゅょゎ])|.[ぇ]))(?=.*([おこそとのほもよろをごぞどぼぽ](?![ぁぃぅぇぉゃゅょゎ])|.[ぉょ]))(?!.*([おこそとのほもよろをごぞどぼぽ](?![ぁぃぅぇぉゃゅょゎ])|.[ぉょ]).*([おこそとのほもよろをごぞどぼぽ](?![ぁぃぅぇぉゃゅょゎ])|.[ぉょ]))[^ー]*$
……気が遠くなる正規表現だ。
ただ、これまではコレを使うしかなかった。記事執筆当時において、間違いなく最先端の方法の一つだった。
時代は変わる。
この記事で紹介する「汎用検索」を用いれば、ローマ字表記した時に母音aiueoが1度ずつ現れる単語の検索は下記のような「4つのコマンドの組み合わせ」で行える。
実際にどんな検索なのか、デモ画面を見てみよう。
①まず、辞書読み込み画面を開いて、「推奨設定」ボタンを押そう。「豚辞書」「一般語」「CEFR-J WordList (英語一般語)」「イラスト辞書Lv.1」の4つにチェックが入ればOKだ。
②続いて、検索デモ画面を開き、画面下部の入力辞書選択欄から「一般語」を選択して、「検索」を押そう。
ローマ字表記した時に母音aiueoが1度ずつ現れる単語の検索ができたことが分かるだろう。
とても強力な検索を、複雑な正規表現なく、直感的に実行できる。
強い。
汎用検索は、これまでのツール達と根本的に異なる、汎用的に様々な検索を行うためのツールだ。
いきなり「様々なことができるツール」を使っても「自由度が高すぎてどうすれば良いか分からない」となる可能性が高い。イラレをインストールした後の最初の1年間の私のように。
この記事では、使い方の実例を紹介しつつ、どんな機能をどう使うべきか、丁寧に少しずつ紹介していく。
この記事の目標と前提の確認
汎用検索はEnigmaStudio Pro(有料サービス)の一機能だが、この記事は有料会員以外にも読む価値があるように書いた。
先ほど見たように、汎用検索にはデモモードがある。
デモモードでは、検索条件は変更できないが、有料会員以外も検索を実行できるので、「こういうコマンドでこんな検索ができるよ」という実例を示すのに向いている。
ぶっちゃけると、この記事で読者全員に機能を体験してもらうために開発してもらった機能だ。ありがたい……
なので、この記事は是非全員、最後まで読んでほしい。
この記事における目標は、読者によって3つに分かれる。
①EnigmaStudio Proユーザ
汎用検索を実際に使いこなすため、各コマンドの機能と活用方法をを理解してほしい。「これを組み合わせたらこんな検索もできるのでは!?」と自分で思いつけるようになろう。
②EnigmaStudio Proを利用したいかもしれない人
「どんなことができるか」を感じ取ってもらえると嬉しい。有料会員になる前から何ができるか知れるのは嬉しいことだ。
③今のところEnigmaStudio Proを利用する気は無い人
とりあえず、「検索ツールは今どこまで進化しているのか」をこの記事を通して知ってほしい。
それを把握しておくことは、特に謎制作者にとって非常に大事なことだ。
記事を読む上で、「正規表現」という概念があるということだけ知っておこう。
正規表現とは、「ある性質の文字列の集合」を、簡潔かつ明確に表現することに適した言語のようなものだ。
. が任意の1文字を表すとか、詳しく知って読む方が理解が深まるのだが、知らなくても大体雰囲気で読めるはずだ。
「この正規表現はこういう意味なので~」と書いてあったら、「ふうん、そうなんだ」と分かったつもりになりつつ読んでほしい。
汎用検索のおかげで「複雑な正規表現」を覚えるメリットは弱まるだろう。ただ、基本的な正規表現は引き続き使う機会が多いので、最終的には「調べながらで良いから使える」ようになれると後々都合が良い。
この記事を読んだ後、気になったら筆者の過去記事「正規表現は今日から使おう(初級編)」を読んでもらえると嬉しい。
(とりあえず初級編だけ読めば良い。中級編以降は興味が湧いたらで良い)
汎用検索って何? 学歴は? 彼女はいるの?
本題に入る。
既存の検索ツールと比較しつつ、汎用検索の特徴を理解しよう。
汎用検索の設計において、既存ツールの持つ機能は「コマンド」の組み合わせであるという考え方を採用している。
それらコマンドの機能を強化しつつ、コマンドを自由自在に組み合わせられるようにしたのが「汎用検索」だ。
従来の正規表現検索機能は、
①「辞書にある単語」という単語の集合に対して、
②「正規表現にマッチする単語だけ残す」コマンドを実行
③残った単語の集合を出力
という動きだと考えられる。
例えば「は」「ば」「ぱ」をすべて含む単語を検索する時、
こう動いているイメージだ。
便利だが、1個のコマンドで「は」「ば」「ぱ」それぞれの条件を指定しようとした結果、「先読み」という高度な記法を使った正規表現になっている。
謎解き単語検索βやEnigmaStudioでは検索対象となる辞書ファイルを自身で設定する「カスタム辞書」機能があるため「『は』を含む単語を検索→検索結果をカスタム辞書に設定→それを対象に『ば』を含む単語を検索→検索検索をカスタム辞書に設定→それを対象に『ぱ』を含む単語を検索」という方法もあるものの、もっと直感的で簡単に検索ができれば嬉しい。
これが、コマンドを何個も組み合わせられる汎用検索ではこうなる。
①「辞書にある単語」という単語の集合に対して、
②「『は』を含む単語だけ残す」コマンドを実行
③「『ば』を含む単語だけ残す」コマンドを実行
④「『ぱ』を含む単語だけ残す」コマンドを実行
⑤残った単語の集合を出力
「単語一覧を条件で絞って、さらに条件で絞って……」と、
絞り込みの処理を繰り返すことで直感的に条件を指定できる。
分かりやすい。
もう1つ例を出す。
「はがき検索」や「正規表現置換検索」という機能が前からある。
例えば、置換前「は」、置換後「き」で検索すると、
「はっぷ→きっぷ」「はんぺん→きんぺん」
のように「『は』が『き』 になっても単語になる組み合わせ」が検索できる。
これは、
①「辞書にある単語」という単語の集合に対して、
②「は』を含む単語だけ残す」コマンドを実行
③「『は』を『き』に変換する」コマンドを実行
④「辞書に含まれる単語だけ残す」コマンドを実行
⑤残った単語の集合を出力
という動きだと考えられる。
非常に便利だが、このパターンの検索しかできないのがもったいない。もっと自由にコマンドを組み合わせられたら、もっと便利な検索ができるのに。
例えば「しがだいがく」を変換法則のヒントにする謎を作りたくて、
「『し』が『だ』 になって、さらに『い』が『く』になっても単語となるもの」(例:いし→くだ、しんい→だんく)を検索したい場合。
これまでのツールでは検索できない。
これが、コマンドを何個でも組み合わせられる汎用検索ではこうなる。
①「辞書にある単語」という単語の集合に対して、
②「『し』を含む単語だけ残す」コマンドを実行
③「『し』を『だ』に変換する」コマンドを実行
④「『い』を含む単語だけ残す」コマンドを実行
⑤「『い』を『く』に変換する」コマンドを実行
⑥「辞書にある単語だけ残す」コマンドを実行
⑦残った単語の集合を出力
コマンドを自由に組み合わせられるメリットが強く発揮されている。
「コマンド」を組み合わせて検索するイメージが持てただろうか。
この仕組みのおかげで様々な検索ができるので、慣れていこう。
この記事で実践する単語検索
この記事では、以下の11個の単語検索について解説をする。
(なお、①②⑨は既存ツールでも検索できるが、既存より直感的に検索する方法を紹介する)
①「あか」「むらさき」「くろ」「みどり」から1文字ずつ拾ってできる4文字の単語(拾う順は問わない)
例:からくり、くさかり
②「み」「ど」「り」の3文字がこの順で現れる単語
例:みどり、うみどり、みぎどなり
③「しがだいがく」検索(し→だ、い→く で変換しても単語になる単語)
例:がいしん→がくだん、しんまい→だんまく
④「はがき」「めがね」「てがみ」「こけし」の内1つ以上を適用して別の単語になる単語
例:こめぶくろ→ねぶくろ
⑤並べ替えると違う単語になる英単語
例:among→mango、chicken→checkin
⑥8文字の英単語で、「奇数文字目」を並べ替えると単語になり、「偶数文字目」だけ並べ替えると単語になるようなもの
例:heavenly(奇数:heal/偶数:envy)、olympics(奇数:copy/偶数:slim)
⑦「先頭4文字」を並べ替えると「後半4文字」になる英単語
例:teammate
⑧濁点・半濁点をすべて取り去っても単語になる単語
例:がーでん→かーてん、あだぷた→あたふた
⑨a/e/i/o/uの母音が2度ずつ登場する単語
例:えりざべすじょおうはい(erizabesuzyoouhai)、はっせいかのうじょうえい(hasseikanouzyouei)等
⑩単語を五十音順で1つ進めても単語になり、さらに1つ進めても単語になるような単語
例:おるか→かれき→きろく、はせい→ひそう→ふたえ
⑪英単語で、「ABC順でn文字目」の文字を「50音順でn文字目」の文字に対応させて変換しても単語になるような単語
例:act->あうと(1/3/20文字目)、bar->いあつ(2/1/18文字目)
では使っていこう
ツールの紹介では、操作方法を紹介して実際に操作してもらうのが本来一番良いが、まずは記事を読む全員を対象に、デモモードを使って検索ページを実際に見てもらいつつ、コマンドの解説をする。
デモモードを使う上で、記事冒頭で行った辞書の設定をもしまだやっていなければしておこう。
辞書読み込み画面を開き、「推奨設定」ボタンを押せばOKだ。これをしないと後の検索が実行できない場合がある。
EnigmaStudio Proユーザが実際に自分で操作するための操作説明は別記事「最先端の検索ツール「汎用検索」を使ってみよう(操作説明編)」にまとめた。「操作説明編」は後で読めば良いので、一旦今読んでいる「活用編」を最後まで読もう。「こういう機能があるんだな」を先に知ってから操作説明を読む方が分かりやすい。
①「あか」「むらさき」「くろ」「みどり」から1文字ずつ拾ってできる4文字の単語(拾う順は問わない)
→検索デモ画面 (「豚辞書」を選択して検索)
デモ画面を見てもらいつつ、何をやっているかを理解していこう。
最初に「文字数フィルタ」コマンドで4文字の単語に絞り込む。
使い方は察せるだろう。
この例では「4文字以上かつ4文字以下」=「ちょうど4文字」の条件を与えている。
その後「正規表現フィルタ」コマンドで単語を絞り込んでいる。
[あか] という正規表現が「あorか」を表すので、これにマッチする場合、「あか」の内どれか1文字を含むことになる。
以降同様に、
・正規表現 [むらさき] にマッチ=「むらさき」の内どれか1文字を含む
・正規表現 [くろ] にマッチ=「くろ」の内どれか1文字を含む
・正規表現 [みどり] にマッチ=「みどり」の内どれか1文字を含む
の要領で「正規表現フィルタ」コマンドを繰り返し実行して、条件すべてを同時に満たす単語を楽に検索できる。
なお、「正規表現フィルタ」には「否定マッチ」という機能がある。これは「正規表現にマッチしないものだけ残す」ものだ。
正規表現の否定条件を書くのは意外と難しい。
例えば「ぱん」という文字列を含まない単語を検索するには、
^(?!.*ぱん)
という難しい正規表現を書く必要がある。
汎用検索だと、正規表現パターンに ぱん と入れて否定マッチにチェックを入れれば終わりだ。簡単。
②「み」「ど」「り」の3文字がこの順で現れる単語
→検索デモ画面 (「豚辞書」を選択して検索)
これは正直、これまでも
み.*ど.*り
という簡潔な正規表現で書けるので、正直困ってはいない。
( . は任意の1文字を表し、 * が「直前の文字が0個以上」という条件を加えるため、 .* は「0文字以上の任意の文字列」という意味だ)
ただ、EnigmaStudioには「候補文字フィルタ」という便利なコマンドがあるので紹介したい。
「みどり」と入力し、候補タイプに「がこの順で含まれる」を選ぶと、簡単にこの検索が可能となる。嬉しい。
他にも、
「あいうえお」「から構成される」で検索すれば、
「あおい」「いいあい」のような、母音だけで構成される単語が見つかる。「あんさー」「を全て含む」で検索すれば、
「あーかんさす」「あなうんさー」のように、「あんさー」の4文字を拾える単語が見つかる。
→検索デモ画面 (「豚辞書」を選択して検索)「あいうえお」「を含まない」で検索すれば、
母音を含まない単語が見つかる。
→検索デモ画面 (「豚辞書」を選択して検索)「すいかわり」「からこの順で取り出す」で検索すれば、
「すいり」「いかり」「かわ」のような単語が見つかり、「◯◯××◯=すいり」「×◯◯×◯=いかり」「××◯◯×=かわ」「◯◯◯◯◯=?」みたいな謎が気軽に作れる。
→検索デモ画面 (「豚辞書」を選択して検索)
等々。
候補文字フィルタを使えば色々と便利な検索ができる。
なお、「候補文字フィルタ」は実は汎用検索じゃなくても使える。
「一般検索」という誰でも使える機能に同じものがあるのだ。
左上メニューから選べる「一般検索」で、検索タイプに「候補文字検索」を選ぶと、有料会員じゃなくても使えるのだ。
似た機能は「謎解き単語検索β」の「カスタム」機能にもあるが、「この順で~」系の機能はEnigmaStudioにしか今のところ無い。
③「しがだいがく」検索(し→だ、い→く で変換しても単語になる単語)
→検索デモ画面 (「豚辞書」を選択して検索)
これは既存の検索機能では検索できない。
「正規表現置換」コマンドは、「正規表現パターンにマッチした部分」を「置換文字列」に置き換える機能だ。
この検索例では
正規表現パターン「し」 置換文字列「だ」
正規表現パターン「い」 置換文字列「く」
という2種類の「正規表現置換」コマンドを使っている。
1つ目は「マッチした『し』を『だ』に置換」
2つ目は「マッチした『い』を『く』に置換」
するわけだ。
1つ目の「し→だ」の置換を行うと、例えば
「しんせい → だんせい」「しんまい → だんまい」と変換される。
「だんまい」という単語は辞書に無いが、気にしない。
ただ「置換するだけのコマンド」なので、結果が実在する単語かどうかは、どうでも良いのだ。
その後2つ目の「い→く」の置換を行うと、
「だんせい → だんせく」「だんまい → だんまく」と変換される。
このままでは単語じゃない言葉ばかりが出てきてしまう
例えば「だんせく」という単語は辞書に存在しないが、変換結果としては出てくる。
これはさっきと同じ。
ただ、最終的に単語になってほしいはずの検索結果に意味不明な文字列ばかり出ても、正直困るだろう。
そんな時に「辞書マッチ」コマンドを用いる。
これは普通に使うとフィルタする機能として作用し、「指定した辞書に含まれる場合だけ残す」効果となる。
2回の変換の内、
・1度目の変換直後では辞書マッチコマンドは実行しないが、
・2度目の変換直後では辞書マッチコマンドを実行する。
その結果、「しんまい→だんまい→だんまく」は結果に出力され、「しんせい→だんせい→だんせく」は結果に出力されなくなる。
途中で単語じゃないのはOKだが、最後は単語じゃなきゃダメ、ということだ。
こんな風に「単語かどうかの判定」を、好きなタイミングで柔軟に行えるのは便利で嬉しい。
なお、この説明では、
「正規表現置換」の「マッチのみ抽出」というオプションを有効にしている。この意味は次の④で説明する。
また、「辞書マッチ」では「アナグラムマッチ」というオプションに無効にしている。これは⑤で説明する。
④「はがき」「めがね」「てがみ」「こけし」の内1つ以上を適用して別の単語になる単語
→検索デモ画面は説明の途中で紹介
さっきと同じ「正規表現置換」コマンドが使えそうだ。
正規表現パターン「は」 置換文字列「き」
正規表現パターン「め」 置換文字列「ね」
正規表現パターン「て」 置換文字列「み」
正規表現パターン「こ」 置換文字列「」
として、最後に「辞書マッチ」を使えば良い。
(置換文字列を空にすると、「文字を消す」ことができる)
ここで、注意点が2つある。
1つ目。
「マッチのみ抽出」を無効にする必要がある。
「マッチのみ抽出」が有効の時、「その置換が発生しないケースは排除する」という追加機能が発生する。
例えば「ふらいぱん」という単語には「は」が含まれていないので、
「は→き」の置換を適用しても何も起こらず、「ふらいぱん→ふらいぱん」とそのまま残る。
置換が発生されるケースだけが欲しくて「は」が含まれない単語は除外するためのオプションが「マッチのみ抽出」だ。
置換が発生してほしいことが大半なので、普段は有効にすれば良い。
ただ、今回は「はがき」「めがね」「てがみ」「こけし」の内1つ以上が発生すれば良い。必ずしも「はがき」が発生する必要が無いので、無効にするのだ。
同様に、「めがね」「てがみ」「こけし」でもすべて無効にしよう。
では、それを検索するとどうなるか? 確認しよう。
→検索デモ画面 (「豚辞書」を選択して検索)
検索したら、「全然思ってたのと違う……」となっただろう。
それもそのはず。
「はがき」「めがね」「てがみ」「こけし」について「マッチのみ抽出」を無効にしたので、置換が発生しなくても良くなった。
その結果、どの置換も起きない、元の単語がそのまま残るだけのケースが大量に出てきたのだ。
「別に全部の置換が発生しなくて良いけれど、元々と何も変わらないものは流石に要らない」ので、これは困る。
そのための機能がちゃんとある。それが「トレース比較」コマンドだ。
ここで急に「トレース」という、汎用検索独自の超重要概念を説明する。
トレースとは、「単語を変換するたびに追加される履歴」のことだ。
さっきの検索結果をよく見ると「トレース表示」とか書かれているし、カンマ区切りで単語が5つも書かれている。
もし「トレース表示」と書かれていない場合、「結果」の下のボタン4つの内左端のボタンを押すと出るはずだ。
今回だと正規表現置換を4つあるので、変換が4度発生している。
その度に履歴を記録しており、
トレース1: 最初の状態
トレース2: 「はがき」変換実行後
トレース3: 「てがみ」変換実行後
トレース4: 「めがね」変換実行後
トレース5: 「こけし」変換実行後
となる。
なお、画面上部の歯車アイコンを押して出る「トレース番号表示」にチェックを入れると、どの時点でトレース何番なのかを簡単に確認できるようになっている。
さて、今の場合はトレース1(最初の状態)とトレース5(4つの変換を実行した後)が異なる場合だけに絞りたいので、
「トレース比較」コマンドで
「現在のトレース」が「1」「番のトレース」と「異なる」ものを抽出
を選択とうまくいく。
それを実行した検索がこんな風になる。
→検索デモ画面 (「豚辞書」を選択して検索)
期待通りの結果が出たようだ。
ちなみに、検索結果のトレース表示は表示要否を切り替えることができる。全部出ると邪魔な時、活用してほしい。
【参考:ここまでの内容が分かるとできる検索】
・「先頭から2~5文字を抽出した単語」がすべて単語になるような5文字の単語
例:「はなみずき」(はな/はなみ/はなみず/はなみずき がすべて単語になる)
→検索デモ画面 (「豚辞書」を選択して検索)
※「.$」という正規表現が、「末尾にある一文字」を表現していることを利用している。
⑤並べ替えると違う単語になる英単語
→検索デモ画面は説明の途中で紹介
「辞書マッチ」コマンドに「アナグラムマッチ」機能がある。
これは、「並べ替えたら一致する単語が辞書に含まれている」ことを確認する機能だ。複数通りある時、それらすべてについてヒットする。
このアナグラムマッチは、「候補を絞り込むフィルタとしての役割」と「単語を別の単語にする変換としての役割」両方の性質を併せ持つ♠機能だ。
そのため、トレースが追加される。
例えばactという単語は自分自身「act」にマッチするし、アナグラムすると「cat」にマッチする。なので、2通りの単語がトレースに追加される。
デモ画面を見てみよう。
→検索デモ画面 (「CEFR-J WordList」を選択して検索)
※豚辞書じゃないので注意!
「CEFR-J WordList」の単語を「CEFR-J WordList」に対してアナグラムマッチさせてみると、普通の単語は1つのトレースが追加され、アナグラムして別単語になる場合は2つ以上のトレースが追加される。
actに対してact/catの2通りがトレースに追加される。actionはaction自身の1通りしか追加されていない
さて、このままだと「変化しないパターン」ばかりが出てくるのが邪魔だ。
「変化しないパターンの排除」の方法は既に知っている。
「トレース比較」コマンドを使うと良い。
→検索デモ画面 (「CEFR-J WordList」を選択して検索)
トレース比較のおかげで、「異なる単語にアナグラムで一致する組み合わせ」だけを出力できる。
アナグラムマッチは別に今回の検索に特化して役立つものではなく、あらゆる場面で真っ先に検索候補に挙がるべき非常に強力な機能だ。
例えば「アルファベット順で7文字進める」みたいな変換をした結果に対して「辞書マッチするもの」に絞っても全然結果が出なかったとする。
そんな時でも「アナグラムマッチするもの」ならば、
「helper→olswly→slowly」のような結果が出てくる可能性は大いにある。
アナグラムマッチは今後の謎制作の可能性を強力に押し広げる強い味方だ。どんどん活用したい。
⑥8文字の英単語で、「奇数文字目」を並べ替えると単語になり、「偶数文字目」だけ並べ替えると単語になるようなもの
→検索デモ画面 (「CEFR-J WordList」を選択して検索)
「単語の一部分」を使った条件でフィルタするために「正規表現マッチ比較」コマンドがある。
正規表現にはキャプチャという機能がある。8文字の単語は
^........$ と表せるのだが、この際に
^(.)(.)(.)(.)(.)(.)(.)(.)$ という風にカッコで囲うことができる。
この時、「n番目のカッコで囲った部分」にマッチしたものを記憶して、\nや$nという名前で呼び出しができるのが、正規表現の「キャプチャ」機能だ。
1つ目のカッコ(1文字目)は\1や$1という名前で、
2つ目は\2や$2で、……8つ目は\8や$8という名前で呼び出せる。
\nと$nの表記の違いの説明は今は省略する。
一旦「正規表現マッチ比較」では$nという名前でn番目のカッコの中身を参照できると覚えてほしい。
比較文字列2つ目は「2,4,6,8文字目を並べたもの」だ
正規表現パターンに「^(.)(.)(.)(.)(.)(.)(.)(.)$ 」とあり、
比較文字列が「$1$3$5$7」と「$2$4$6$8」、
条件が「すべてアナグラムで辞書に含まれる」と指定されている。
これにより、
・正規表現パターンにマッチする8文字の単語で
・$1$3$5$7(奇数文字目を並べた文字列)をアナグラムすると辞書に含まれて
・$2$4$6$8(偶数文字目を並べた文字列)をアナグラムすると辞書に含まれる
ような単語のみが残るのだ。
ここで、比較文字列はトレースに追加するかどうかを選択できるが、大体はとりあえずトレースしておけば良い。
「奇数文字目をアナグラムしたら言葉になる単語が手に入ったのは良いが、実際どんな単語になるかぱっと見分からない」となると、少し面倒だ。
「正規表現マッチ比較」は、このように「文字列の一部をキャプチャしておいて、それを使って条件判定をする」のに非常に強力だ。もう一つ例を示してみよう。
⑦「先頭4文字」を並べ替えると「後半4文字」になる英単語
→検索デモ画面 (「CEFR-J WordList」を選択して検索)
正直そんな例は「teammate」だけなのだが。
このような場合も「正規表現マッチ比較」が便利だ。
正規表現パターン:「^(....)(....)$」
比較文字列:「$1」「 $2」
条件:「アナグラム一致」
とすることで、
「$1にマッチする先頭4文字」と「$2にマッチする後半4文字」がアナグラムで一致するものだけを残せる。
「条件」は他にも色々指定できる。
「すべて等しい」「等しくないものがある」「すべて異なる」「すべて辞書に含まれる」は見たままの意味だ。
「上の文字列が下の文字列に含まれる」「上の文字列が下の文字列に含まれない」はより高度な操作を覚えてから効果を発揮するものなので、一旦説明を省略する。
「上の文字列<=下の文字列」「上の文字列<下の文字列」は、五十音順やABC順での順序関係の検索を行う条件だ。
「1文字目<2文字目<3文字目<4文字目<5文字目」という条件を与えることで、fortyやghostのような「ABC順に文字が並んだ5文字の英単語」を検索できる。
→検索デモ画面 (「CEFR-J WordList」を選択して検索)
このような単語は、これまで
^a?b?c?d?e?f?g?h?i?j?k?l?m?n?o?p?q?r?s?t?u?v?w?x?y?z?$
という正規条件で検索していた。直感的で簡単に入力できるようになって嬉しい。
また、「$1<$2<$3<$4<$5」でも「$5<$4<$3<$2<$1」じゃない組み合わせ(例えば「こうしえん」のような「$2<$4<$1<$3<$5」な組み合わせ)は、これまではかなり複雑な正規表現が必要だったが、この機能だと楽々検索できる。嬉しい。
【参考:ここまでの内容が分かるとできる検索】
・「先頭から2~5文字を抽出した単語」がすべて単語になるような5文字の単語 (例:はなみずき)
※既に検索方法は示したが、より簡単に検索が可能となる
→検索デモ画面 (「豚辞書」を選択して検索)
・「◯◯が◯◯」または「◯◯は◯◯」という形の単語で、◯◯部分がどちらも「イラストで表現できる単語」になるような単語(◯◯部分の文字数は問わない)
(例:あおがえる、すてーきはうす、せんこうはなび)
→検索デモ画面 (「豚辞書」を選択して検索)
※「すべて辞書に含まれる」の条件にイラスト辞書Lv.1(イラストで表現できる単語が収録されている)を使うことで実現している
⑧濁点・半濁点をすべて取り去っても単語になる単語
→検索デモ画面 (「豚辞書」を選択して検索)
「濁点・半濁点を取り去る」処理は面倒で、既存の検索ツールではできなかった。
汎用検索には「濁音→清音」という複合コマンドが用意されており、簡単に実行できる。
複合コマンドとは、「実は既存のコマンドの組み合わせだが、よく使うものなので特別に1つのコマンドとしてまとめて使いやすくしたもの」と思えば良い。
「濁音→清音」の文字の左の四角アイコンをクリックすると、「シーケンス表示」というものに切り替わる。(再びアイコンをクリックすると戻る)
「濁音→清音」コマンドは実際は上記のような「まだ説明してない複雑な関数」を使って実装されているが、複合コマンドのおかげで「難しいことを意識しなくても簡単に使える」ようになっている。シーケンス表示は今後ほぼ気にしなくて良い。
というわけで、何も考えず「濁音→清音」コマンドの恩恵にあずかっておこう。これを実行すれば濁点と半濁点を消せる。便利だ。
「濁音→清音」で単語が変化したものだけ欲しいので、「トレース比較」で変化があるものだけを残し、最後に「辞書マッチ」コマンドを行うと良い。簡単。
複合コマンドで他に「小書き文字を大きく」なんてものもある。
これと「トレース比較」「辞書マッチ」を組み合わせれば、「さっき/さつき」みたいな組み合わせが簡単に見つかる。
→検索デモ画面 (「一般語」を選択して検索)
※「豚辞書」は文字の大小の区別がないので、「一般語」辞書を用いて検索すること
⑨a/e/i/o/uの母音が2度ずつ登場する単語
→辞書読み込み画面で「ニコニコ大百科」にチェックを入れた上で
→検索デモ画面 (「ニコニコ大百科」を選択して検索)
※母音を10個持つ長い単語が「豚辞書」「一般語」に無いため、俗語の多い辞書を選択している
「文字をローマ字にする」という処理も、よく使うので複合コマンドがある。文字をローマ字にすれば、母音の個数判定は楽そうだ。
ここで、「かな→ローマ字」の変換では「ヘボン式」「訓令式」「ヘボン風タイピング」「訓令風タイピング」の4種類のローマ字と、「母音の長音化」というオプションが選択可能だ。(「ヘボン式」「訓令式」が分からない人は、暇な時にググってほしい)
「~風タイピング」とは、母音に関する検索において扱いやすいように、EnigmaStudioが独自に定義したローマ字変換ルールだ。
既存のルールでは「ふぁ」は「fua」や「hua」と変換するのが正式ルールなのだが、母音2個扱いになると困る。むしろ、ローマ字のタイピング時に入力する「fa」に変換した方が都合が良い。そういう発想のもとで定義したローマ字変換ルールが「~風タイピング」だ。詳細が知りたければわんど氏の記事「ピーコロンちゃんbotとローマ字再定義」参照。
今は一旦「母音の個数や韻を扱う場合等には『~風タイピング』を使えば良い」と覚えれば良い。
「母音の長音化」は「伸ばし棒を直前の文字と母音にする」機能だ。
これを指定すると例えば「クソゲーオブジイヤー」は「kusogeeobujiiyaa」になり、a/e/i/o/uの母音が2度ずつ登場する単語の条件を満たすようになる。
これの指定は好みで決めれば良い。
さて、元の検索の解説に戻ろう。
・「かな→ローマ字」コマンドで訓令風タイピングを指定し、母音/韻を意識したローマ字に変換し、
・「正規表現置換」で「[^aeiou]」を「」に置換することによって、「母音以外を空文字列に置換」する
という2コマンドで、母音だけの状態が作れる。
ただ、この時点ではまだ順番はぐちゃぐちゃで比較がしにくい。
方法は2つある。
1つ目は「文字列ソート」コマンドを用いる方法だ。
このコマンドは、平仮名なら50音順に、アルファベットならABC順に並べ替えてくれる。「くしかつ」は「かくしつ」になり、「shot」は「host」になる。
もしa/e/i/o/uが2度ずつ現れるならば、ソートすると必ず「aaeeiioouu」になるはずで、その後「正規表現フィルタ」で「^aaeeiioouu$」に一致するか確認すれば良い。
2つ目は、「わざわざソートしなくてもaaeeiioouuにアナグラムで一致すれば良い」という発想をうまく活用し、「正規表現マッチ比較」を用いる方法だ。
「正規表現マッチ比較」で「^(.*)$」にマッチさせることで「文字列全体」をキャプチャし、「$1」と「aaeeiioouu」が「アナグラム一致」することを判定すれば良いのだ。
⑫単語を五十音順で1つ進めても単語になり、さらに1つ進めても単語になるような単語
→検索デモ画面 (「豚辞書」を選択して検索)
重要機能である「単語移動検索」コマンドを紹介する。
特定の文字列に従って「n文字進めつつ」「それが単語であるかチェックする」機能だ。フィルタと変換の両方の機能を持つ。
「特定の文字列」が「あいうえお……わをん」だった場合、これは「50音順に進める」という機能になる。
例えば「5進める」場合なら「ほうきよう」は「もくしろく」になるだろう。
これを使えば「50音順に進める変換」が容易く可能になる。
・「単語移動検索」コマンドで50音順に1つ進めて
・「単語移動検索」コマンドで50音順にさらに1つ進めて
ことで期待の検索を行うことができる。便利だ。
「特定の文字列上で進める」というのは、50音順に進める、ABC順に進める、という使い方以外に、例えば「盤面があって1つ下のマス目の文字に変換する」みたいな使い方もある。
書き出したらきりが無いのでここらにしておくが、活用法が無限にある複合コマンドだ。
「単語移動検索」では、「文字列」や辞書マッチ関連の指定項目以外に、
・移動量
・「ループを許容」オプション
の指定が可能だ。
「移動量」について。
・1を指定すれば1つずらし、3を指定すれば3ずらす。
・-1を指定すれば逆方向に1つずらす。
・1~3を指定(~はチルダという記号)すれば、「1つ~3つのずらし方の全パターン」を試す。(大きすぎる数字を指定するとすごく時間がかかるので注意)
・1&3&5を指定すれば、「1つ」「3つ」「5つ」のずらし方の全パターンを試す。
・-3~1&1~3を指定すれば「1つ~3つのずらし方」「1つ~3つの逆方向のずらし方」の全パターンを試す。(0ずらしは変化無しなのでそれを除けるのは嬉しい)
「ループを許容」オプションについて。
文字列に「あいうえお……わをん」と指定した場合に、「ループを許容]が有効ならば「ん→あ」のずらしも許容する。「ループを許容」が無効ならば「ん→あ」のずらしを行うケースは除外される。
また、「リスト・文字列」の項目についても補足しておく。
ここには、好きな文字列を手入力することも可能だし、以下のように候補から選択することも可能である。
ここに出てくる文字列の候補たちは、「リスト」として定義されているものたちとなっている。
画面上部にある4つのボタンの内、左端のボタンを押してみよう。
ここにリストが定義されていて、これらが選択可能候補として出てくる。
リストは自分で定義できるので、自分だけの最強のリストを登録しておくと非常に便利だ。
ここで、「あいう……わをん」という文字列に対してs:seiというリスト名が対応すると書かれている。コロンはただの区切りであり、sもseiもどちらも「あいう……わをん」というリストの名前であることを示している。
同様に、「abc……xyz」という文字列に対してa:abcというリスト名が対応すると書かれている。aもabcもどちらもこのリストの名前である。
このリスト名という概念が何のためにあるのかは、次の⑬で説明する。
⑬英単語で、「ABC順でn文字目」の文字を「50音順でn文字目」の文字に対応させて変換しても単語になるような単語
→検索デモ画面 (「CEFR-J WordList」を選択して検索)
「解き直しアンサーキー検索」という複合コマンドがある。
「変換前リスト・文字列」「変換後リスト・文字列」のそれぞれに文字列を指定した時、
・すべての文字が変換前リストに含まれる
・変換前リストと変換後リストで、同じ位置にある文字に置き換えた時、置換後の文字列が辞書に存在する
の2つの条件を満たす文字列のみを残すようになっている。
説明より具体例の方が分かりやすい。
変換前「abcdefghijklmnopqrstuvwxyz」
変換後「あいうえおかきくけこさしすせそたちつてとなにぬねの」
とした場合を考えると、
actという単語は、
・actはすべて変換前リストに含まれる文字であり
・「a→あ」「c→う」「t→と」の置換をしても辞書に存在する単語になる
ので、フィルタ結果として残る。
「1/26 3/26 20/26」という謎があったら答えは「act」だが、これを「1/46 3/46 20/46」に変えれば「あうと」が答えになるわけだ。
他の例で、
変換前「ときなおしあんさーきー」
変換後「ーきーさんあしおなきと」
で検索すると、
「あんさー」に対応する位置に「あしおと」があることが分かる。
→検索デモ画面 (「豚辞書」を選択して検索)
「『ときなおしあんさーきー』の6,7,8,12文字目を読め」という指示は、左から数えれば「あんさー」になるし右から数えれば「あしおと」になるということが分かる。便利だ。
この機能は解き直し系の謎を作る時に非常に強力なコマンドだ。
例えば「2通りの埋め方ができるスケルトンができた」状態で、とりあえず2つの盤面の対応関係を元に変換前後の文字列を埋めれば、「解き直し前後がどちらも単語になるような文字の拾い方」が見つかる。
ちなみに、2つ補足事項を。
補足1つ目。リストについてだ。
「変換前リスト・文字列」「変換後リスト・文字列」には、文字列だけじゃなくてリスト名を指定できる。
先ほど、「あいう……わをん」はsまたはseiというリスト名であり、
「abc……xyz」はaまたはabcというリスト名であると説明した。
ここで、
変換前「abc」
変換後「sei」
と書くだけで、さっきとまったく同じ変換の検索ができるのだ。
→検索デモ画面 (「CEFR-J WordList」を選択して検索)
abcと指定することでそれに対応するリスト「abc……xyz」が呼び出され、seiと指定することでそれに対応するリスト「あいう……わをん」が呼び出されているからだ。
別にabcはaで指定しても良いし、seiはsで指定しても良い。
結果は同じだ。
→検索デモ画面 (「CEFR-J WordList」を選択して検索)
「解き直しアンサーキー検索」以外でもリストは非常に便利な機能だ。
「単語移動検索」でもリスト名で指定が可能だったりする。ただ、これは候補から選択する方が早いので覚えなくて良い。
ただし、part2記事で覚える複雑な入力でリスト指定があると非常に楽な場面があり、今後詳しく述べることにする。
補足2つ目。
「変換前文字列」には、同じ文字が登場しても良い。例えば
変換前「ときなおしあんさーきー」
変換後「ーきーさんあしおなきと」
の時、「き」「ー」が2つ登場している。「き」についてはどちらも「き→き」になるので問題ないが、「ー」は「ー→な」「ー→と」の2通りの変換が考えられる。
この場合、解き直しアンサーキー検索では起こりうる変換パターンを全部試してくれるのだ。便利。
積極的に活用すべき機能だろう。
ただ、パターンが多すぎると時間がかかる時もあるので、それは注意。
変身をあと2回も汎用検索は残している――
ここまでで汎用検索の便利さは十分伝わっただろうか。
記事の長さの都合でここで一旦区切りとするが、汎用検索の便利さは正直まだまだ十分に紹介しきれていない。
そもそもまだ紹介しきれていない機能をちゃんと活用すると、
もっと複雑で便利な様々な便利な検索ができる。
別途part2記事として紹介をしたいと思う。いずれ書く。お待ちを。
繰り返しになるが、汎用検索をさっそく使いたくて操作方法が知りたい人は、「最先端の検索ツール「汎用検索」を使ってみよう(操作説明編)」を読むと書いてある。なるべく分かりやすく書いたので、実際に操作を試してほしい。
汎用検索を活用して、たくさんの人が面白い謎をたくさん作るようになってくれると嬉しい。
それでは、最高の謎制作ライフを!


コメント