diff-match-patch-python / diff-match-patch

Diff Match Patch is a high-performance library in multiple languages that manipulates plain text.
Apache License 2.0
49 stars 8 forks source link

Different result from the official demo #14

Closed kilianshi closed 1 month ago

kilianshi commented 1 year ago

Hello Team, first, thank you very much for creating this package.

I tested for one example, and I found different result on this demo website: https://neil.fraser.name/software/diff_match_patch/demos/diff.html

Differences

For two texts, i used the demo website, and this package, you can see from below the differences. And I have to reproduce the result from the demo website.

On the demo website I also noticed that there is this cost edit for efficiency cleanup. and it seems that in this package, we do not have this option.

image

With this package, since a big chunk is considered "deleted", I cut the screenshot into two parts:

image

image

Example texts and code

For reproduction purpose, there is the code :

from IPython.display import display, HTML
from diff_match_patch import diff_match_patch

text1="""
1.2.1 
en raison des dommages corporels, matériels et immatériels consécutifs ou 
non consécutifs subis par des tiers résultant d’une pollution imputable aux 
activités garanties de l’assuré que ce soient celles réalisées sur les sites 
couverts ou au titre des opérations couvertes. 

201811 
cg_chubb protection environnementale_2017 
4 

sont également inclus dans cette garantie, en tant qu’ils sont causés par une pollution imputable aux activités 
garanties de l’assuré que ce soient celles réalisées sur les sites couverts ou au titre des opérations couvertes: 
 
les frais de dépollution et de remise en etat dès lors que ces frais sont engagés pour réparer des 
dommages matériels subis par des tiers ; 
 
les conséquences pécuniaires des dommages subis par des biens confiés à l’assuré ou par des biens 
appartenant aux préposés de l’assuré dans la limite fixée aux conditions particulières. 
1.2.2 en raison des frais de réparation du préjudice ecologique, des dépenses de prévention du préjudice ecologique 
et du coût des mesures raisonnables relatifs à un préjudice écologique résultant d’une pollution imputable aux 
activités garanties de l’assuré que ce soit celles réalisées sur les sites couverts ou au titre des opérations 
couvertes. pour les seules atteintes à la biodiversité, la présente garantie 1.2.2. couvre également les frais de 
réparation du préjudice ecologique, les dépenses de prévention du préjudice ecologique et le coût des mesures 
raisonnables relatifs à un préjudice écologique afférents à ces atteintes à la biodiversité même lorsqu’elles n’ont 
pas pour origine une pollution dès lors qu’elles résultent d’un fait fortuit, imprévu et involontaire et sont 
imputables aux activités garanties de l’assuré que ce soit celles réalisées sur les sites couverts ou au titre des 
opérations couvertes . 
sont également inclus dans la garantie 1.2 les frais de défense et recours tels que définis à l’article 2.20. 
1.3 
garantie responsabilité environnementale  
les frais de réparation du dommage environnemental incombant à l’assuré au titre de sa responsabilité 
environnementale lorsque, conformément à l’article l. 162-11 du code de l’environnement ou aux textes équivalents 
adoptés par chacun des etats membres de l’union européenne pour transposer la directive européenne ce 2004/35, 
l’assuré se voit prescrire par une autorité publique compétente de mettre en œuvre des mesures destinées à réparer un 
dommage environnemental imputable aux activités garanties de l’assuré réalisées sur les sites couverts. 
les frais de réparation du dommage environnemental incombant à l’assuré au titre de sa responsabilité 
environnementale lorsque, conformément à l’article l. 162-11 du code de l’environnement ou aux textes équivalents 
adoptés par chacun des etats membres de l’union européenne pour transposer la directive européenne ce 2004/35, 
l’assuré se voit prescrire par une autorité publique compétente de mettre en œuvre des mesures destinées à réparer un 
dommage environnemental imputable aux activités garanties de l’assuré réalisées au titre des opérations couvertes. 
les frais de réparation du dommage environnemental incombant à l’assuré au titre de sa responsabilité 
environnementale lorsque, conformément à l’article l. 162-11 du code de l’environnement ou aux textes équivalents 
adoptés par les etats membres de l’union européenne pour transposer la directive européenne ce 2004/35, l’assuré se 
voit prescrire par l’autorité publique compétente de mettre en œuvre des mesures destinées à réparer un dommage 
environnemental imputable aux activités garanties de l’assuré provenant des produits couverts. 
les sommes exposées par l'etat au titre des frais de réparation du dommage environnemental conformément aux 
articles l. 162-14 et suivants du code de l’environnement ou aux textes équivalents adoptés par les etats membres de 
l’union européenne pour transposer la directive européenne ce 2004/35 et dont le remboursement est réclamé à 
l'assuré au titre de sa responsabilité environnementale dès lors que le dommage environnemental résulte des activités 
garanties de l’assuré quelles soient réalisées sur les sites couverts, au titre des opérations couvertes ou provenant des 
produits couverts. 
la présente garantie couvre également les frais de réparation du dommage environnemental relevant de la 
responsabilité environnementale de l’assuré même lorsqu’ils n’ont pas pour origine une pollution. dès lors qu’elles sont 
imputables aux activités garanties de l’assuré que ce soit celles réalisées sur les sites couverts ou au titre des opérations 
couvertes . 
sont également inclus dans la garantie 1.3 les frais de défense et recours tels que définis à l’article 2.20. 
"""

