Duplicate Finder
На других языках: EnglishEspañolFrançaisDeutsch日本語한국어Português中文
Duplicate finder — это приложение с открытым исходным кодом для поиска похожих фрагментов текста в одном или нескольких файлах. Его можно использовать для обнаружения 100% дубликатов, а также контента, который схож, но не идентичен. Инструмент совместим с разными форматами, включая plaintext, Markdown и XML.
Он может помочь вам с:
- Обнаружением плагиата
- Управлением контентом
- SEO-оптимизацией
- Дедупликацей данных
Пример дублированного контента
Вот краткий пример того, что инструмент помогает обнаружить:
Как использовать
- Скачайте приложение или соберите его из исходников.
Выполните
./gradlew fatJarс JDK 21 в папке с исходниками. JAR будет вbuild/libs/duplicate-finder.jar. - Убедитесь, что на вашем компьютере установлена Java 21 или выше
- В терминале откройте папку с загруженным .jar файлом
-
Выполните
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
Приведенная выше команда будет:
-
-r=/Users/me.user/my-site– искать похожий контент в '/Users/me.user/my-site' и вложенных папках -
-f=md,mdx– учитывать только файлы с расширениями '.md' и '.mdx' и анализировать их по правилам Markdown -
-s=0.85– сообщать только о совпадениях со степенью схожести 85% или выше -
-d=5– сообщать только о текстах, дублирующихся 5 или более раз -
-l=200– сообщать только о текстах длиной 200 символов или больше
Результаты
В зависимости от настроек программы и размера проекта, возможно, анализ займет какое-то время. После этого результаты откроются в окне просмотра дубликатов и сохранятся в папке, указанной через опцию '-o'. По умолчанию текстовые отчёты сохраняются в ./duplicate_finder_output в текущей директории. Используйте -ui=none, чтобы сохранить отчёты без открытия окна просмотра.
Вот что вы увидите в окне просмотра дубликатов:
- Панель инструментов: здесь вы можете настроить размера шрифта, сортировку и как показываются группы дубликатов – по одному эталонному фрагменту (2) на каждую группу дубликатов, либо все сразу. Через Fuzzy search можно ввести текст запроса и найти похожие фрагменты, задав порог сходства.
- Список эталонных фрагментов: здесь вы выбираете фрагмент, для которого будут показаны дубликаты, и который будет служить эталоном для сравнения.
- Список дубликатов: после того, как вы выбрали эталонный фрагмент (2), в этом списке будут показаны фрагменты, которые на него похожи. Чтобы посмотреть дубликат, выберите его из списка.
- Панель для просмотра эталонного фрагмента: после того, как вы выбрали эталонный фрагмент (2), его содержимое будет показано здесь. Схожие части показаны зелёным, а различающиеся - красным. Чем больше дубликатов (3) схожи в какой-то части, тем ближе к зеленому будет ее цвет.
- Панель для просмотра дубликата: после того, как вы выбрали дубликат (3), его содержимое будет показано здесь. Используйте эту панель для быстрого сравнения с выбранным эталонным фрагментом (4).
Узнать больше
Если вас заинтересовало то, как работает и разрабатывается находилка дубликатов, почитайте связанные блог посты:
- Duplicate Finder for Text
- Duplicate Finder for Text: Requirements
- Junie Codes (AsciiDoc Support)
- Duplicate Finder for Text: Algorithm
Вы можете связаться со мной, используя контакты внизу этой страницы. Буду рад услышать ваши мысли и идеи.
Лицензия
Код распространяется под лицензией MIT, что означает, что вы можете свободно использовать его для любых целей, а также форкать и дорабатывать его.