本技術(shù)涉及計算機(jī),具體涉及一種基于bilstm-crf的代碼格式化方法及系統(tǒng)。
背景技術(shù):
1、隨著軟件規(guī)模的不斷增長,代碼編寫人員在編寫軟件代碼時可能有意或無意的,在不影響程序功能的情況下打亂程序的代碼結(jié)構(gòu),這使得源代碼的可讀性大大降低,進(jìn)而影響源代碼后續(xù)的開發(fā)維護(hù)和迭代更新。
2、現(xiàn)有技術(shù)中通常使用集成在集成開發(fā)環(huán)境(ide)中的格式化工具以對代碼進(jìn)行格式化,但集成在ide環(huán)境中的格式化工具僅能格式化常見的語言代碼,如python、java、c++等,但無法對小眾語言代碼進(jìn)行格式化,通用性差。同時由于格式化工具依賴于ide環(huán)境,當(dāng)代碼體量增加時,ide運行緩慢,進(jìn)而影響了格式化工具的效率。
3、申請內(nèi)容
4、本技術(shù)提供了一種基于bilstm-crf的代碼格式化方法及系統(tǒng),以能夠快速準(zhǔn)確地對各種語言代碼進(jìn)行格式化,且通用性強(qiáng)。
5、第一方面,本技術(shù)提供了一種基于bilstm-crf的代碼格式化方法,包括:
6、獲取待格式化的源代碼,并對所述源代碼進(jìn)行預(yù)處理,得到預(yù)處理結(jié)果;
7、對所述預(yù)處理結(jié)果進(jìn)行分割,得到若干個單元;
8、將若干個所述單元輸入bilstm-crf模型,得到各所述單元后面對應(yīng)標(biāo)簽的分值,并基于所述分值確定各所述單元后面對應(yīng)的預(yù)測標(biāo)簽;其中,所述標(biāo)簽包括空格標(biāo)簽、換行符標(biāo)簽和縮進(jìn)標(biāo)簽;
9、基于各所述單元后面對應(yīng)的預(yù)測標(biāo)簽,對所述源代碼進(jìn)行格式化。
10、本技術(shù)實施例通過對源代碼進(jìn)行預(yù)處理,可以刪除源代碼中的空行跟多余的空格,方便后續(xù)代碼分割,減少后續(xù)bilstm-crf模型輸入,進(jìn)而提高bilstm-crf模型預(yù)測的準(zhǔn)確性;通過對預(yù)處理結(jié)果進(jìn)行分割,可以將代碼中的每個單元分割出來,方便后續(xù)bilstm-crf模型快速對單元后面標(biāo)簽進(jìn)行準(zhǔn)確預(yù)測;通過bilstm-crf模型可以計算出各所述單元后面對應(yīng)標(biāo)簽的分值,以準(zhǔn)確預(yù)測各所述單元后面對應(yīng)的預(yù)測標(biāo)簽,基于各所述單元后面對應(yīng)的預(yù)測標(biāo)簽,對所述源代碼進(jìn)行格式化,能夠快速準(zhǔn)確地對各種語言代碼進(jìn)行格式化,且通用性強(qiáng)。
11、進(jìn)一步的,所述對所述源代碼進(jìn)行預(yù)處理,得到預(yù)處理結(jié)果,具體為:
12、遍歷所述源代碼,刪除所述源代碼中的所有空行;
13、在所述源代碼中的每一行代碼開頭添加起始標(biāo)志;
14、將所述源代碼中的多個連續(xù)空格替換成單個空格。
15、這樣通過對源代碼進(jìn)行預(yù)處理,可以刪除源代碼中的空行跟多余的空格,方便后續(xù)代碼分割,減少后續(xù)bilstm-crf模型輸入,進(jìn)而提高bilstm-crf模型預(yù)測的準(zhǔn)確性。
16、進(jìn)一步的,所述對所述預(yù)處理結(jié)果進(jìn)行分割,得到若干個單元,具體為:
17、遍歷所述預(yù)處理結(jié)果,檢測出所述預(yù)處理結(jié)果中的空格或換行符;
18、基于所述空格或所述換行符對所述預(yù)處理結(jié)果進(jìn)行分割,得到若干個單元。
19、這樣通過對預(yù)處理結(jié)果進(jìn)行分割,可以將代碼中的每個單元分割出來,方便后續(xù)bilstm-crf模型快速對單元后面標(biāo)簽進(jìn)行準(zhǔn)確預(yù)測。
20、進(jìn)一步的,所述基于各所述單元后面對應(yīng)的預(yù)測標(biāo)簽,對所述源代碼進(jìn)行格式化,具體為:
21、將所述源代碼中的各所述單元后面的所述空格或所述換行符替換成各所述單元后面對應(yīng)的預(yù)測標(biāo)簽;
22、刪除每一行代碼開頭的所述起始標(biāo)志。
23、這樣通過將每一個單元后面的空格或換行符替換成預(yù)測標(biāo)簽,能夠快速準(zhǔn)確地對各種語言代碼進(jìn)行格式化,且通用性強(qiáng)。
24、進(jìn)一步的,所述bilstm-crf模型的訓(xùn)練過程,具體為:
25、獲取目標(biāo)格式代碼,并對所述目標(biāo)格式代碼進(jìn)行標(biāo)注和分割,得到若干個目標(biāo)單元以及所述目標(biāo)單元后面的實際標(biāo)簽;
26、將若干個所述目標(biāo)單元輸入bge英文模型,得到各所述目標(biāo)單元對應(yīng)的詞向量;
27、將若干個所述目標(biāo)單元對應(yīng)的所述詞向量輸入所述bilstm-crf模型,得到各所述目標(biāo)單元對應(yīng)標(biāo)簽的分值,通過計算所述分值與所述實際標(biāo)簽的損失值,以基于所述損失值不斷優(yōu)化所述bilstm-crf模型。
28、這樣通過將目標(biāo)單元對應(yīng)的詞向量輸入bilstm-crf模型前向傳播計算出每個目標(biāo)單元對應(yīng)標(biāo)簽的分值,并通過計算所述分值與所述實際標(biāo)簽的損失值,以基于所述損失值不斷優(yōu)化所述bilstm-crf模型,從而提高bilstm-crf模型預(yù)測的準(zhǔn)確性。
29、第二方面,本技術(shù)提供一種基于bilstm-crf的代碼格式化系統(tǒng),包括:預(yù)處理模塊、分割模塊、預(yù)測模塊和格式化模塊;
30、所述預(yù)處理模塊,用于獲取待格式化的源代碼,并對所述源代碼進(jìn)行預(yù)處理,得到預(yù)處理結(jié)果;
31、所述分割模塊,用于對所述預(yù)處理結(jié)果進(jìn)行分割,得到若干個單元;
32、所述預(yù)測模塊,用于將若干個所述單元輸入bilstm-crf模型,得到各所述單元后面對應(yīng)標(biāo)簽的分值,并基于所述分值確定各所述單元后面對應(yīng)的預(yù)測標(biāo)簽;其中,所述標(biāo)簽包括空格標(biāo)簽、換行符標(biāo)簽和縮進(jìn)標(biāo)簽;
33、所述格式化模塊,用于基于各所述單元后面對應(yīng)的預(yù)測標(biāo)簽,對所述源代碼進(jìn)行格式化。
34、本技術(shù)實施例通過對源代碼進(jìn)行預(yù)處理,可以刪除源代碼中的空行跟多余的空格,方便后續(xù)代碼分割,減少后續(xù)bilstm-crf模型輸入,進(jìn)而提高bilstm-crf模型預(yù)測的準(zhǔn)確性;通過對預(yù)處理結(jié)果進(jìn)行分割,可以將代碼中的每個單元分割出來,方便后續(xù)bilstm-crf模型快速對單元后面標(biāo)簽進(jìn)行準(zhǔn)確預(yù)測;通過bilstm-crf模型可以計算出各所述單元后面對應(yīng)標(biāo)簽的分值,以準(zhǔn)確預(yù)測各所述單元后面對應(yīng)的預(yù)測標(biāo)簽,基于各所述單元后面對應(yīng)的預(yù)測標(biāo)簽,對所述源代碼進(jìn)行格式化,能夠快速準(zhǔn)確地對各種語言代碼進(jìn)行格式化,且通用性強(qiáng)。
35、進(jìn)一步的,所述預(yù)處理模塊包括:第一刪除單元、添加單元和第一替換單元;
36、所述第一刪除單元,用于遍歷所述源代碼,刪除所述源代碼中的所有空行;
37、所述添加單元,用于在所述源代碼中的每一行代碼開頭添加起始標(biāo)志;
38、所述第一替換單元,用于將所述源代碼中的多個連續(xù)空格替換成單個空格。
39、進(jìn)一步的,所述分割模塊包括:檢測單元和分割單元;
40、所述檢測單元,用于遍歷所述預(yù)處理結(jié)果,檢測出所述預(yù)處理結(jié)果中的空格或換行符;
41、所述分割單元,用于基于所述空格或所述換行符對所述預(yù)處理結(jié)果進(jìn)行分割,得到若干個單元。
42、進(jìn)一步的,所述格式化模塊包括:第二替換單元和第二刪除單元;
43、所述第二替換單元,用于將所述源代碼中的各所述單元后面的所述空格或所述換行符替換成各所述單元后面對應(yīng)的預(yù)測標(biāo)簽;
44、所述第二刪除單元,用于刪除每一行代碼開頭的所述起始標(biāo)志。
45、進(jìn)一步的,所述bilstm-crf模型的訓(xùn)練過程具體為:
46、獲取目標(biāo)格式代碼,并對所述目標(biāo)格式代碼進(jìn)行標(biāo)注和分割,得到若干個目標(biāo)單元以及所述目標(biāo)單元后面的實際標(biāo)簽;
47、將若干個所述目標(biāo)單元輸入bge英文模型,得到各所述目標(biāo)單元對應(yīng)的詞向量;
48、將若干個所述目標(biāo)單元對應(yīng)的所述詞向量輸入所述bilstm-crf模型,得到各所述目標(biāo)單元對應(yīng)標(biāo)簽的分值,通過計算所述分值與所述實際標(biāo)簽的損失值,以基于所述損失值不斷優(yōu)化所述bilstm-crf模型。
技術(shù)實現(xiàn)思路