欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

python使用difflib實(shí)現(xiàn)自動(dòng)查重

 更新時(shí)間:2023年11月01日 11:21:18   作者:AI小智  
Python中有許多現(xiàn)成的庫(kù)和工具,可以方便地實(shí)現(xiàn)自動(dòng)查重的功能,其中,difflib庫(kù)就是一個(gè)專門用于比較文件和字符串差異的庫(kù),下面我們就來(lái)看看如何利用difflib實(shí)現(xiàn)自動(dòng)查重吧

什么是自動(dòng)查重

自動(dòng)查重是指使用計(jì)算機(jī)程序來(lái)比較兩個(gè)或多個(gè)文件的內(nèi)容,判斷它們之間是否存在相似或相同的部分,從而檢測(cè)出抄襲或重復(fù)的情況。自動(dòng)查重可以用于學(xué)術(shù)論文、代碼、文本等各種類型的文件,幫助提高原創(chuàng)性和質(zhì)量。

為什么要使用Python進(jìn)行自動(dòng)查重

Python是一種廣泛使用的編程語(yǔ)言,具有簡(jiǎn)潔、易讀、靈活和強(qiáng)大的特點(diǎn)。Python中有許多現(xiàn)成的庫(kù)和工具,可以方便地實(shí)現(xiàn)自動(dòng)查重的功能。其中,difflib庫(kù)就是一個(gè)專門用于比較文件和字符串差異的庫(kù),它提供了多種方法和API,可以根據(jù)不同的需求和場(chǎng)景進(jìn)行自動(dòng)查重。

如何使用Python中的difflib庫(kù)進(jìn)行自動(dòng)查重

pip install cdifflib

difflib庫(kù)中最常用的兩個(gè)類是SequenceMatcherDiffer,它們都可以用來(lái)比較兩個(gè)序列(如字符串、列表、元組等)之間的差異,并生成相應(yīng)的結(jié)果。

SequenceMatcher

SequenceMatcher類可以用來(lái)計(jì)算兩個(gè)序列之間的相似度,以及找出它們最長(zhǎng)的匹配子序列。它有以下幾個(gè)主要的方法:

__init__(a, b, isjunk=None):創(chuàng)建一個(gè)SequenceMatcher對(duì)象,參數(shù)ab是要比較的兩個(gè)序列,參數(shù)isjunk是一個(gè)可選的函數(shù),用于指定哪些元素應(yīng)該被忽略。

ratio():返回兩個(gè)序列之間的相似度,范圍在0到1之間,越接近1表示越相似。

quick_ratio():返回兩個(gè)序列之間的快速估計(jì)相似度,比ratio()方法更快但可能不太準(zhǔn)確。

real_quick_ratio():返回兩個(gè)序列之間的非常快速估計(jì)相似度,比quick_ratio()方法更快但可能更不準(zhǔn)確。

get_matching_blocks():返回一個(gè)列表,包含了兩個(gè)序列中最長(zhǎng)匹配子序列的信息,每個(gè)元素是一個(gè)元組(i, j, n),表示第一個(gè)序列中從索引i開始長(zhǎng)度為n的子序列與第二個(gè)序列中從索引j開始長(zhǎng)度為n的子序列完全匹配。

get_opcodes():返回一個(gè)列表,包含了將第一個(gè)序列轉(zhuǎn)換為第二個(gè)序列所需的操作,每個(gè)元素是一個(gè)元組(tag, i1, i2, j1, j2),表示對(duì)第一個(gè)序列中從索引i1到索引i2(不包括)的子序列執(zhí)行操作tag后,它將與第二個(gè)序列中從索引j1到索引j2(不包括)的子序列相等。操作有以下幾種:

  • 'equal': 表示兩個(gè)子序列相等,無(wú)需修改。
  • 'replace': 表示需要將第一個(gè)子序列替換為第二個(gè)子序列。
  • 'delete': 表示需要?jiǎng)h除第一個(gè)子序列。
  • 'insert': 表示需要在第一個(gè)子序列后插入第二個(gè)子序列。
  • 'noop': 表示無(wú)操作。

Differ

Differ類可以用來(lái)生成兩個(gè)序列之間的差異報(bào)告,以便于人類閱讀和理解。它有以下幾個(gè)主要的方法:

__init__(linejunk=None, charjunk=None):創(chuàng)建一個(gè)Differ對(duì)象,參數(shù)linejunkcharjunk是兩個(gè)可選的函數(shù),用于指定哪些行或字符應(yīng)該被忽略。

