#php #mysql #apache
#php #mysql #apache
Вопрос:
Я пытаюсь добавить функцию для создания отчета о различиях между 2 разделами текста из 20 000 символов. Я немного погуглил и услышал о библиотеке Pear diff, которая была прекращена, и нашел это: https://github.com/paulgb/simplediff/blob/5bfe1d2a8f967c7901ace50f04ac2d9308ed3169/simplediff.php
В идеале я хотел бы видеть, что было удалено, отредактировано или добавлено, и иметь возможность показать это пользователю. Существуют ли какие-либо библиотеки или простые способы выполнения этого, о которых вы можете знать?
Комментарии:
1. Будет ли эта функция использоваться на постоянной основе или один раз? При одноразовом использовании я бы добавил два файла в систему управления версиями, а затем сопоставил файлы друг с другом.
2. Это будет по требованию наших клиентов, так что это будет постоянно
3. Проверьте CakePHP и Zend Framework, у них может быть что-то в своих библиотеках, что касается такого типа ситуации. Другим решением может быть Lucene / Solr, но для его ускорения потребуется больше времени.
Ответ №1:
Я использую этот код в живом проекте http://svn.geograph.org.uk/svn/branches/british-isles/libs/3rdparty/simplediff.inc.php
Пример использования http://svn.geograph.org.uk/svn/branches/british-isles/public_html/article/diff.php
но код очень прост
$a1 = explode("n",$file1);
$a2 = explode("n",$file2);
print diff2table($a1,$a2);
(код просто принимает входные данные в виде массивов и выводит html-таблицу. Но diff2table можно настроить)
Комментарии:
1. дох! вижу, вы уже нашли simplediff. Но, возможно, показанное мной использование помогает. Я обнаружил, что это работает в реальном мире. Он отлично работает с документами со 100 тыс. строк.
2. Я обнаружил, что это не совсем соответствует моим потребностям. Иногда он догадывается, и я не могу позволить себе догадываться.
3. Догадки? что, черт возьми, это значит?
4. С помощью этого кода я запустил тест, добавляющий новое содержимое в строку, и отчет о различиях не был точным. Локальный, да, точный, нет. Я взял строку «Страхование по низкой цене» и добавил «Вы можете получить» перед ней. Он показал
<del>Insurance</del>
и<ins>You can get Insurance</ins>
… на самом деле это не должно показывать, что что-то было удалено.