トークを種別に分類する

世界樹一雫では、各フリートークを分類しようと思っています。
たとえば、特定の作品に関する話題であれば、それに「その作品名」という属性を付与する
ような形で、種類わけをしようというわけです。
 
そうすることで、将来的に入力ボックスとか、リストから作品を指定して、
それに関する話題を喋るような仕組みを作りたいと考えています。
 
この辺の実現となると、華和梨が良いらしいのですが、
里々でトークに属性をつけて分類をしようと思ったら、ちょっと色々めんどくさいです。
なぜなら、里々には「単語群」というものがあるのですが「トーク群」というようなものは無いからです。
 
トークに「トーク名」をつけて分類することは可能です。
ですが、各トークすべてに「トーク名」をつけてしまうと、ランダムトーク
すなわち「*OnTalk」の呼び出し先である「*(空白)」がなくなってしまうので、
そこを工夫しないといけなくなります。
 
例えば、トークを「雑談」「マンガ」「ゲーム」という三種類に分類した上で、
それをランダムトークで喋らせるようにしようと思ったら、

*OnTalk
>(トークの種類)
 
トークの種類
雑談
マンガ
ゲーム
 
*雑談
:明日は晴れかな?
 
*雑談
:ねむーい
 
*マンガ
:今週のジャンプはアレだったね…。
 
*ゲーム
:新作のFFはどうなるかなー。

と書くことで、3つの種類をランダムに選んで、どれかの話題を喋ってくれます。
 
ただ、これには問題があって、上の例だとトークは全部で4個あるのですが、
最初に、トークの種類を3種類から選んで、その上で選ばれた種類のトークの中から
ランダムに1トークを選択するという処理になるので、上記の例の場合
それぞれの選択率は1/4にならず、「1/6、1/6、1/3、1/3」という割合になってしまうのです。
 
晶や美夜の頃からこの仕組みを考えていましたが、実装していなかったのはこれが理由でした。
各種類に含まれるトークの数を管理して、選択率分布が均一になるような
仕組みを搭載してやらないといけなくて、実現は可能だけど面倒くさそうだったからです。
 
しかし、最近の里々では

(合成単語群、A、B、C)

という記法があるらしいのです。
これをうまく使えば、各種の種類のトークに含まれるトークの数を考慮して、
均等にチョイスをしてくれるようにできる気がするわけです。
 
ただ、この記法で「A」「B」などに指定できるのは「@」を使った単語群だけらしいので、
そのままだと、「トーク」を呼び出すことはできないので、ちょっとだけ工夫する必要があります。

*OnTalk
>(合成単語群、雑談、マンガ、ゲーム)
 
@雑談
雑談A
雑談B
 
@マンガ
マンガA
 
@ゲーム
ゲームA
 
*雑談A
:明日は晴れかな?
 
*雑談B
:ねむーい
 
*マンガA
:今週のジャンプはアレだったね…。
 
*ゲームA
:新作のFFはどうなるかなー。

という風に、(合成単語群、〜〜)で呼び出される単語群に、
トーク名を羅列すれば、トーク名である程度トークの種類を分類をしながら、
均等にトークの種類を選ぶことができます。
 
けど、これだけではまだダメなのです。
この例では、もし「『天気』に関する雑談」や「『体調』に関する雑談」というように、
さらにトークの種別ごとに分類して管理しようとすると、うまくありません。

たとえば、「@雑談」という単語群で管理されるトークの種別の中に、
さらに「天気」「体調」という種類をさらにつくり分類して管理したいとします。
このとき、「*天気」のトークは、複数用意されることになるわけで、
次のように書くイメージになるわけですが……

*OnTalk
>(合成単語群、雑談、マンガ、ゲーム)
 
@雑談
天気
体調
 
@マンガ
マンガA
 
@ゲーム
ゲームA
 
*天気
:明日は晴れかな?

*天気
:下駄占いとか懐かしい…。
 
*体調
:ねむーい
 
*マンガA
:今週のジャンプはアレだったね…。
 
*ゲームA
:新作のFFはどうなるかなー。

こうした場合、ランダムトークが発生したときには「天気」「体調」「マンガ」「ゲーム」の
4種類のトークを、それぞれ25%の確率で選ぶという動作になるのです。
実際のトーク数が5個あるにも関わらず、です。
つまり、「(合成単語群、〜〜」は、そのままでは単語群の入れ子構造には対応できないということです。
 
じゃあ、どうすればいいのかというと……上手い方法が思いつきません。
妥協するのが良いような気がします。
逆に見れば、特定のマンガに関するトークを大量に書いたとしても、
色んな作品に関するトークを均等にするようになるわけですからね。
 
さてはて。どうしよう。