Сравнение текстовых файлов

Сравнение текстовых файлов

Бывает так, что у вас есть два почти одинаковых текста, и вам нужно четко видеть, чем именно они отличаются. Распространенный пример: вы «сняли» с диктофона интервью и отправили требовательному собеседнику на вычитку. А тот, вместо того чтобы цветом выделить свои правки, просто вырезал некоторые фразы, дописал новые, поменял местами абзацы.

В результате вы читаете вроде бы свое же интервью, но не узнаете его «в гриме». Сличать вручную два больших текста сложно – можно ли облегчить эту задачу? Mediakritika.by подскажет, как.

Такие задачи достаточно часто встают перед программистами, поэтому программы для сравнения файлов умеют подсвечивать синтаксис при сравнении программных кодов различных языков программирования. Нам же нужно, чтобы такие программы позволяли сравнивать тексты в обычном формате .txt и желательно – в «вордовском».

Для сравнения мы взяли несколько абзацев нашей статьи про диктофоны и заменили некоторые слова, поменяли местами фразы. Сейчас будем сравнивать.

Microsoft Word

В программе Microsoft Office начиная с версии 2007 сравнить два файла можно, не выходя из «ворда». Идем в пункт меню Рецензирование – Сравнить – Сравнить… (сравнение двух версий документа). Указываем два файла, жмем кнопку «Больше» и отмечаем параметры, по которым нужно сравнить текст, а также выбираем, где просматривать изменения: в первом файле, во втором или в новом.

Удаленный текст программа выделяет красным зачеркнутым текстом, вставленный текст – красным подчеркнутым, перемещенные абзацы – зеленым. В отдельной панели слева (на скриншоте ниже ее нет) можно отследить изменения по каждому слову, а также увидеть резюме: в нашем случае 57 исправлений, из них 26 вставок, 29 удалений, 2 перемещения.

WinMerge – это бесплатная кроссплатформенная утилита для сравнения файлов, ее можно использовать на богатом «зоопарке» операционных систем, начиная с Windows 98. Последняя версия – WinMerge 2.14.0 – существует как в виде инсталлятора (6,14 Мб), так и в виде портативной сборки. Программа «из коробки» может сравнивать только обычные текстовые файлы, а если мы хотим работать также с офисными документами (тексты в форматах .doc, .docx, .odt, таблицы в форматах .xls, .xlsx, .sxc, PDF-файлы и другие офисные файлы экзотических форматов), надо скачать плагин Xdocdiff. Подключается плагин следующим образом:

1) Распаковываем архив с плагином

2) Файлы xdoc2txt.exe и zlib.dll копируем в папку с установленной программой WinMerge

3) Папку MergePlugins вместе с файлом amb_xdocdiffPlugin.dll копируем целиком в папку с установленной программой WinMerge

4) Запускаем WinMerge, идем в меню Дополнения – Список, ставим галочку «Включить дополнения»

5) Идем в меню Дополнения – ставим галочку «Распаковка автоматически»

Все, теперь можно открывать два наших файла: хочешь — обычные «тээкстэшные», хочешь – «вордовские».

Программа вас предупредит, что вы сможете также указывать заархивированные файлы, но для этого придется скачать плагин-архиватор. Впрочем, его отсутствие нам не страшно, отказываемся от будущих подобных уведомлений и получаем окно с нашими двумя текстами. В левой части окна – две длинные колонки: это миниатюры наших текстов. Желтым цветом выделены абзацы, в которых нашлись изменения. Поскольку в каждом из трех абзацев нашего исходного текста нашлись такие изменения, то обе колонки закрашены желтым. Конкретные измененные слова подсвечены светло-желтым.

Но у программы есть множество настроек, так что несложно подсветить слова каким-нибудь другим цветом.

Дальше можно переходить на каждое измененное слово или на следующий абзац с изменениями, копировать изменения из одного окна в другое и проводить другую редакторскую работу.

Программ для сравнения файлов, в том числе текстовых, немало, их основной недостаток – цена. Compare it! стоит 29$ за лицензию, Beyond Compare – 30$, Compare Suite — 70$, DiffDoc Professional — аж 399,95$. Посмотрим на примере этой последней, самой дорогой программы, насколько она лучше бесплатной WinMerge.

