Toon posts:

[.NET] Diff / Compare files API/Library results

Pagina: 1
Acties:

Verwijderd

Topicstarter
Hoi allemaal,

Voor een project heb ik een .NET oplossing nodig waarbij twee bestanden (text) met elkaar worden vergeleken. Een aantal van dit soort bibliotheken heb ik wel gevonden. Waar ik niet uitkom is het berekenen van de percentage in hoevere de twee vergeleken bestanden met elkaar matchen. Wat ik dus wil is om een algorithme of stuk code, die de resultaten van de vergelijking bekijkt en op basis daarvan een match percentage uitrolt. Bijvoorbeeld: Match: 87%. Heeft iemand van jullie een tip hoe ik dit kan implementeren? Misschien zijn er al mensen die bepaalde bibliotheken kennen die dit soort berekeningen kunnen uitvoeren.

Het project bevat een onderdeel waarbij een beslissing genomen moet worden. Het is een stukje Artifical Intelligence waarbij op basis van de match resultaten bepaalde beslissingen genomen moeten worden. Als ik deze match percentage kan uitrollen, dan kan ik heel snel weer verder met het mechanisme voor het maken van de beslissing.

De verschillende diff / compare bibliotheken gebruik ik van CodeProject. Er zijn er stuk of 10 die ik heb gevonden, maar geen een daarvan genereert een soort match percentage. Iemand suggesties hoe ik dit het makkelijkst kan oplossen? Misschien kan ik deze bibliotheken gewoon blijven gebruiken, maar hoe en op welke punten moet ik de berekening gaan baseren... Ideeen zijn welkom. Alvast bedankt.


Groetjes,

Sead

Verwijderd

Een match percentage is niet zo 1-2-3 te bepalen, want die is ook afhankelijk van 't type bestand.
Neem bv. een tekstbestand waarin 2 blokken tekst omgewisseld zijn. Wanneer 't een gedicht is, kan opeens de inhoud een hele andere betekenis krijgen (laag match-percentage), maar bij bv. een XML-file kan 't goed een 100% match zijn omdat ze beide serialiseren naar exact dezelfde objectstructuur.

Oftewel, hier valt geen eenduidig antwoord op te geven...

  • Niemand_Anders
  • Registratie: Juli 2006
  • Laatst online: 09-07-2024

Niemand_Anders

Dat was ik niet..

Je kan toch het percentage berekenen door het aantal gewijzigde regels te tellen? Vervolgens haal je het totale aantal regels op. Vervolgens krijg je dan het percentage als volg:
(( totaal - gewijzigde regels) / totaal) * 100

Dus als het totaal 5 regels bevat en de diff geeft aan dat de replacement 3 regels zijn, dan is het bericht nog voor ((5 - 3) / 5) * 100 = 40% hetzelfde als het origineel.

Je kunt in plaats van het aantal regels, natuurlijk ook het aantal gewijzigde tekens gebruiken. Je krijgt dan een iets preciezer percentage.

Ik weet zeker dat als je zelf even nadenkt, dat je ook wel een aantal oplossingen kunt komen..

If it isn't broken, fix it until it is..


Verwijderd

Topicstarter
Bedankt voor jullie antwoorden. Ik ben inderdaad druk bezig met maken van flows over hoe dit opgelost zou kunnen worden. Het tellen van het aantal regeles is niet echt een preciese oplossing vind ik. Er moet een soort algorithme zijn die het antwoord van de comparer analyseert en op basis van de verschillen die er zijn gevonden, een berekening gaat uivoeren in hoeverre de woorden / stukken tekst van elkaar verschillen.

Een aantal mogelijkheden heb ik wel op papier gezet. Ik ben echt nu aan het brainstormen wat de beste oplossing is. Het is inderdaad niet echt 1-2-3 te achterhalen. Maar het blijft een uitdaging om het goed te doen. Ideen een suggesties zijn dus nog steeds welkom. Misschien dat er iemand met een dergelijk systeem bezig is geweest...

Nogmaals, bedankt voor input.

  • Cloud
  • Registratie: November 2001
  • Laatst online: 03-11 10:25

Cloud

FP ProMod

Ex-moderatie mobster

Ik denk ook dat er niet één goed antwoord is eigenlijk. Je kan het verschil op zoveel verschillende manieren uitrekenen; op basis van lengte, regel voor regel, karakter voor karakter, en ongetwijfeld nog meer. Daar zul je een keuze uit moeten maken. De keuze die je maakt beïnvloed namelijk ook de percentages die je gaat krijgen. Als je werkt op regel voor regel wijzigt je percentage veel minder snel dan karakter voor karakter bijvoorbeeld. :)

Je zult eerst moeten bepalen op basis waarvan je het verschil wilt bepalen, voordat er een antwoord te geven is over een algoritme dat dat voor je doet.

Never attribute to malice that which can be adequately explained by stupidity. - Robert J. Hanlon
60% of the time, it works all the time. - Brian Fantana


Verwijderd

Topicstarter
Is het misschien verstandig om een aantal simulaties te defineren en de verschillende resultaten met elkaar te vergelijken en dan een gemiddelde of zo te nemen?

Het gaat dus echt om het vergelijken van 2 tekstbestanden. Die kunnen best wel 5MB groot zijn per stuk. Op dit moment kan ik achterhalen wat erbij is gekomen, wat verdwenen is, wat veranderd is in dezel stuk tekst etc. Dit wordt allemaal in een aparte lijst opgeslagen. Dat zijn zegmaar de resultaten van de vergelijking. Nu moet ik deze lijsten nog een keer nalopen om het percentage te berekenen in hoeverre dit verschilt/matcht.

Als ik nu een aantal simulaties daarbij ga betrekken: 1 voor woorden calculatie, 1 voor karakters, etc. Is dat niet een idee?
Pagina: 1