text2="""
1.2.1 
en raison des dommages corporels, matériels et immatériels consécutifs ou 
non consécutifs subis par des tiers résultant d’une pollution imputable aux 
activités garanties de l’assuré. sont également inclus dans cette garantie : 
• 
les frais de dépollution et de remise en état engagés pour réparer des 
dommages matériels subis par les tiers ; 
• 
les conséquences pécuniaires des dommages subis par des biens confiés à 
l’assuré ou par des biens appartenant aux préposés de l’assuré dans la 
limite fixée aux conditions particulières, 
dès lors qu’ils sont causés par une pollution imputable aux activités garanties 
de l’assuré et font l’objet d’une réclamation du tiers.  
1.2.2 en raison des préjudices écologiques résultant d’une pollution imputable aux 
activités garanties de l’assuré. pour les seules atteintes à la biodiversité, la 
présente garantie 1.2.2. couvre également les préjudices écologiques même 
lorsqu’elles n’ont pas pour origine une pollution dès lors qu’elles résultent d’un 
fait fortuit, imprévu et involontaire et sont imputables aux activités garanties 
de l’assuré. 
sont inclus dans la garantie 1.2 les frais de défense et recours tels que définis à 
l’article 2.20. 
conditions générales 

202306 
cg_chubb protection environnementale_2023 
4 

1.3 
garantie responsabilité environnementale  
les frais de réparation du dommage environnemental incombant à l’assuré au titre de sa responsabilité 
environnementale lorsque, conformément à l’article l. 162-11 du code de l’environnement ou aux textes équivalents 
adoptés par chacun des etats membres de l’union européenne pour transposer la directive européenne ce 2004/35, 
l’assuré se voit prescrire par une autorité publique compétente de mettre en œuvre des mesures destinées à réparer un 
dommage environnemental imputable aux activités garanties de l’assuré. 
les sommes exposées par l'etat au titre des frais de réparation du dommage environnemental conformément aux 
articles l. 162-14 et suivants du code de l’environnement ou aux textes équivalents adoptés par les etats membres de 
l’union européenne pour transposer la directive européenne ce 2004/35 et dont le remboursement est réclamé à 
l'assuré au titre de sa responsabilité environnementale dès lors que le dommage environnemental résulte des activités 
garanties de l’assuré. 
la présente garantie couvre également les frais de réparation du dommage environnemental relevant de la 
responsabilité environnementale de l’assuré même lorsqu’ils n’ont pas pour origine une pollution dès lors qu’ils sont 
imputables aux activités garanties de l’assuré. 
sont également inclus dans la garantie 1.3 les frais de défense et recours tels que définis à l’article 2.20. 
"""

dmp = diff_match_patch()
diffs = dmp.diff_main(text1, text2)
diff_html = dmp.diff_prettyHtml(diffs)

display(HTML(diff_html))

Question

Could you please help me to find out why there is such difference?

Thank you

lizfischer commented 10 months ago

I have the same issue

lizfischer commented 10 months ago

@kilianshi Not sure if you're still working on this, but I think I figured it out. The default timeout is 1 second, after which point dmp just gives you whatever it got through--which, since you and I are both working with long strings, results it it lumping the last part of the string together as one big change.

Before you run diff_main, set the timeout to something bigger than 1 (or set to 0 for no timeout). Like this:

dmp = diff_match_patch()
dmp.Diff_Timeout = 0 # unlimited
dmp.diff_main(text1, text2)

Not sure why the demo site is so much more efficient, but there ya go

kilianshi commented 9 months ago

Thank you very much @lizfischer . it is very helpful.