compare(a, b):返回一個(gè)生成器,逐行比較兩個(gè)序列ab,并生成差異報(bào)告。每一行的開頭有一個(gè)標(biāo)記,表示該行的狀態(tài),有以下幾種:

  • ' ': 表示該行在兩個(gè)序列中都存在,無(wú)差異。
  • '-': 表示該行只在第一個(gè)序列中存在,被刪除。
  • '+': 表示該行只在第二個(gè)序列中存在,被添加。
  • '?': 表示該行在兩個(gè)序列中有不同的字符,需要進(jìn)一步比較。

一個(gè)簡(jiǎn)單的例子

為了演示如何使用difflib庫(kù)進(jìn)行自動(dòng)查重,我們可以用它來(lái)比較兩篇文章的內(nèi)容,并輸出相似度和差異報(bào)告。假設(shè)我們有以下兩篇文章:

文章A:

Python是一種高級(jí)編程語(yǔ)言,它的設(shè)計(jì)哲學(xué)是“優(yōu)雅”、“明確”、“簡(jiǎn)單”。Python擁有動(dòng)態(tài)類型系統(tǒng)和垃圾回收功能,能夠自動(dòng)管理內(nèi)存使用,并且支持多種編程范式,包括面向?qū)ο蟆⒚钍?、函?shù)式和過(guò)程式編程。Python的語(yǔ)法簡(jiǎn)潔而清晰,使用縮進(jìn)來(lái)表示代碼塊,從而減少了代碼的冗余。Python解釋器本身幾乎可以在所有的操作系統(tǒng)中運(yùn)行。Python的標(biāo)準(zhǔn)庫(kù)提供了豐富的功能,包括圖形界面、數(shù)據(jù)庫(kù)、網(wǎng)絡(luò)、多線程、正則表達(dá)式等。Python還有許多第三方庫(kù)和框架,可以用于科學(xué)計(jì)算、數(shù)據(jù)分析、機(jī)器學(xué)習(xí)、Web開發(fā)等領(lǐng)域。Python是一種通用的編程語(yǔ)言,適用于各種應(yīng)用場(chǎng)景。

文章B:

Python是一門通用的高級(jí)編程語(yǔ)言。它具有簡(jiǎn)單明確的語(yǔ)法,使用縮進(jìn)來(lái)組織代碼結(jié)構(gòu)。Python支持多種編程范式,如面向?qū)ο?、函?shù)式和過(guò)程式編程。Python具有動(dòng)態(tài)類型系統(tǒng)和自動(dòng)內(nèi)存管理功能,可以適應(yīng)不同的需求和環(huán)境。Python可以在多種操作系統(tǒng)中運(yùn)行,并且擁有龐大的標(biāo)準(zhǔn)庫(kù)和第三方庫(kù),涵蓋了圖形界面、數(shù)據(jù)庫(kù)、網(wǎng)絡(luò)、多線程、正則表達(dá)式等各種功能。Python還可以用于科學(xué)計(jì)算、數(shù)據(jù)分析、機(jī)器學(xué)習(xí)、Web開發(fā)等領(lǐng)域。Python是一門優(yōu)雅而強(qiáng)大的編程語(yǔ)言,適合各種應(yīng)用場(chǎng)景。

我們可以將這兩篇文章保存為兩個(gè)文本文件,分別命名為article_a.txtarticle_b.txt,然后使用以下代碼來(lái)進(jìn)行自動(dòng)查重:

# 導(dǎo)入difflib庫(kù)
import difflib

# 打開并讀取兩個(gè)文本文件
with open('article_a.txt', 'r', encoding='utf-8') as f:
    a = f.read()
with open('article_b.txt', 'r', encoding='utf-8') as f:
    b = f.read()

# 創(chuàng)建一個(gè)SequenceMatcher對(duì)象
sm = difflib.SequenceMatcher(None, a, b)

# 計(jì)算并打印兩篇文章的相似度
similarity = sm.ratio()
print(f'相似度:{similarity:.2f}')

# 創(chuàng)建一個(gè)Differ對(duì)象
d = difflib.Differ()

# 比較并生成差異報(bào)告
diff = d.compare(a.splitlines(), b.splitlines())

# 打印差異報(bào)告
print('差異報(bào)告:') 
for line in diff: 
  print(line)

運(yùn)行結(jié)果如下圖:

總結(jié)

本教程介紹了如何使用Python中的difflib庫(kù)進(jìn)行自動(dòng)查重,主要介紹了SequenceMatcher和Differ兩個(gè)類的用法和API,以及一個(gè)簡(jiǎn)單的例子。通過(guò)使用difflib庫(kù),我們可以方便地比較兩個(gè)文件或字符串之間的相似度和差異,并生成可讀的結(jié)果。這對(duì)于檢測(cè)抄襲或重復(fù)的情況,提高原創(chuàng)性和質(zhì)量,有很大的幫助。

