ノードにラベルが付けられている(ただし一意ではない)ツリーのコレクションがあります。具体的には、ツリーは解析された文のコレクションからのものです(http://en.wikipedia.org/wiki/Treebankを参照)。コレクションから最も一般的なサブツリーを抽出したいと思います。パフォーマンスは(まだ)問題ではありません。ツリーバンク用にこれを行うアルゴリズム(理想的にはJava)またはツールへのポインターに感謝します。子ノードの順序が重要であることに注意してください。
@mjvを編集します。私たちは定型化された言語を持つ限られた領域(化学)で作業しているので、木の多様性はそれほど大きくありません-おそらく子供の読者に似ています。「猫がマットの上に座った」のシンプルな木。
<sentence>
<nounPhrase>
<article/>
<noun/>
</nounPhrase>
<verbPhrase>
<verb/>
<prepositionPhrase>
<preposition/>
<nounPhrase>
<article/>
<noun/>
</nounPhrase>
</prepositionPhrase>
</verbPhrase>
</sentence>
ここで、文には2つの同一の品詞サブツリーが含まれています(実際のトークン「cat」。「mat」はマッチングでは重要ではありません)。したがって、アルゴリズムはこれを検出する必要があります。すべてのnounPhraseが同一であるとは限らないことに注意してください-「大きな黒い猫」は次のようになります。
<nounPhrase>
<article/>
<adjective/>
<adjective/>
<noun/>
</nounPhrase>
文の長さは長くなります-15から30ノードの間。1000本の木から有益な結果が得られると期待しています。これに1日以上かからない場合は、許容範囲です。
明らかに、ツリーが短いほど頻繁になるため、nounPhraseが非常に一般的になります。
編集これがツリーを平坦化することによって解決される場合、私はそれが最長共通部分列ではなく最長共通部分文字列に関連していると思います。ただし、必ずしも最長のものが必要なわけではないことに注意してください。「興味深い」(基準はまだ決定されていません)のに十分な長さのリストが必要です。