Перейти к содержимому

!!! ___ Python + JavaScript сравнение двух строк (текстов) и выделить различия между ними. (полезное ПО) (Teg: сравнение строка, выделение различий, выделить цветом различия, найти разницу, найти различия, ). (teg: </jv1><jv1> -удалить)

папка «*\HTML_CSS_JS_2023\Выделение тегами отличий при сравнении 2х похожих строк»

Teg: сравнение строка, выделение различий, выделить цветом различия, найти разницу, найти различия,

URL источник

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()

Lesson number 1

Для изучения немецкого языка.


Сравнение 2х строк


befehlen => befiehlt
versicherung, sachversicherung
versicherung, rückversicherung
versicherung, kaskoversicherung
versicherung, verschlechterung
versicherung, versteigerung

в папке тут
***\HTML_CSS_JS_2023\Выделение тегами отличий при сравнении 2х похожих строк

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