Скачиваем программу (7 мб), запускаем. Результат очень похож на тот, что нам выдал Microsoft Office 2007, только расположение колонок иное. Красный зачеркнутый – текст, который изменили, красный подчеркнутый – текст, на который был изменен исходный (красный зачеркнутый); синий зачеркнутый – вырезанный текст, зеленый – перемещенный (или добавленный «с нуля») текст.

Получается, что разницы практически нет. Если уж пользователь честно купил дорогой офисный пакет Microsoft, то тратить еще 400 долларов на официальную покупку и регистрацию этой программы смысла нет никакого. Даже «триальной» версией нет нужды пользоваться, если тот же самый функционал обеспечивает стандартный «Ворд», тем более что незарегистрированная версия DiffDoc Professional каждые 15 минут напоминает о необходимости покупки.

Наконец, проверим один из множества онлайн-сервисов для сличения текстов: DiffNow

Сервис вроде бы поддерживает загрузку doc-файлов, «проглотил» их, написал Files compared successfully («сравнение файлов прошло успешно»), но вместо нормального результата выдал бинарный набор нолей и единиц, в котором, правда, подсветил отличия. Поэтому лучше копировать и вставлять текст вручную. Сайт подсвечивает изменения так: коричневый – измененный текст, синий – удаленный, бордовый – добавленный, фиолетовый – измененные слова в измененных предложениях. Сервис поддерживает различные настройки (в том числе можно заменять цвета), но от одного недостатка мы никакими настройками избавиться не смогли: текст по-программистски вытянут в длину, приходится задействовать горизонтальный скроллинг.

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

В приложение уже встроена функция сравнения файлов: diff. Выделяете два файла и в контекстом меню жмете «Diff files…». Создается общий файл. Разница помечается плюсами и минусами. Чтобы сравнение выглядело наглядней, установите пакет «Compare Side-By-Side». Он выделяет изменения цветом: добавленный текст — зелёным, изменённый — синим, удалённый — красным.

работа пакета «Compare Side-By-Side»

Но прежде чем устанавливать пакеты, нужен Package Control.

Установка Package Control

