Repolode
ashvardanian

ashvardanian/StringZilla

Библиотека строк для C, C++, Python, Rust, JavaScript, Go и других языков, ускоряющая поиск, хеширование, сортировку и вычисление редакционного расстояния с помощью SIMD и SWAR.

Звёзды
3,574
Форки
145
Открытые issues
33
Последний коммит
11 часов назад

Что это?

StringZilla — библиотека для обработки текста, использующая инструкции SIMD и SWAR процессора для ускорения распространённых операций со строками: поиска подстрок и символов из заданного набора, хеширования, сортировки, вычисления расстояния Левенштейна и оценок выравнивания, а также Unicode-преобразования регистра и сегментации. Она задумана как дополнение, которое можно использовать вместо стандартных API: например, у Python str.find, C strstr и C++ std::string::find есть прямые аналоги в StringZilla.

Ядро библиотеки — C-библиотека в одном заголовочном файле с обёрткой для C++, а биндинги доступны для Python, Rust, JavaScript, Swift, Go, C# и Java. Второй слой, StringZillas, добавляет параллельные бэкенды для CPU и CUDA GPU, предназначенные для пакетного вычисления редакционных расстояний, оценок выравнивания и скользящих отпечатков. В проект также входят хеш-функция на основе инструкций AES и реализации SHA-256, использующие аппаратные расширения SHA, если они доступны.

Библиотека рассчитана на x86, Arm, RISC-V, PowerPC и WebAssembly и стремится быть переносимой между системами с разным порядком байтов, разрядностью и операционными системами. Зрелость функций зависит от биндинга; некоторые функции Unicode в проекте всё ещё находятся в активной разработке.

Ключевые возможности

  • 01Поиск подстрок и символов из заданного набора, ускоренный инструкциями SIMD и SWAR.
  • 02Хеширование с помощью 64-битной функции на основе AES и аппаратно ускоренного SHA-256.
  • 03Сортировка строковых коллекций и пересечение множеств.
  • 04Расстояния Левенштейна и Нидлмана — Вунша с пакетным выполнением на GPU через CUDA.
  • 05Преобразование регистра Unicode, обработка UTF-8 и сегментация по TR29.
  • 06Биндинги для C, C++, Python, Rust, JavaScript, Swift, Go, C# и Java.

Сценарии использования

  • Ускорение конвейеров обработки данных с большим объёмом текста, например при разборе крупных корпусов.
  • Замена медленных вызовов поиска подстроки или хеширования в сервисах, чувствительных к производительности.
  • Пакетное вычисление редакционных расстояний или оценок выравнивания для задач биоинформатики или поиска.
  • Ускорение операций типа LIKE, ORDER BY и GROUP BY внутри движка базы данных.

Быстрый старт

  1. 1

    Установите пакет Python

    pip install stringzilla
  2. 2

    Используйте его в Python вместо str

Что важно знать

  • Не все функции доступны во всех языковых биндингах.
  • Некоторые функции Unicode (нормализация, сегментация и обнаружение разрывов строк) всё ещё отмечены как находящиеся в разработке.

Темы

Частые вопросы

Что такое StringZilla?
Библиотека строк для C, C++, Python, Rust, JavaScript, Go и других языков, ускоряющая поиск, хеширование, сортировку и вычисление редакционного расстояния с помощью SIMD и SWAR. StringZilla — библиотека для обработки текста, использующая инструкции SIMD и SWAR процессора для ускорения распространённых операций со строками: поиска подстрок и символов из заданного набора, хеширования, сортировки, вычисления расстояния Левенштейна и оценок выравнивания, а также Unicode-преобразования регистра и сегментации. Она задумана как дополнение, которое можно использовать вместо стандартных API: например, у Python str.find, C strstr и C++ std::string::find есть прямые аналоги в StringZilla.
StringZilla можно использовать бесплатно? Какая у него лицензия?
StringZilla распространяется с открытым исходным кодом под лицензией Apache-2.0. Перед использованием в коммерческих продуктах проверьте условия лицензии.
StringZilla всё ещё поддерживается?
Активно поддерживается. Последний коммит в StringZilla — 22 окт. 2026 г..
Для чего можно использовать StringZilla?
Ускорение конвейеров обработки данных с большим объёмом текста, например при разборе крупных корпусов. Замена медленных вызовов поиска подстроки или хеширования в сервисах, чувствительных к производительности. Пакетное вычисление редакционных расстояний или оценок выравнивания для задач биоинформатики или поиска. Ускорение операций типа LIKE, ORDER BY и GROUP BY внутри движка базы данных.
Как установить StringZilla?
Установите пакет Python: pip install stringzilla Используйте его в Python вместо str
Где скачать StringZilla?
Исходный код и инструкции по установке — на GitHub: https://github.com/ashvardanian/StringZilla

Описание создано ИИ на основе README проекта. Статистика GitHub обновляется ежедневно.

Похожие проекты

Открытый фреймворк для компиляции моделей машинного обучения: он позволяет настраивать конвейеры компилятора на Python и развёртывать модели на разных аппаратных платформах.

13,9 тыс.4 тыс.PythonApache-2.0Обновлён позавчера