Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Форумы портала PHP.SU :: Версия для печати :: Сравнение двух текстов
Форумы портала PHP.SU » » HTTP и PHP » Сравнение двух текстов

Страниц (1): [1]
 

1. SunChase - 11 Января, 2012 - 18:14:50 - перейти к сообщению
Доброго времени суток.

Нужен совет на тему: Как можно реализовать сравнение двух текстов с выводом результата, в виде текста, взятого из первого источника, с выделениями слов(областей) совпадений из второго источника ?

Знаю что прозвучало "туманно", потому попробую отобразить пример:

Текст 1: На улице не идёт снег, а идёт дождь
Текст 2: На улице идёт дождь

Результат: <b>На улице</b> не идёт снег, а <b>идёт дождь</b>

Можно ли такое реализовать на ПХП, или попробовать воспользоваться JS или jQuery?
2. Panoptik - 11 Января, 2012 - 18:43:49 - перейти к сообщению
такое можно реализовать на любом языке...
ваш пример легко реализуем, но если второе предложение изменить на:
"На улице пока не идёт дождь"
тогда совпадения искать гораздо сложнее.
тут нужен алгоритм а не язык программирования. если у вас такой имеется, то тогда нет проблем
3. SunChase - 11 Января, 2012 - 19:13:02 - перейти к сообщению
Понятно. Спасибо за ответ.

А может ли ктото ткнуть носом в подобный алгоритм, или если возможно, написать его сюда? Знаю что нагловато, но голова уже просто не варит, а реализовать надо.

Да и такой вопрос. Касательно потребления ресурсов системы, один человек посоветовал подобные вычисления выполнять на серверной стороне. Так ли это? Нужно сравнить текст, содержащий приблизительно 50тыс символов(~ 20 А4 страниц)

UPD: Алгоритм таки "родил". На jQuery работает отлично. Но перед внедрением в систему всётаки хотелось бы узнать есть ли разница на чьей стороне его реализовывать: сервер или клиент?
4. Panoptik - 11 Января, 2012 - 20:44:36 - перейти к сообщению
самый простой алгоритм это посимвольное сравнение со сдвигом.
Например есть 2 строки:
ждлоафыавфыа
ждложфвп
сравнение начинается с первого символа и "указатель" постепенно смещается
4 первых символа - одинаковые, а вотдойдя до 5 символа у нас появляются отличия и тут всё зависит от ваших нужд. мы можем пытаться найти символ "а" во второй строке перебирая каждый символ. дойдя до конца и не получив результата. мы возвращаемся к следующему символу - "ф" а указатель у нас как мы помним был на 4 позиции. вот и начинаем перебирать снова все символы во второй строке начиная с 4-го. находим совпадение на 6 символе - перемещаем указатель. сравниваем "ы" - не находим, "а" - тоже.
"в" - находим на 7-позиции. после проходим остальные символы и ничего не находим до конца проходов.
результат получился такой "ждло" "ф" "в". суть думаю ясна

на счет памяти и мощностей можете сами прикинуть. по идее 50к это ерунда для сервера. но помните что если 2 текста по 50к - это уже около 2.5М - соответственно столько памяти.
если сомневаетесь, попробуйте урезать для начала тексты до 1к и потестить. а после переходить на полные тексты
5. Okula - 11 Января, 2012 - 21:17:46 - перейти к сообщению
А по мне удобнее сравнить по словам. Например разбить предложение на отдельные слова и сравнивать совпадение слов во втором предложении. Конечно результат может быть не всегда удачным, но так гибкости больше. Улыбка
6. SunChase - 11 Января, 2012 - 22:00:28 - перейти к сообщению
Panoptik пишет:
сравнение начинается с первого символа и "указатель" постепенно смещается
4 первых символа - одинаковые, а вотдойдя до 5 символа у нас появляются отличия и тут всё зависит от ваших нужд. мы можем пытаться найти символ "а" во второй строке перебирая каждый символ. дойдя до конца и не получив результата. мы возвращаемся к следующему символу - "ф" а указатель у нас как мы помним был на 4 позиции. вот и начинаем перебирать снова все символы во второй строке начиная с 4-го. находим совпадение на 6 символе - перемещаем указатель. сравниваем "ы" - не находим, "а" - тоже.
"в" - находим на 7-позиции. после проходим остальные символы и ничего не находим до конца проходов.
результат получился такой "ждло" "ф" "в". суть думаю ясна

Хех. Именно так и сделал, только разбивку делал по словам Закатив глазки

Panoptik пишет:
на счет памяти и мощностей можете сами прикинуть. по идее 50к это ерунда для сервера. но помните что если 2 текста по 50к - это уже около 2.5М - соответственно столько памяти.
если сомневаетесь, попробуйте урезать для начала тексты до 1к и потестить. а после переходить на полные тексты

Хм. Сложно на данном этапе предположить насколько "популярной" будет эта функция в системе, но всёже если предположить что во время сессии(для института пишу инструмент коллективной работы над документом с сохранением версий правок) если пускать через сервер, то нагрузка будет уже ощутимой.
7. Panoptik - 11 Января, 2012 - 23:04:12 - перейти к сообщению
так воспользовались бы существующими инструментами SVN, Git, Googledocs ... зачем изобретать велосипед?
8. SunChase - 12 Января, 2012 - 00:14:29 - перейти к сообщению
Panoptik пишет:
так воспользовались бы существующими инструментами SVN, Git, Googledocs ... зачем изобретать велосипед?

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

 

Powered by ExBB FM 1.0 RC1