1. На сайте разработчика выбираете вкладку с вашей версией приложения. Это либо Sublime Text 3 либо Sublime Text 2.2. Копируете из серого окошка непонятный текст.3. Открываете в приложении консоль, нажав ctrl+`, и вставляете текст. 4. Перезагружаете приложение.

Package Сontrol установлен.

Использование пакета Compare Side-By-Side

Открываете два файла. На вкладке или на панели вызываете контексное меню и выбираете: «Compare with…”, или «Compare with active tab”.

Если хотите сравнить части текста: выделяете в одной вкладке текст, метите его: контексное меню → «Mark selection for comparison», затем выбираете текс с которым хотите сравнить и жмёте «Compare selections».

Пакет Sublimerge

К Sublime Text прикручивается еще более продвинутый пакет: Sublimerge. Он может сравнить как текст, так и содержимое папок.

Результаты сравнения также наглядны, но функционал шире: можно создавать снапшоты текста для отслеживания изменений. Пакет платный — $35. Есть пробный период.

Все популярные пакеты на сайте:

Сервис Diffcheker

Из файлов можно загружать только pdf. Для проверки текста вставляейте в поля. Результаты выводятся сверху.

Сервис NUM2WORD

Результаты показаны снизу. Есть варианты: семантическая очистка, эффективная очистка, без очистки. Но особой разницы нет.

На сайте сервиса есть дополнительные функции: перевести числа в текстовую пропись, например 142 → сто сорок два.

Командная строка

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

diff file1 file2

Где diff — название команды, а file1 и file2 — текстовые файлы.

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

Для сохранения результатов в файл напишите:

diff file1 file2 >> result_file.txt

Можно сравнить в терминале через встроенный редактор vim.

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

Shingles Expert

Стоит начать с удобной бесплатной утилиты, подробный обзор которой есть на нашем сайте. Интерфейс поделен на две части, в каждую из них вставляется исходный текст. Его можно добавить вручную или загрузить из файла. После сравнения отобразится процент совпадения, а также длина шингла. Помимо этого, предусмотрена функция автоматического «отброса» HTML-тегов и стоп-слов, которые пользователь указывает сам.

Shingles Expert распространяется на бесплатной основе и доступен на русском языке. Главный недостаток программы заключается в том, что в ней отображается лишь процент совпадений. Сами одинаковые фрагменты никак не подсвечиваются, а потому такое решение подойдет далеко не для всех ситуаций, однако обратить на нее внимание стоит.

Microsoft Word

В популярный текстовый редактор Microsoft Word тоже встроена функция сравнения текстов, однако далеко не всем это известно, ведь среди множества возможностей программы довольно легко запутаться. Для этого предусмотрен раздел «Рецензирование». Выбрав нужную функцию, достаточно вставить исходный и измененный документы, после чего можно выставить дополнительные параметры — показатели, которые будут отображаться при сравнении.

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

Microsoft Word

Подробнее: Сравниваем два документа Microsoft Word

WinMerge

Бесплатная утилита с открытым исходным кодом от разработчиков-любителей. WinMerge предназначена для сравнения не только текстовых файлов, но и целых папок. В результате отображаются все различия между ними, с которыми можно ознакомиться в удобном окне. Это особенно полезно для разработчиков или авторов, которые хотят сравнить две разные версии своего проекта и выявить фрагменты, которые изменились.

Помимо этого, реализовано множество дополнительных возможностей. Все они расположены в виде удобного меню в верхней части рабочего пространства. При анализе папок учитываются все данные: содержимое, размеры, дата изменения и т. д. Что касается текстовых файлов, поддерживаются все доступные форматы не только Windows, но и Unix, и Mac. Бесплатно скачать WinMerge на русском языке можно с официального сайта.

TextDiff

TextDiff — еще одна бесплатная утилита для сравнения текстов, которая имеет открытый исходный код. Она поддерживает Unicode и крайне проста в использовании. Рабочее пространство выполнено в виде двух окон, в каждое из которых и вставляется текст. Выполнив анализ, приложение покажет различающиеся строки и подсветит их зеленым цветом. Здесь же можно внести соответствующие правки в удобном редакторе, после чего экспортировать новые файлы в формат TXT.

Присутствует русскоязычная версия, а сама программа не нуждается в установке, поскольку является портативной.

Compare Suite

Compare Suite — более продвинутая программа для сравнения различных объектов, в числе которых любые файлы и папки, включающие в себя как текстовые, так и графические форматы. Предусмотрена не только функция сравнения, но и объединения документов. Распознаются любые форматы Windows, DOS, Unix и Mac. Помимо этого, поддерживается и широкий спектр кодировок. Реализована технология сравнения двух и трех объектов.

В Compare Suite встроен и удобный редактор, причем его можно использовать в качестве среды разработки — подсвечивается синтаксис C, C++, PHP, HTML, Basic, JavaScript, SQL и многих других языков. Отлично подходит как для разработчиков, так и для офисных работников, которые регулярно имеют дело с различными документами. Есть русскоязычный интерфейс, а единственная проблема заключается в том, что приложение платное, хотя и имеет 30-дневную пробную версию.

ABBYY Comparator

ABBYY Comparator — многоплановое решение от известной компании ABBYY, предлагающее отличные возможности для разработчиков и авторов. Благодаря фирменным технологиям в программе можно сравнивать не только два текстовых, но и отсканированные документы. Поддерживаются распространенные текстовые и графические форматы, от TXT до PDF. Это могут быть электронные таблицы, прайс-листы, договоры и многое другое.

Рассматриваемое решение не подойдет для домашнего использования, поскольку имеет коммерческую направленность. Для получения пробной версии необходимо связаться с менеджером компании. Примечательно, что Comparator имеет API-версию, позволяющую интегрировать ее в любую архитектуру по желанию клиента. Важно отметить высокую стоимость продукта, свидетельствующую о его бизнес-ориентированности.

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

Мы рады, что смогли помочь Вам в решении проблемы.
Добавьте сайт Lumpics.ru в закладки и мы еще пригодимся вам.
Отблагодарите автора, поделитесь статьей в социальных сетях.
Опишите, что у вас не получилось. Наши специалисты постараются ответить максимально быстро.

Помогла ли вам эта статья?

fc.exeлучше для сравнения текста, так как он предназначен для работы подобно * nix diff, то есть сравнивает строки последовательно, показывая реальные различия и пытаясь выполнить повторную синхронизацию (если разные секции имеют разную длину). Он также имеет несколько полезных опций управления (текстовый / двоичный, чувствительность к регистру, номера строк, длина ресинхронизации, размер буфера несоответствия) и обеспечивает состояние выхода (-1 неправильный синтаксис, 0 файлов одинаковы, 1 файл отличается, 2 файла отсутствуют). Будучи (очень) старой утилитой DOS, она имеет несколько ограничений. В частности, он не работает автоматически с Unicode, обрабатывая 0 MSB символов ASCII как терминатор строки, поэтому файл становится последовательностью из 1 строки символов (@kennycoc: используйте параметр / U, чтобы указать, что ОБА файлы являются Unicode, WinXP и далее ) и он также имеет размер буфера жесткой строки 128 символов (128 байтов ASCII,

объект сравнения предназначен для определения того, являются ли 2 объекта идентичными по элементам. если объекты являются коллекциями, то они обрабатываются как SETS (см. справочный объект сравнения), т. е. коллекции UNORDERED без дубликатов. 2 набора равны, если они имеют одинаковые элементы, независимо от порядка или дублирования. Это сильно ограничивает его полезность для сравнения текстовых файлов на предмет различий. Во-первых, поведение по умолчанию собирает различия до тех пор, пока не будет проверен весь объект (файл = массив строк), что приведет к потере информации, касающейся положения различий, и сокрытию различий между парами (и не существует понятия номера строки для SET строк). Использование -synchwindow 0 приведет к тому, что различия будут генерироваться по мере их возникновения, но не будет пытаться выполнить повторную синхронизацию, поэтому, если в одном файле есть лишняя строка, последующие сравнения строк могут завершиться неудачей, даже если файлы в противном случае идентичны (до тех пор, пока не будет получена компенсация). дополнительная строка в другом файле, таким образом выравнивая совпадающие строки). Тем не менее, PowerShell является чрезвычайно универсальным и полезное сравнение файлов может быть сделано с помощью этой функции, хотя и за счет существенной сложности и с некоторыми ограничениями на содержание файлов. Если вам нужно сравнить текстовые файлы с длинными (> 127 символов) строками и где строки в основном совпадают с 1:

diff (gc file1 | % -begin { $ln1=0 } -process { ‘{0,6}<<:{1}’ -f ++$ln1,$_ }) (gc file2 | % -begin { $ln2=0 } -process { ‘{0,6}>>:{1}’ -f ++$ln2,$_ }) -property { $_.substring(9) } -passthru | sort | out-string -width xx

где хх — длина самой длинной строки + 9

объяснение

  • (gc file | % -begin { $ln=0 } -process { ‘{0,6}<<:{1}’ -f ++$ln,$_ }) получает содержимое файла и добавляет номер строки и указатель файла (<< или >>) к каждой строке (используя оператор строки формата) перед передачей его в diff.
  • -property { $_.substring(9) }сообщает diff для сравнения каждой пары объектов (строк), игнорируя первые 9 символов (которые являются номером строки и индикатором файла). При этом используется возможность указать вычисляемое свойство (значение блока скрипта) вместо имени свойства.
  • -passthru заставляет diff выводить разные входные объекты (которые включают номер строки и индикатор файла) вместо отличающихся сравниваемых объектов (которые этого не делают).
  • sort-objectзатем помещает все строки обратно в последовательность.
    out-string останавливает усечение по умолчанию для вывода в соответствии с шириной экрана (как отметил Марк Тауэрсап), указав достаточно большую ширину, чтобы избежать усечения. Обычно этот вывод помещается в файл, который затем просматривается с помощью прокручиваемого редактора (например, блокнота).

Запись

Формат номера строки {0,6} дает выравниваемый справа пробел номер строки из 6 символов (для сортировки). Если файлы имеют более 999 999 строк, просто измените формат на более широкий. Это также требует изменения $_.substringпараметра (на 3 больше ширины номера строки) и внешнего значения xx (максимальная длина строки + $_.substringпараметр).


Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *