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/2
    else:
        distance_cop=distance/2+1
    for i in range(0,distance_cop):
        if a_low[i]==b_low[i]:
              continue
        else:
              return 0
              break
    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/2
    else:
        distance_cop=distance/2+1
    for i in range(0,distance_cop):
        if a_low[i]==b_low[i]:
              continue
        else:
              return 0
              break
    return 1

def GetKeyWordFreq(KeyWords,commits):
     WordFreqDic={}
     for i in KeyWords:
        WordFreqDic[i]=0
     for j in commite:
#         j.split()[0]
        for key in WordFreqDic.keys():
            if  WordCompare(j.split()[0],key)==1:
                 WordFreqDic[key]=WordFreqDic[key]+1
     return WordFreqDic

if __name__==‘__main__‘:
      print GetKeyWordFreq(KeyWords,commite)
#     print WordCompare(‘commited‘,‘commit‘)

结果如下:

/********************************

* 本文来自博客  “李博Garvin“

* 转载请标明出处:http://blog.csdn.net/buptgshengod

******************************************/

Ospaf项目-commits词频统计模块,布布扣,bubuko.com

时间: 2024-10-09 11:08:14

Ospaf项目-commits词频统计模块的相关文章

第一次个人项目【词频统计】——需求分析,代码规范,设计思路

需求分析 由于程序需要在Windows平台和Linux平台都能运行,因此对代码的可移植性有一定的要求 由于需要对文件夹进行遍历,因此数据量相对较大,需要选择合适的数据结构,在此项目中,树和哈希表都是可供选择的数据结构 由于对字符串的处理很多,因此需要选择一种合适的字符串表达方式,char* or string? 代码规范 核心要求:用代码做到"卒章显志"的作用,代码能说清楚的事情就不要用注释,注释仅提示思路或者注意事项.因此变量名和函数名的设置尤为关键,比如函数名isSamePhras

201671010444 词频统计软件项目报告

该项目实施过程主要包括以下7部分. 一.需求分析 1.程序需要读入至少一个词,可读入任意英文文本. 2.至少可以统计10万词及以上的文本. 3.用户可以同时查询多个单词的统计,并显示出其个数和柱状图. 4.用户可以筛选单词频数大于n的单词,进行降序显示其单词及其频数. 5.统计文本所以单词及其词频,并在文本文件中按字典序进行显示. 二.功能设计 1.基本功能:对输入的大于等于一个单词的英文, 实现其一个或多个单词的单词和词频统计并以柱状图的形式显示出来, 可以对多个单词进行条件查询并对其按降序或

ospaf-开源项目成熟度分析工具

1.概述 软件成熟度评估的最终目标是帮助软件的可持续发展,并为用户应用提供必要的技术参考.开放源代码软件成熟度评估也不例外.我们通过软件的成熟度评估,形成全面的涉及技术.应用.法律等层面的评价报告,帮助那些正在或潜在的开源软件使用者准确的了解软件的技术特性和应用特性,从而为他们选择适合自身需求的开源软件提供参考.同时报告中涉及的大量评测数据,为开源软件的开发者提供帮助,促进他们有效的改善软件在技术方面和使用方面的质量,使软件不断成熟和可持续的发展. 开放源代码软件由于开发模式和运作模式的独特性,

C语言实现词频统计——第二版

原需求 1.读取文件,文件内包可含英文字符,及常见标点,空格级换行符. 2.统计英文单词在本文件的出现次数 3.将统计结果排序 4.显示排序结果 新需求: 1.小文件输入. 为表明程序能跑 2.支持命令行输入英文作品的文件名 3. 支持命令行输入存储有英文作品文件的目录名,批量统计 4. 从控制台读入英文单篇作品,重定向输出 代码实现: 在原代码的基础上稍做了修改,使之可以批量读取文件夹下的所有文件,所以加了一个mode来判断是单个文件输入还是文件夹输入,来不及整理程序,所以现在程序有点丑.这次

每周例行报告——第三周

<待完善> 项目:词频统计——单元测试  项目类型:个人项目 项目完成情况:已完成 项目日期:2016.9.26 项目改进:2016.9.27 C类别 C内容 S开始时间 E结束时间 I间隔 T净时间 P预计时间 分析 设计  10:20  10:30  0  10  20 学习 查阅资料  10:30  11:00  10  20  20 测试 练习Junit  13:20  15:00  10  90  180 编码 实现  15:30  17:00  0  90  120   改进  1

软件工程管理——第一次作业

这是软件工程管理课第一次作业,也是我的第一篇随笔. 这篇随笔分为四个部分:1.自我介绍. 2.对这门课的期待. 3.第一周工作统计. 4.第一个小项目(词频统计与四则运算选其一). 一.自我介绍        我叫夏一鸣,是东北师范大学计算机科学与信息技术学院,计算机应用技术专业的研一学生.本科也是东北师大的,专业是计算机科学与技术.我来自湖北咸宁,是一个南方小伙,为人还算随和乐观,希望老师和同学们多多关照. 二.对这门课的期待        我想,大家之所以选了这门课,当然初衷都应该是想学到一

每周进度及工作量统计——2016.10.31-2016.11.09

项目:连连看游戏 项目类型:四人小组项目 小组名称:天天向上 小组成员:王森.张政,张金生,栾骄阳 项目改进:正在更新,已进入beta阶段 项目预期时间:2016.9.10-2016.11.24 项目:四则运算出题程序--GUI支持和改进 项目类型:结对项目 项目成员:张金生    张政 项目完成情况:已完成 项目变更:已完结 项目:词频统计--web支持 项目类型:个人项目 项目完成情况:已完成 项目改进:已完结 周进度: 代码行累计  0 随笔字数  0 知识点           代码行累

第二周进度及工作量统计

项目:词频统计修改 项目类型:个人项目 项目完成情况:已完成 项目改进:第二次改进 项目日期:2016.9.14----2.16.9.14 C C S E I T 分析 需求,设计 15:20 15:30 0 10 编码 实现 15:30 16:20 0 50 文档 程序说明,随笔 23:40 0:05 0 25 讨论 程序改进 -- -- -- -- 周进度: 代码行累计 74 随笔字数 1998 知识点 C语言   命令行 累计进度图:

每周工作量及时间统计

项目:词频统计 时间分配 准备方式 开始时间 结束时间 耽误时间及原因 学习用时 查阅资料 上网查代码,没有什么收获 19:00 23:30 1小时  3个半小时 编码 代码 8:30 14:30 40分钟 8个小时 重新编码 编码 8:00 13:20 10 5个小时 准备下一个程序写报告 写报告 13:40 14:20 20 2个小时零20分钟 项目:小学生四则运算 项目类型:结对项目 项目日期:2016.9.6 时间分配 准备方式 开始时间 结束时间 耽误时间及原因 学习用时 查阅资料 上