Чтение в основном структуры данных для сжатия и поиска исходного кода

0

Предположим, у вас есть много исходного кода (например, 50GB+) на популярных языках (Java, C, C++ и т.д.).

Потребности проекта:

  • сжатие исходного кода для уменьшения использования диска и ввода/вывода на диске

  • индексируя его таким образом, что конкретный исходный файл может быть извлечен из сжатого источника без декомпрессии всего этого

  • время сжатия для всей базы кода не важно

  • время поиска и поиска (и использование памяти при поиске и извлечении) важны

Этот ответ SO содержит потенциальные ответы: каковы менее известные, но полезные структуры данных?

Тем не менее, это всего лишь список потенциальных возможностей - я не знаю, как эти структуры фактически сравниваются с перечисленными выше требованиями.

Вопрос: каковы структуры данных (и их реализации), которые бы хорошо работали в соответствии с вышеупомянутыми требованиями?

  • 0
    Сдается мне, что подойдет любой старый архив ZIP.
  • 0
    @JoachimPileborg Могу ли я искать в содержимом сжатого LZ текста, скажем, строки, не распаковывая весь ZIP?
Показать ещё 2 комментария
Теги:
data-structures
indexing
compression
information-retrieval

1 ответ

1

Основной структурой данных, используемой для поиска, является инвертированный список. К счастью, вам не нужно реализовывать его самостоятельно. Lucene - широко используемый инструмент поиска, который работает с перевернутыми списками внутри.

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

Я применил утилиту поиска исходного кода, которую я сейчас кратко опишу в следующих параграфах. Весь исходный код хранится как неиндексируемое поле с именем "code" (вы можете изменить источник для хранения сжатой версии).

Для части поиска обратите внимание, что ключевые слова, которые вы собираетесь использовать для поиска, могут быть именами функций, классов, пакетов или переменных. Они также могут быть словами из комментариев и так далее. В моей реализации я извлек эту информацию из использования дерева аннотированных Java синтаксиса (AST). Вы можете сделать то же самое и для других языков, используя соответствующий синтаксический анализатор для построения АСТ.

Другая возможность - это примерная модель (QBE), где вы можете использовать небольшой фрагмент кода для поиска примерно похожих фрагментов из вашей индексированной базы кода. Это особенно полезно для обнаружения повторного использования исходного кода и плагиата, основной целью которого я разработал инструмент.

Страница проекта находится здесь. Я называю это YASOCS (еще один SOURCE Searcher).

Поиск выполняется очень быстро, так как он использует перевернутый список. Вы также можете использовать Luke (визуализатор индекса Lucene с открытым исходным кодом), чтобы "видеть" индекс самостоятельно и выполнять тестовые запросы с помощью интерфейса.

  • 0
    Спасибо, я смотрю на это сейчас, но у вас нет лицензии там - что делает вас потенциально ответственным, потому что нет даже отказа от ответственности. ;-)
  • 0
    У меня не было возможности заключить лицензионное соглашение :) Программное обеспечение предназначено для бесплатного использования ...

Ещё вопросы

Сообщество Overcoder
Наверх
Меню