Ospaf项目-commits词频统计模块
生活随笔
收集整理的這篇文章主要介紹了
Ospaf项目-commits词频统计模块
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
1.背景
最近在搞得ospaf項目(可以移步ospaf中期報告來了解),對于commits數據進行特征提取的時候發現,因為開源項目的commits的特點有以下兩個主要放面:1.動詞往往出現在第一個字,例如add、revert之類的。2.動詞相對固定,主要也就是那幾種,add、revert、update、merge、remove之類的。 所以要做的工作就比較清晰了。 步驟1.首先是提取每個commit第一個字母 步驟2.因為每個項目有很多contributor,所以大家習慣的寫法也不一樣,如add,有的人會寫成Add、added、Added之類的。2.算法與代碼
? ? ? ? 1.同型單詞的識別
針對與上述的步驟2,也就是同形單詞的識別問題。我想到了一個算法(大家有更好的請留言指教),比如單詞A和B。首先將A和B都轉換成小寫a、b,然后找到a和b中較短的單詞,這個較短的單詞長k=min(len(a,b)),如果k是偶數取distance=k/2,如果k是奇數distance=k/2+1。接著將a和b按字母分割,如果a和b的前distance個字母相同,說明A和B同型。這個算法雖然不夠精準,但是在ospaf項目是夠用了。代碼如下,如果a=b,返回1。否則返回0 def WordCompare(a,b):a_low=a.lower()b_low=b.lower()a_length=len(a_low)b_length=len(b_low)distance=min(a_length,b_length) if distance%2 ==0:distance_cop=distance/2else:distance_cop=distance/2+1 for i in range(0,distance_cop):if a_low[i]==b_low[i]:continueelse:return 0break return 1? ? ? ? 2.記錄詞頻
首先有一個單詞庫KeyWords負責統計需要記錄的單詞,commit是樣例: ''' compare the different word @author: Garvin ''' KeyWords=['add','remove','update'] commite=['Added testh ','removed fae gew','update cewf','add cek','get tawge']def WordCompare(a,b):a_low=a.lower()b_low=b.lower()a_length=len(a_low)b_length=len(b_low)distance=min(a_length,b_length) if distance%2 ==0:distance_cop=distance/2else:distance_cop=distance/2+1 for i in range(0,distance_cop):if a_low[i]==b_low[i]:continueelse:return 0break return 1def GetKeyWordFreq(KeyWords,commits):WordFreqDic={}for i in KeyWords:WordFreqDic[i]=0for j in commite: # j.split()[0] for key in WordFreqDic.keys():if WordCompare(j.split()[0],key)==1:WordFreqDic[key]=WordFreqDic[key]+1return WordFreqDicif __name__=='__main__':print GetKeyWordFreq(KeyWords,commite) # print WordCompare('commited','commit')結果如下:
/********************************
* 本文來自博客 ?“李博Garvin“
* 轉載請標明出處:http://blog.csdn.net/buptgshengod
******************************************/
總結
以上是生活随笔為你收集整理的Ospaf项目-commits词频统计模块的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Ohloh调研报告
- 下一篇: 【git学习一】git的原理