One method I've employed for a
different functionality, to calculate how much data was new in a
modified file, could perhaps work for you as well.
I have a diff/patch implementation C# that allows me to take two
files, presumably old and new version of the same file, and calculate
the "difference", but not in the usual sense of the word. Basically I
calculate a set of operations that I can perform on the old version to
update it to have the same contents as the new version.
To use this for the functionality initially described, to see how
much data was new, I simple ran through the operations, and for every
operation that copied from the old file verbatim, that had a 0-factor,
and every operation that inserted new text (distributed as part of the
patch, since it didn't occur in the old file) had a 1-factor. All
characters was given this factory, which gave me basically a long list
of 0's and 1's.
All I then had to do was to tally up the 0's and 1's. In your case,
with my implementation, a low number of 1's compared to 0's would mean
the files are very similar.
This implementation would also handle cases where the modified file
had inserted copies from the old file out of order, or even duplicates
(ie. you copy a part from the start of the file and paste it near the
bottom), since they would both be copies of the same original part from
the old file.
I experimented with weighing copies, so that the first copy counted
as 0, and subsequent copies of the same characters had progressively
higher factors, in order to give a copy/paste operation some
"new-factor", but I never finished it as the project was scrapped.
If you're interested, my diff/patch code is available from my Subversion repository.