「abcabx」というテキストがあるとします。繰り返しパターン「ab」があること、それが現れるすべての場所、およびそれらの繰り返しのコンテキストが他の出現とどのように関連しているかを知りたいです。また、データ構造には、一意のパターン「c」と「x」を区別して分離する必要があります。そうしようとしてサフィックスツリーをセットアップしましたが、次のようになります( this SO answer から):
これは確かに、パターン「ab」が 2 回表示されていることを示しています。ただし、ルートの「ab」は、パターンの最初の出現のみを指します。また、そのリーフ「cabx」に別の「ab」が埋め込まれています。その「ab」(「cabx」内) を何らかの形でデータ構造の繰り返しとして認識させたい場合です。ルート「ab」の「x」リーフがそれを表していることは知っていますが、「ab」の「cabx」リーフに「ab」があることを知る必要があります。さらに、「c」と「x」という 2 つのユニークなパターンがそのエッジの一部です。さらに、そのエッジ内の位置、およびそれらの「主な定義」(ルート エッジ?) 間の相互参照。
もっと簡単に言えば、データ構造は、「ここにすべての固有のパターンがある」、「ここにすべての繰り返しパターンとそれらが発生するすべての場所がある」、「これらすべてに関連するコンテキストがある」ことを明確に示す必要があります。 .
だから私はグラフのような要素を接尾辞ツリーに探していると思います。これは、既知のパターンを分割し、それらを明示的に関連付けるものです。その過程で、ユニークなパターンが注目されます。しかし、「c」(「cabx」ではなく「c」)と「x」の両方が「ab」の後に来る、「abx」が「abc」の後に来るなど、接尾辞ツリーのコンテキスト機能が必要です。それらの後に来ました(より大きな場合)など。これを行うサフィックスツリーの適応、またはおそらく別のアルゴリズムはありますか?