エシュロンの解析情報がテキストストリームだったとして「今来栖」を見つける正規表現
どういうことだってばよ
攻殻機動隊 STAND ALONE COMPLEX (SAC)の第21話では、キーマンの一人「今来栖(イマクルス)」を、エシュロン(環衛星通信傍受網)を利用して、所在特定に成功しています。
検索に引っかかった際にはボーマが「さすが、ビッグ・ブラザー」と言っていますが、イシカワは「まだわからん、声紋検索に "イマクルス" って単語が引っかかっただけだ」とも話しています。
どうやってひっかけたのでしょうか?
エシュロンからの解析情報がテキストのストリームならば、grepが使えます。そこで正規表現で "イマクルス" をひっかけてみようという試みです。
想定される言葉
劇中では、今来栖本人が電話で仲間に助けを求めています。その際のセリフが以下の通りです。
私だ、今来栖だ。助けてくれ。
あんたから新美の誤解を解いてくれ。
ああ、例のゴルフ場だ。頼んだぞ。
この結果がわかっていれば検索も容易ですが、まあ難しい話です。なので、会話やメッセージでやり取りされる "可能性" を基に検索文字列を設定することになります。
単語の候補、誤変換対策
まず 今来栖
という単語自体は候補ですね。しかし、エシュロンは英語圏で運用されているため、この漢字にならないかもしれません。実際、Windowsで変換してみると「今久留主」という変換になります。誤変換を想定して 今久留主
、そしてカタカナ/ひらがなも想定して イマクルス
と いまくるす
、そしてローマ字アルファベットの imakurusu
も候補にしましょう。
これまでの候補は以下の通りです。
- 今来栖
- 今久留主
- イマクルス
- いまくるす
- imakurusu
誤認識も候補に
"イマクルス" を人名だと認識しない場合も考えましょう。例えば「今、来栖(にいます)」という可能性です。また "今" は認識できても "クルス" が認識できない可能性もあります。最後に「今、来るっす」という若者言葉(?)として認識される可能性もゼロでは無いでしょう。
そうなると、以下5つも候補となります。
- 今、来栖
- 今クルス
- 今くるす
- 今、来ッス
- 今、来っす
正規表現はこれだ
結論、この正規表現になりました。PCREやBRE
(今|イマ|いま|今、)(来栖|久留主|クルス|くるす)|(今、来(ッス|っす)|(imakurusu))
正規表現をオンラインで動的にテストできる regex101 では、このように表示されており、テスト文字列すべてがマッチしている事がわかります。
grep ではどうするのか?
grepではメタ文字((
とか |
)はエスケープが必要ですので、コマンドラインはこうなるでしょう。
grep '\(今\|イマ\|いま\|今、\)\(来栖\|久留主\|クルス\|くるす\)\|\(今、来\(ッス\|っす\)\|\(imakurusu\)\)'
ばっちりですね!
ちなみに GNU grep は PCRE をサポートしているので、高度な検索もできますし、また、メタ文字のエスケープも不要になります。オプションは -P
です。
grep -P '(今|イマ|いま|今、)(来栖|久留主|クルス|くるす)|(今、来(ッス|っす)|(imakurusu))'
まとめ
年末年始で攻殻機動隊を見ていたときに、ふと思った話でした。
regex101 が超絶便利って事が言いたかっただけのブログ。
EoT
Discussion