Свернуть список кортежей диапазона в перекрывающиеся диапазоны

Я ищу наиболее эффективный способ решения этой проблемы.

У меня есть список кортежей, представляющих частичные совпадения строк в предложении:

[(0, 2), (1, 2), (0, 4), (2,6), (23, 2), (22, 6), (26, 2), (26, 2), (26, 2)]

Первое значение каждого Кортеж — это начальная позиция для совпадения, второе значение — длина.

Идея состоит в том, чтобы свернуть список, чтобы сообщалось только о самом длинном совпадении продолжающейся строки.В этом случае это будет:

[(0,4), (2,6), (22,6)]

I do not нужен только самый длинный диапазон, как в алгоритме для поиска самых длинных непересекающихся последовательностей, но я хочу, чтобы все диапазоны схлопывались по самым длинным.

Если вам интересно, я использую чистую реализацию Python Aho-Corasick для сопоставления терминов в статическом словаре с заданным текстовым фрагментом.

РЕДАКТИРОВАТЬ: Из-за природы этих списков кортежей перекрывающиеся, но не автономные диапазоны должны быть распечатаны индивидуально.Например, havin g слова betazи zetaв словаре соответствуют betazeta[(0,5),(4,8)]. Поскольку эти диапазоны перекрываются, но ни один из них не содержится в другом, ответ должен быть [(0,5),(4,8)]. Я также изменил входной набор данных выше, чтобы охватить этот случай.

Спасибо!

5
задан Community 23 May 2017 в 10:28
поделиться