папка «*\HTML_CSS_JS_2023\Выделение тегами отличий при сравнении 2х похожих строк»
Teg: сравнение строка, выделение различий, выделить цветом различия, найти разницу, найти различия,
http://l.cbm.ua/help/index.html — Сравнение 2х текстов (Comparison of 2 texts)
Цель подсветить части которые удалены и добавлены в тексте.
Для этого есть библиотека которая перед каждым таким символом ставит или + (символ добавлен) или — (символ удален).
Дальше каждый такой символ обрамляется своим тегом.
Дальше чтобы уменьшить размеры текст для определения стилей и не выделять каждый символ отдельно просто удаляется одинаковый тег конца и начала. Например:
Скрипт для сравнения двух строк:
s_r1 = s_r1.replace("</jV1><jV1>", "")
s_r2 = s_r2.replace("</jV2><jV2>", "")
таким образом вместо этого <jV1>a</jV1><jV1>b</jV1><jV1>c</jV1> получаем это <jV1>abc</jV1>
import difflib
cases=[('afrykanerskojęzyczny', 'afrykanerskojęzycznym'),
('afrykanerskojęzyczni', 'nieafrykanerskojęzyczni'),
('afrykanerskojęzycznym', 'afrykanerskojęzyczny'),
('nieafrykanerskojęzyczni', 'afrykanerskojęzyczni'),
('nieafrynerskojęzyczni', 'afrykanerskojzyczni'),
('abcdefg','xac')]
for a,b in cases:
print('{} => {}'.format(a,b))
for i,s in enumerate(difflib.ndiff(a, b)):
if s[0]==' ': continue
elif s[0]=='-':
print(u'Delete "{}" from position {}'.format(s[-1],i))
elif s[0]=='+':
print(u'Add "{}" to position {}'.format(s[-1],i))
print()
Будет напечатано:
afrykanerskojęzyczny => afrykanerskojęzycznym Add "m" to position 20 afrykanerskojęzyczni => nieafrykanerskojęzyczni Add "n" to position 0 Add "i" to position 1 Add "e" to position 2 afrykanerskojęzycznym => afrykanerskojęzyczny Delete "m" from position 20 nieafrykanerskojęzyczni => afrykanerskojęzyczni Delete "n" from position 0 Delete "i" from position 1 Delete "e" from position 2 nieafrynerskojęzyczni => afrykanerskojzyczni Delete "n" from position 0 Delete "i" from position 1 Delete "e" from position 2 Add "k" to position 7 Add "a" to position 8 Delete "ę" from position 16 abcdefg => xac Add "x" to position 0 Delete "b" from position 2 Delete "d" from position 4 Delete "e" from position 5 Delete "f" from position 6 Delete "g" from position 7

Скрипт (программа) для сравнения 2х строк и выделения тегами тех букв которые удалены или добавлены.
Чтобы получилось так:

Скрипт (программа) на Python-е для подготовки строк с разделителями измененных букв тегами.
import difflib
cases=[]
mas_1 = [()]
cases=[
('befehlen', 'befiehlt'),
('backen', 'bäckt'),
('backen', 'backt'),
('backen', 'buk'),
('backen', 'backte'),
('backen', 'hat gebacken')
]
for a, b in cases:
print(f'{a} => {b}')
s_r1 = ""
s_r2 = ""
for i, s in enumerate(difflib.ndiff(a, b)):
if s[0] == "-":
s_r1 += "<jV1>" + s[2:] + "</jV1>"
elif s[0] == "+":
s_r2 += "<jV2>" + s[2:] + "</jV2>"
else:
s_r1 += s[2:]
s_r2 += s[2:]
#Тут можно в строках с результатами "s_r1" и "s_r2" удалить закрывающийся
# и открывающийся теги. Например "</jp1><jp1>" или чтото подобное.
#Так как иначе будет выделяться каждая буква отдельно.
s_r1 = s_r1.replace("</jV1><jV1>", "")
s_r2 = s_r2.replace("</jV2><jV2>", "")
print (f'{s_r1}, {s_r2}')
print()

Для изучения немецкого языка.
Сравнение 2х строк
befehlen => befiehlt
versicherung,sach versicherung versicherung,rück versicherung versicherung,kasko versicherung versi cherung, verschlecht erung versich erung, verste ig erung
в папке тут
***\HTML_CSS_JS_2023\Выделение тегами отличий при сравнении 2х похожих строк