到此這篇關(guān)于python使用difflib實(shí)現(xiàn)自動(dòng)查重的文章就介紹到這了,更多相關(guān)python查重內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • python 中的int()函數(shù)怎么用

    python 中的int()函數(shù)怎么用

    int() 函數(shù)用于將一個(gè)字符串會(huì)數(shù)字轉(zhuǎn)換為整型。接下來(lái)通過(guò)本文給大家介紹python 中的int()函數(shù)的相關(guān)知識(shí),感興趣的朋友一起看看吧
    2017-10-10
  • python多進(jìn)程中的內(nèi)存復(fù)制(實(shí)例講解)

    python多進(jìn)程中的內(nèi)存復(fù)制(實(shí)例講解)

    下面小編就為大家分享一篇python多進(jìn)程中的內(nèi)存復(fù)制(實(shí)例講解),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2018-01-01
  • pip安裝Python庫(kù)時(shí)遇到的問(wèn)題及解決方法

    pip安裝Python庫(kù)時(shí)遇到的問(wèn)題及解決方法

    這篇文章主要介紹了pip安裝Python庫(kù)時(shí)遇到的問(wèn)題及解決方法,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下
    2017-11-11
  • python解析HTML并提取span標(biāo)簽中的文本

    python解析HTML并提取span標(biāo)簽中的文本

    在網(wǎng)頁(yè)開發(fā)和數(shù)據(jù)抓取過(guò)程中,我們經(jīng)常需要從HTML頁(yè)面中提取信息,尤其是span元素中的文本,span標(biāo)簽是一個(gè)行內(nèi)元素,通常用于包裝一小段文本或其他元素,在Python中,我們可以通過(guò)使用BeautifulSoup或lxml等庫(kù)來(lái)解析HTML并提取span標(biāo)簽中的文本
    2024-12-12
  • Python驅(qū)動(dòng)ansys執(zhí)行apdl文件的代碼示例

    Python驅(qū)動(dòng)ansys執(zhí)行apdl文件的代碼示例

    在Python中驅(qū)動(dòng)ANSYS執(zhí)行APDL(ANSYS Parametric Design Language)文件,可以通過(guò)使用subprocess模塊來(lái)調(diào)用ANSYS的可執(zhí)行文件,并傳遞APDL文件作為參數(shù),本文給大家介紹了一個(gè)詳細(xì)的代碼示例,需要的朋友可以參考下
    2024-11-11
  • python庫(kù)安裝與使用示例詳解

    python庫(kù)安裝與使用示例詳解

    這篇文章主要介紹了Python中的生成器函數(shù)yield、openslide庫(kù)、ASAP庫(kù)、concurrent.futures.ThreadPoolExecutor、xml.etree.ElementTree庫(kù)、skimage庫(kù)和PIL.Image庫(kù)的相關(guān)知識(shí),感興趣的朋友一起看看吧
    2025-02-02
  • 一文理解Python命名機(jī)制

    一文理解Python命名機(jī)制

    這篇文章主要介紹的是Python的命名機(jī)制,文章回先提出問(wèn)題,然后根據(jù)問(wèn)題逐步解析,感興趣的小伙伴可以參考一下,希望對(duì)你有所幫助
    2021-10-10
  • 基于Python實(shí)現(xiàn)一鍵獲取電腦瀏覽器的賬號(hào)密碼

    基于Python實(shí)現(xiàn)一鍵獲取電腦瀏覽器的賬號(hào)密碼

    發(fā)現(xiàn)很多人在學(xué)校圖書館喜歡用電腦占座,而且出去的時(shí)候經(jīng)常不鎖屏,為了讓大家養(yǎng)成良好的習(xí)慣,本文將分享一個(gè)小程序,可以快速獲取你存儲(chǔ)在電腦瀏覽器中的所有賬號(hào)和密碼,感興趣的可以了解一下
    2022-05-05
  • python子線程退出及線程退出控制的代碼

    python子線程退出及線程退出控制的代碼

    這篇文章主要介紹了python子線程退出及線程退出控制的代碼,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2019-10-10
  • python的描述符(descriptor)、裝飾器(property)造成的一個(gè)無(wú)限遞歸問(wèn)題分享

    python的描述符(descriptor)、裝飾器(property)造成的一個(gè)無(wú)限遞歸問(wèn)題分享

    這篇文章主要介紹了python的描述符(descriptor)、裝飾器(property)造成的一個(gè)無(wú)限遞歸問(wèn)題分享,一個(gè)不太會(huì)遇到的問(wèn)題,需要的朋友可以參考下
    2014-07-07

最新評(píng)論