Мне нужна структура данных, в которой хранится множество частей данных с низкой энтропией, которые часто схожи друг с другом. Я хочу сохранить их эффективно (сжатыми как-то) и получить по индексу или совпадению. Быстрый поиск более важен, чем сжатие, но это не возможность хранить их несжатыми.
Лучший пример, который я могу придумать, - это хранить миллиард письменных предложений, взятых из томов текстов (в сжатой форме на диске).
dict:
1: 'The quick brown fox jumps over the lazy dog.'
2: 'The quick green frog jumps over the lazy fox.'
3: 'The quick brown fox jumps over the lazy frog.'
Если два предложения одинаковы, они должны иметь один и тот же индекс.
Я хочу получить их по индексу или подстановочному совпадению (регулярное выражение тоже хорошо, но не обязательно). то есть:
dict.get(1) => 'The quick brown fox jumps over the lazy dog.'
dict.match('The quick brown *') => [1, 3]
Я мог бы сжать каждое предложение, но это пренебрегает тем фактом, что многие записи похожи.
Я мог бы сортировать их и хранить diff. но это очень сложно добавить и удалить элементы.
Он должен поддерживать unicode.
Я уверен, что есть какая-то древовидная структура, которая делает это.
Бонусные баллы, если у них есть оболочка python.
Этот https://hkn.eecs.berkeley.edu/~dyoo/python/suffix_trees/ выглядит очень близко, но не видел действия с 2002 года /py 2.2, и я не мог заставить его работать. Если есть новые или лучшие альтернативы для проверки, я хотел бы услышать о них.
Я включаю тег биоинформатики, потому что понимаю, что там используются суффиксы и аналогичные структуры данных.