使用Python比較兩個文字檔案的相似度

2021-10-03 16:50:59 字數 2452 閱讀 7218

本文使用python對兩個文字檔案進行比較,目的是為比較學生的作業抄襲情況。由於總共有70名學生,兩兩比較工作量太大,所以寫了本程式。演算法的基本原理是對兩個檔案中的行每一行進行比較,統計內容相同的行數,然後與兩個檔案的最大行數的比值。

設 lines1 和 lines2 分別為兩個輸入檔案中的所有文字行。

count = 0

for line in range(len(files1)): # 對檔案1中的所有行進行遍歷

if lines2.count(line) > 0: # 檔案2中包括檔案1的行 line

count += 1 # count加1

# 結果為相同的行的個數與兩個檔案最大行的比值,當2個檔案長度相同,且每一行都相同時,取最大值。

result = count / max(len(lines1), len(lines2))

以下對學生的作業進行對比的計算的結果(作業保密,讀者可以使用其他文字檔案進行測試)

25和27的作業相似度為:73.77%

25和33的作業相似度為:77.05%

25和34的作業相似度為:88.52%

26和42的作業相似度為:98.21%

27和33的作業相似度為:89.83%

27和34的作業相似度為:76.27%

29和30的作業相似度為:73.17%

33和34的作業相似度為:80.70%

41和45的作業相似度為:97.22%

43和45的作業相似度為:72.22%

49和50的作業相似度為:85.29%

53和59的作業相似度為:91.67%

58和69的作業相似度為:92.59%

61和63的作業相似度為:72.73%

62和68的作業相似度為:80.00%

源程式只顯示了70%相似度以上的。顯然,這些同學的作業存在很大的抄襲嫌疑,經過檢視相似內容,確認他們都有抄襲情況。另外,經過進一步簡單分析,就可以發現作業抄襲學生的關係,如 25,27,33,34幾人可能抄的是同一人;29,30是同一人等。

# coding: utf-8

import os

defreadlines

(filepath)

: lines =

try:

with

open

(filepath,

'r', encoding =

'utf-8'

)as f:

lines = f.readlines(

)except exception:

with

open

(filepath,

'r', encoding =

'gbk'

)as f:

lines = f.readlines(

)return lines

defcompare

(file1, file2)

: lines1 = readlines(file1)

lines2 = readlines(file2)

count =0.

for line in lines1:

if lines2.count(line)

>0:

count +=

1return count /

max(

len(lines1)

,len

(lines2)

)

path =

"第二次作業"

# 輸入路徑,根據實際情況決定。

dirs = os.listdir(path)

files =

error_files =

forfile

in dirs:

file))

for i in

range

(len

(files)):

for j in

range

(i +1,

len(files)):

try:

degree = compare(files[i]

, files[j]

)if degree >

0.7:

print

("{}和{}的作業相似度為:"

.format

(files[i]

.split(

" ")[0

], files[j]

.split(

" ")[0

], degree)

.replace(

"第二次作業\\",""

))except exception as e:

if error_files.count(j)==0

:continue

使用shell比較兩個文字的差異

一般工作中會遇到比較兩個文字檔案的不同,類似於第二天新增資料 或者修改資料統計。我查閱資料查到一下兩種方法。說明 1 2 為要比較的兩個文字檔案 此處使用引數代替 1 grep f v f 1 2 sort uniq f 範本檔案 或 file 範本檔案 指定範本檔案,其內容含有乙個或多個範本樣式,...

python比較兩個list

自己寫的,耗時很長。當兩個list是100000級別長度的資料時,需要好幾分鐘 if jpg not in list2 paython自帶方法。速度很快 list3 list set3 初始化資料 lista zhangsan lisi wangwu listb zhangsan lisi zhao...

python 實現兩個文字檔案內容去重

實現兩個文字內容去重,輸出兩個文字不重複的結果 兩個測試文字內容如下 1.txt中內容為 123 4567 82.txt中內容為 123 4567 891011 1213 1415 分別讀取兩個文字的內容讀取1.txt的內容,具體實現如下 str1 file 1 open 1.txt r encod...