[發(fā)明專利]Python源代碼文件相似性檢測方法有效
| 申請?zhí)枺?/td> | 201510014906.3 | 申請日: | 2015-01-09 |
| 公開(公告)號: | CN104598231B | 公開(公告)日: | 2018-07-20 |
| 發(fā)明(設(shè)計)人: | 董付國;孫玲玲;原達;馮磊 | 申請(專利權(quán))人: | 山東工商學(xué)院 |
| 主分類號: | G06F8/70 | 分類號: | G06F8/70 |
| 代理公司: | 暫無信息 | 代理人: | 暫無信息 |
| 地址: | 264005 山東*** | 國省代碼: | 山東;37 |
| 權(quán)利要求書: | 查看更多 | 說明書: | 查看更多 |
| 摘要: | |||
| 搜索關(guān)鍵詞: | python 源代碼 文件 相似性 檢測 方法 | ||
1.一種Python源代碼文件相似性檢測方法,其特征在于,包括以下步驟:
S1、獲取用戶輸入的參數(shù)類型;
S2、若判斷出所述用戶輸入的參數(shù)類型為一個Python源文件,則應(yīng)用算法A檢測所述Python源文件內(nèi)代碼之間的相似性;
S3、若判斷出所述用戶輸入的參數(shù)類型為一個包含Python源文件的文件夾,則應(yīng)用算法B檢測所述文件夾中所有Python源文件之間的相似性
S4、若判斷出所述用戶輸入的參數(shù)類型為一個目標(biāo)Python源文件和一個包含Python源文件的目標(biāo)文件夾,則應(yīng)用算法C檢測所述目標(biāo)Python源文件與所述目標(biāo)文件夾中所有Python源文件之間的相似性;
其中,用來檢測同一個Python源文件內(nèi)代碼之間相似性的算法A為:
A1、將用戶輸入的所述Python源文件中的所有行讀入列表;對所有讀入內(nèi)容進行預(yù)處理,刪除讀入內(nèi)容中所有多余的空格、每行兩端的空格以及行尾的換行符;
所述多余的空格即2個相鄰標(biāo)識符或運算符之間最多只保留一個空格,其他空格都是多余的空格;
A2、從0開始依次為列表中每個元素標(biāo)號,令index1=0;進行步驟A3-A9;
A3、如果當(dāng)前行被判斷為注釋行,則跳過從當(dāng)前行開始的所有連續(xù)注釋行;所述當(dāng)前行為標(biāo)號index1所標(biāo)識的行;
A4、如果當(dāng)前行已被判斷為相似行,則跳過該行開始的所有連續(xù)相似行;將當(dāng)前行與該當(dāng)前行之前的代碼行進行比較,如果符合相似性檢測標(biāo)準(zhǔn)則判斷當(dāng)前行為相似行;通過查詢Result字典獲取信息,實現(xiàn)快速判斷;
A5、遍歷列表中index1之后的剩余元素,令index2=index1+1,進行步驟A6-A8;
A6、如果當(dāng)前行被判斷為注釋行,則跳過從當(dāng)前行開始的所有連續(xù)注釋行;此處的當(dāng)前行為標(biāo)號index2所標(biāo)識的行;
A7、如果當(dāng)前行已被判斷為相似行,則跳過該行開始的所有連續(xù)相似行;
A8、對比分別以標(biāo)號index1和標(biāo)號index2開始的若干連續(xù)行的相似性,如果符合相似性檢測標(biāo)準(zhǔn),則將相似性結(jié)果更新到Result字典,并將index2增加符合相似性檢測標(biāo)準(zhǔn)的連續(xù)行的步長;否則將index2增加1行;
當(dāng)index2小于等于列表中最后一個元素編號時,繼續(xù)進行步驟A6-A8;
A9、讀取Result字典,獲取index1行的最大相似跨度,并將index1增加最大相似跨度的步長;若當(dāng)前行無相似行,則將index1增加1;
在步驟A9中重置index1的值后,當(dāng)index1小于等于列表中最后一個元素編號時,繼續(xù)循環(huán)進行步驟A3-A9;
用來檢測同一個文件夾中所有Python源文件之間相似性的算法B為:
B1、將所述用戶輸入的文件夾中所有Python源文件內(nèi)容讀入至列表allFiles,列表allFiles的每個元素是一個列表,每個列表中的第0個元素為文件名,第1個元素是包含該文件的所有代碼行;同時對讀取的所有內(nèi)容進行預(yù)處理,刪除讀取的所有內(nèi)容中的所有多余的空格、每行兩端的空格以及行尾的換行符;
B2、從0開始,依次為列表allFiles中各個列表元素標(biāo)號,令index0=0;進行步驟B3-B13;
B3、從0開始依次為標(biāo)號為index0的列表中的元素標(biāo)號,令index1=0;進行步驟B4-B12;
B4、如果當(dāng)前行已被判斷為相似行,則跳過該行開始的所有連續(xù)相似行;
B5、如果當(dāng)前行被判斷為注釋行,則跳過從當(dāng)前行開始的所有連續(xù)注釋行;
B6、選擇標(biāo)號為index3的列表,其中,index3=index0+1;進行步驟B7-B11;
B7、從0開始依次為標(biāo)號為index3的列表中的元素標(biāo)號,令index2=0;進行步驟B8-B10;
B8、如果當(dāng)前行已被判斷為相似行,則跳過該行開始的所有連續(xù)相似行;
B9、如果當(dāng)前行被判斷為注釋行,則跳過從當(dāng)前行開始的所有連續(xù)注釋行;
B10、對比以index1和index2開始的若干連續(xù)行相似性,如果符合相似性檢測標(biāo)準(zhǔn),則更新Result字典,并將index2增加符合相似性檢測標(biāo)準(zhǔn)的連續(xù)行的步長;否則將index2增加1行;當(dāng)index2小于等于編號為index3的列表最后一個元素編號時,繼續(xù)進行步驟B8-B10;
B11、將index3增加1,當(dāng)index3小于等于allFiles列表中最后一個元素編號時,繼續(xù)進行步驟B7-B11;
B12、讀取Result字典,獲取index1行的最大相似跨度,并將index1增加最大相似跨度的步長;若當(dāng)前行無相似行,則將index1增加1;當(dāng)index1小于等于index0的列表中的最后一個元素編號時,進行步驟B4-B12;
B13、將index0增加1;當(dāng)index0小于等于allFiles列表中最后一個元素編號時,循環(huán)進行步驟B3-B13;
所述目標(biāo)Python源文件與所述目標(biāo)文件夾中所有Python源文件之間相似性的算法C為:
C1、將所述用戶輸入的目標(biāo)文件夾中所有Python源文件內(nèi)容讀入至目標(biāo)列表allFiles,目標(biāo)列表allFiles的每個元素是一個列表,該列表的第0個元素為文件名,第1個元素是包含該文件的所有代碼行;同時將所述用戶輸入的目標(biāo)Python源文件內(nèi)容讀入至目標(biāo)列表currentFile;對所有讀入內(nèi)容進行預(yù)處理,刪除文件中所有多余的空格、每行兩端的空格以及行尾的換行符;
C2、從0開始依次為目標(biāo)列表currentFile中的元素標(biāo)號,令index1=0;進行步驟C3-C9;
C3、如果當(dāng)前行被判斷為注釋行,則跳過從當(dāng)前行開始的所有連續(xù)注釋行;
C4、從0開始,依次為列表allFiles中各個列表標(biāo)號,令index3=0;進行步驟C5-C8;
C5、從0開始依次為標(biāo)號為index3的列表中的元素標(biāo)號,令index2=0;進行步驟C6-C7;
C6、如果當(dāng)前行被判斷為注釋行,則跳過從當(dāng)前行開始的所有連續(xù)注釋行;
C7、對比以index1和index2開始的若干連續(xù)行相似性,如果符合相似性檢測標(biāo)準(zhǔn),則更新Result字典,并將index2增加符合相似性檢測標(biāo)準(zhǔn)的連續(xù)行的步長;否則index2增加1;若index3的列表中的元素還未檢測完,則繼續(xù)進行步驟C6-C7;
C8、將index3增加1,當(dāng)index3小于等于allFiles列表中最后一個元素編號時,循環(huán)進行步驟C5-C8;
C9、讀取Result字典,獲取index1行的最大相似跨度,并將index1增加最大相似跨度的步長;若當(dāng)前行無相似行,則將index1增加1;
在步驟C9中重置index1的值后,當(dāng)index1小于等于currentFile列表中最后一個元素編號時,繼續(xù)循環(huán)進行步驟C3-C9;
其中,所述相似性檢測標(biāo)準(zhǔn)為:要求完全相等,則直接將分別以index1和index2開始的若干連續(xù)代碼行進行比較是否精確相等,若精確相等則認為符合相似性檢測標(biāo)準(zhǔn)標(biāo)準(zhǔn),否則認為不符合;
或者,所述相似性檢測標(biāo)準(zhǔn)為:要求兩段代碼中變量名和運算符具有一定重合度或相似性,則需要首先提取類名、函數(shù)名、變量名等標(biāo)識符以及運算符,并統(tǒng)計各自出現(xiàn)的頻率,將結(jié)果按標(biāo)識符出現(xiàn)頻率從高到低進行排序;如果標(biāo)識符與運算符名稱以及頻率分布達到預(yù)設(shè)標(biāo)準(zhǔn),則認為兩段代碼相似,符合相似性檢測標(biāo)準(zhǔn)標(biāo)準(zhǔn),否則認為不符合;
其中,提取出兩段代碼或兩個源文件中所有標(biāo)識符和運算符以后,分類并按出現(xiàn)頻率從高到低排序,如果兩段代碼中標(biāo)識符與運算符以及頻率分布具有較高相似性,即如果
同時,
則認為兩段代碼具有較高相似性。
該專利技術(shù)資料僅供研究查看技術(shù)是否侵權(quán)等信息,商用須獲得專利權(quán)人授權(quán)。該專利全部權(quán)利屬于山東工商學(xué)院,未經(jīng)山東工商學(xué)院許可,擅自商用是侵權(quán)行為。如果您想購買此專利、獲得商業(yè)授權(quán)和技術(shù)合作,請聯(lián)系【客服】
本文鏈接:http://www.szxzyx.cn/pat/books/201510014906.3/1.html,轉(zhuǎn)載請聲明來源鉆瓜專利網(wǎng)。
- 一種基于Python語言的網(wǎng)格系統(tǒng)實現(xiàn)方法
- 一種基于模塊鉤子的Python字節(jié)碼文件保護方法
- 一種通過加密Python明文源碼token的知識產(chǎn)權(quán)保護系統(tǒng)
- 一種創(chuàng)建Python沙盒環(huán)境的方法及電子設(shè)備
- 圖形化Python編程交互方法、系統(tǒng)及電子設(shè)備
- 一種基于Ambari實現(xiàn)Python組件管理的方法
- 一種基于Java自動調(diào)用Python腳本的方法
- Python與Scratch交互式編程方法及電子設(shè)備
- 一種 Python 源碼安全防護的實現(xiàn)方法及系統(tǒng)
- 一種生成python項目結(jié)構(gòu)圖的方法、系統(tǒng)及介質(zhì)
- 基于異類關(guān)系確定目標(biāo)相似性的方法和系統(tǒng)
- 相似性匹配系統(tǒng)和方法
- 相似性匹配系統(tǒng)和方法
- 興趣點預(yù)測和推薦中的用戶時空相似性度量方法
- 一種基于相似性和邏輯矩陣分解的miRNA?疾病關(guān)聯(lián)關(guān)系預(yù)測方法
- 一種結(jié)合二分網(wǎng)絡(luò)和文本的醫(yī)院科室相似性分析方法
- 一種基于相似性學(xué)習(xí)及其增強的細胞類型鑒定方法
- 確定企業(yè)屬性相似性、重名對象判定
- 獲取機構(gòu)技術(shù)相似性的方法及裝置
- 一種基于圖卷積神經(jīng)網(wǎng)絡(luò)的lncRNA-蛋白質(zhì)相互作用預(yù)測方法





