Duplicate Finder

На других языках: EnglishEspañolFrançaisDeutsch日本語한국어Português中文

Duplicate finder — это приложение с открытым исходным кодом для поиска похожих фрагментов текста в одном или нескольких файлах. Его можно использовать для обнаружения 100% дубликатов, а также контента, который схож, но не идентичен. Инструмент совместим с разными форматами, включая plaintext, Markdown и XML.

Он может помочь вам с:

Пример дублированного контента

Вот краткий пример того, что инструмент помогает обнаружить:

Chunk 1:
Open the Google Play Store on your Android device, search for "AwesomeApp", then tap "Install" to download and install the app.
Chunk 2:
Open the App Store on your iOS device, search for "AwesomeApp", then tap "Get" to download and install the app.

Как использовать

  1. Скачайте приложение или соберите его из исходников. Выполните ./gradlew fatJar с JDK 21 в папке с исходниками. JAR будет в build/libs/duplicate-finder.jar .
  2. Убедитесь, что на вашем компьютере установлена Java 21 или выше
  3. В терминале откройте папку с загруженным .jar файлом
  4. Выполните java -jar duplicate-finder.jar со следующими параметрами:

    Параметр Описание Пример
    -r / --root Относительный или абсолютный путь к папке, в которой вы хотите искать дублирующийся контент. По умолчанию: текущая директория. -r=./my-project/
    -o / --output Относительный или абсолютный путь к папке, в которой вы хотите сохранить результаты анализа. По умолчанию: ./duplicate_finder_output относительно текущей директории. -o=./my-project/duplicates/
    -f / --fileMask

    Файлы: Расширения файлов для анализа через запятую, без точки в начале. Используйте * для всех расширений.

    Парсер: Каждый элемент — расширение или extension:parser. Парсер определяет, как разбить файл на фрагменты текста для сравнения. Если парсер не указан, он выбирается по расширению; для неизвестных расширений используется file.

    По умолчанию: Список расширений по умолчанию: .md, .mdx, .xml, .adoc, .asciidoc и .properties. Указание -f заменяет этот список.

    Имена парсеров (после двоеточия) и фрагменты текста, которые они выделяют:

    • md – элемент markdown
    • line – одна строка текста
    • xml – элемент XML
    • adoc – элемент AsciiDoc
    • file – содержимое всего файла
    • properties – значение свойства

    -f=md,mdx
    Анализировать только .md и .mdx, используя Markdown-парсер для обоих расширений.

    -f=topic:xml,txt:line
    Разбивать файлы .topic на XML-элементы, а .txt — на отдельные строки.

    -f="*:line"
    Анализировать все файлы, считая каждую строку отдельным фрагментом текста.

    -l / --minLength Минимальное количество символов во фрагменте текста для анализа. По умолчанию: 100 (фрагменты текста короче 100 символов не рассматриваются). -l=150
    -s / --minSimilarity Минимальная степень сходства между двумя фрагментами текста для того, чтобы они считались дубликатами. По умолчанию: 0.9 (90%). -s=0.85
    -d / --minDuplicates Минимальное количество дубликатов фрагмента текста для того, чтобы эта группа дубликатов попала в отчёт. По умолчанию: 1 (одного дубликата достаточно). -d=5
    -ui / --ui Использовать ли интерактивный интерфейс. Варианты:
    • none – без интерфейса, только запись в файлы
    • swing – старый интерфейс
    • compose – новый интерфейс, по умолчанию
    -ui=none
    -v / --verbose Выводить время индексации и анализа в консоль. По умолчанию выключено. Ошибки пропущенных файлов выводятся независимо от этой опции. -v
    -g / --gram (для тёртых калачей) длина ngram – влияет на скорость, использование памяти и точность анализа. Эффект будет разным в зависимости от контента. -g=10
    -w / --keepWhitespace Сохранять ли последовательные пробелы в анализируемом тексте. По умолчанию пробелы нормализуются – несколько последовательных пробелов рассматриваются и отображаются как один. -w
    -i / --inline

    Включать содержимое вложенных элементов в во внешний элемент. Например:

    <parent>Some content including <child>nested content</child></parent>

    С этой опцией внешний элемент будет содержать 'Some content including nested content', в то время как по умолчанию он интерпретируется как 'Some content including </>'.

    -i

Файл настроек

Настройки можно сохранить в duplicate-finder.properties в папке с контентом (-r или текущая директория). В качестве ключей используйте длинные имена опций без --. Например:

fileMask=topic:xml,md,mdx
minSimilarity=0.85
minLength=200
ui=none

Запустите без аргументов, чтобы загрузить файл из текущей директории, или укажите другую папку с контентом через -r. Для отсутствующих настроек используются значения по умолчанию. Опции -o, -ui и -v могут переопределить сохранённые настройки. Если передать -s, -l, -d, -f, -g, -w или -i, файл настроек полностью игнорируется.

Пример команды

Вот пример того, как может выглядеть команда:

java -jar duplicate-finder.jar -r=/Users/me.user/my-site -f=md,mdx -s=0.85 -d=5 -l=200

Приведенная выше команда будет:

Результаты

В зависимости от настроек программы и размера проекта, возможно, анализ займет какое-то время. После этого результаты откроются в окне просмотра дубликатов и сохранятся в папке, указанной через опцию '-o'. По умолчанию текстовые отчёты сохраняются в ./duplicate_finder_output в текущей директории. Используйте -ui=none, чтобы сохранить отчёты без открытия окна просмотра.

Вот что вы увидите в окне просмотра дубликатов:

Duplicate finder UI
  1. Панель инструментов: здесь вы можете настроить размера шрифта, сортировку и как показываются группы дубликатов – по одному эталонному фрагменту (2) на каждую группу дубликатов, либо все сразу. Через Fuzzy search можно ввести текст запроса и найти похожие фрагменты, задав порог сходства.
  2. Список эталонных фрагментов: здесь вы выбираете фрагмент, для которого будут показаны дубликаты, и который будет служить эталоном для сравнения.
  3. Список дубликатов: после того, как вы выбрали эталонный фрагмент (2), в этом списке будут показаны фрагменты, которые на него похожи. Чтобы посмотреть дубликат, выберите его из списка.
  4. Панель для просмотра эталонного фрагмента: после того, как вы выбрали эталонный фрагмент (2), его содержимое будет показано здесь. Схожие части показаны зелёным, а различающиеся - красным. Чем больше дубликатов (3) схожи в какой-то части, тем ближе к зеленому будет ее цвет.
  5. Панель для просмотра дубликата: после того, как вы выбрали дубликат (3), его содержимое будет показано здесь. Используйте эту панель для быстрого сравнения с выбранным эталонным фрагментом (4).

Узнать больше

Если вас заинтересовало то, как работает и разрабатывается находилка дубликатов, почитайте связанные блог посты:

Вы можете связаться со мной, используя контакты внизу этой страницы. Буду рад услышать ваши мысли и идеи.

Лицензия

Код распространяется под лицензией MIT, что означает, что вы можете свободно использовать его для любых целей, а также форкать и дорабатывать его.

all posts ->