この問題を解決するための最もメモリ効率の良い方法を探しています。
文の部分的な文字列の一致を表すタプルのリストがあります。
[(0, 2), (1, 2), (0, 4), (2,6), (23, 2), (22, 6), (26, 2), (26, 2), (26, 2)]
各タプルの最初の値はマッチの開始位置で、2 番目の値は長さです。
アイデアは、リストを折りたたんで、最長の継続文字列の一致のみが報告されるようにすることです。この場合、次のようになります。
[(0,4), (2,6), (22,6)]
最長の重複しないシーケンスを見つけるアルゴリズムのように、最長の範囲だけは必要ありませんが、すべての範囲を最長のもので折りたたむ必要があります。
ご参考までに、私は Aho-Corasick の純粋な Python 実装を使用して、静的辞書内の用語を特定のテキスト スニペットに一致させています。
編集: これらのタプル リストの性質上、重複しているが自己完結型ではない範囲は個別に出力する必要があります。たとえば、betaz
andという単語zeta
が辞書にある場合、 の一致betazeta
は[(0,5),(4,8)]
です。これらの範囲は重複していますが、他の範囲には何も含まれていないため、答えは になります[(0,5),(4,8)]
。このケースがカバーされるように、上記の入力データセットも変更しました。
ありがとう!