🤖

エシュロンの解析情報がテキストストリームだったとして「今来栖」を見つける正規表現

2023/01/04に公開

どういうことだってばよ

攻殻機動隊 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