私は、接尾辞配列を利用して最も長い共通部分文字列を見つけるアルゴリズムをhttp://portal.acm.org/citation.cfm?id=1813708に実装しています。アルゴリズムは、与えられた文字列と、センチネルと呼ばれる文字列セパレータとの連結である文字列のサフィックス配列を作成することを含む。例えば、文字列a、b、cが与えられた場合、新しい文字列dが作成されます。この文字列dは$ 1b、$ 2c $ 3です。$ 1、$ 2、$ 3は各文字列の終わりを示すセンチネル文字です。センチネル文字は、a、b、およびcの他のすべての文字よりも一意で、辞書編集的に小さくなければなりません。接尾辞配列を構築する前にPythonで文字列のセンチネルの終わりを指定する
私の質問は、Pythonでのセンチネル文字の表現を中心にしています。 a、b、cがASCII文字列の場合、私はこれらの文字列をUTF-8に変換し、その範囲を0-127から高い範囲にシフトする必要があると考えています。弦。それが合理的だと思われる場合、Pythonの文字をN-127 + Nのように再マッピングするための最も効率的なメカニズムは何ですか?ここでNは文字列の数です。
ありがとうございます。私は現在、あなたが提案するように整数を使うために私のユニコード版を再実装しています。 Unicodeは、私が克服する必要があるいくつかのスケール制限を導入しました。参照へのポインタを理解してください。これらのうちのいくつかはまだ見ていません。再度、感謝します。 – Chris
カップルの考え方:長いリピートがある場合は、文字列ソートではなくサフィックスソートアルゴリズムが必要です。しかし、文字列ソートを使用する場合は、スタックオーバーフローの直前にソートされていたテキストの部分をレポートするように変更します。自然言語のテキストの場合、長いリピートは引用符、切り取り貼り付け、剽窃などであり、統計の偏りを避けるために削除する必要があります。他の最も長いリピートを見つけるには、暗黙間隔ツリーをたどり、doc_freq> kで最大値を集めて優先順位キューに入れます。シンプルな考えですが、引用した論文がより良くなることは私には(まだ)分かりません。 –