ぶたさんおひとりの手による名詞辞書。2文字から8文字の名詞がひたすら並ぶだけであるが、20万語オーバというサイズから、眺めているだけでも面白い。
もともとはナンクロというパズルのソルバーやメイカーを作成するための一助として作成された。そのため、表記上促音や拗音の区別はない。クロスワードの作成/回答など、他のワード系パズルにも利用されている。
それだけではなく、単純に名詞の分析をするだけでも十二分に面白い。このテキストではそちらの方向性を探る。
一番シンプルなのはgrepで検索したもの。1、3字目指定のば○ら○○(正規表現ならぱ.ら..)のようなもの。これはその場で検索すれば済む話。こういう限定的に利用するサブセットではなくて、もっと汎用的に利用できるサブセット。ある条件を満たす単語(しかも、抽出に手間がかかる)もの。そういうものができれば、保存しておく価値があるだろう。公開するのもとても良いアイディアだ。翻訳的表現。
サンプルとしてこんなものを作った。開始文字と終了文字が同じ「しりとり逆襲ワード辞書」。
ほかにもこんなバリエーションが考えられる。
※このあたりのアイディアは全部ニコリ/ニコリストから拝借。
そういうことを考えていて、では上記の抽出が可能な言語使用はつくれないだろうか、と妄想。正規表現の表記方法を決めるようなノリですね。ああ、自分で実装する意思はありません。プログラムは弱いのです。
基本的にサブセットを得るための言語。それをさらにgrepでしぼればできる検索はここでは考えない。思いつくままに。
{あ2}……「あ」が2回登場する {あ2+}……「あ」が3回登場する {.2}……なにか一つの文字が2回登場する {あ2.3}……「あ」が2回、その他のなにか一つの文字が3回登場する 表現できるべきこと ある文字が何回か登場 任意の文字が何回か登場 ある文字が連続して登場 任意の文字が連続して登場 ある文字が何回か登場、うち何回かは連続して登場 y..xx.yを満たす言葉(x,yはそれぞれ同じ文字、.はx,yには一致しない ア段の文字集合、ア行の文字集合
いまいち美しくない。
ぐっとシンプルにして、補助辞書を考える。単語に対して、重複する文字の数を対応させた数値表だけでも充分面白そう。2なら同じ文字が2回登場、32ならひとつの同じ文字が3回、もう一つの同じ文字が2回あらわれる。数字は登場順か、降順かな。こんな感じ。
かたたたき:3 いいんかいかいさいつうち:52 しようしよう:222 この数字に名称があっても良いかな。
これはコードを書いて作成してもよいかと思ったのだけれど、いいアルゴリズムが浮かばず保留。簡単な関数で書けそうなんだけれどなあ。地道に頭からひと文字ずつチェックしていくしかないのかなあ。
---以下覚え書き--- いい加減なアルゴリズム 関数1:重複数出力 単語→数列 数列意味は例から理解すること。 例: ばららいか→12011 からんころん→122100 かたたき→13001 中身: 1が文字数だけ並んだ数列(関数2からもスコープあり)を用意。 FORループでこの数列順に関数2を実行していく。 :check[8] as int :check[8]=1 function 重複数出力 (word as string) for i=0 to length(word)-1 if (check[i]=1) { compare(i,word);} next end function 関数2: 単語内の文字をひとつずつくらべて、一致していたら 出力を適宜いじる。 function compare for j=i to length(word)-1 if (word[i]=word[j]) { check[i]++; check[j]=0;} end if next end function 見てのとおり私はコードは書けません。 テキストかサンプル見ないと何も書けない。 ま、こんな感じでn文字を渡すとn桁の数字が返ってくるので、 あとはソートするなり1を除外して出力するなりすればよい。戻る By けすてぃおん(wakaba@a1.mbn.or.jp)