Ospaf项目-commits词频统计模块

简介: 1.背景         最近在搞得ospaf项目(可以移步ospaf中期报告来了解),对于commits数据进行特征提取的时候发现,因为开源项目的commits的特点有以下两个主要放面:1.动词往往出现在第一个字,例如add、revert之类的。2.动词相对固定,主要也就是那几种,add、revert、update、merge、remove之类的。         所以要做的工作就比较清

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

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







目录
相关文章
|
SQL 开发框架 .NET
分享53个ASP江湖论坛源码,总有一款适合您
分享53个ASP江湖论坛源码,总有一款适合您
|
JSON 安全 数据安全/隐私保护
Django之JWT库与SimpleJWT库的使用
使用Django框架时,可以选择jwt或simplejwt来增强其功能。这两个扩展提供了与JWT认证相关的功能,可以帮助实现安全而高效的用户认证和授权机制。通过使用它们,可以轻松地将JWT集成到Django应用程序中,并提供可靠的用户身份验证和权限管理功能。
675 1
|
Java 应用服务中间件 Maven
Springboot项目将jar包修改为war包操作步骤
Springboot项目将jar包修改为war包操作步骤 文章目录 Springboot项目将jar包修改为war包操作步骤 1.修改jar为war包形式 2.去除Spring Boot内置Tomcat 3.增加Tomcat启动插件 4.使用maven编译程序
959 0
Springboot项目将jar包修改为war包操作步骤
|
9月前
|
机器学习/深度学习 人工智能 自然语言处理
《揭秘AI语音助手:从“听”到“说”的智能之旅》
在数字化时代,AI语音助手如Siri、Alexa、小爱同学等成为生活中的得力伙伴。它们通过自动语音识别(ASR)将语音转换为文本,利用自然语言处理(NLP)理解语义并生成回应,再通过文本到语音转换(TTS)输出自然语音。ASR捕捉、预处理和分析语音信号;NLP解析文本、理解意图;TTS合成流畅语音。这三项技术协同工作,使语音助手能听懂、理解并回应用户,为人机交互带来便利与创新。
1524 1
|
11月前
|
搜索推荐 数据挖掘 数据处理
《探索 Faiss:原理与应用解析》
在数据驱动的时代,高效处理和搜索海量数据至关重要。Faiss 是一个专为大规模相似性搜索和聚类设计的库,擅长处理高维向量数据,广泛应用于文本处理、图像识别等领域。本文深入解析 Faiss 的原理、使用方法及其在图像检索、文本相似性比较和推荐系统中的实际应用,帮助读者掌握这一强大工具,提升数据处理能力。
545 2
|
12月前
|
负载均衡 网络协议 算法
OSPF 中的负载均衡:优化网络流量分布
OSPF 中的负载均衡:优化网络流量分布
620 0
|
存储 Swift 索引
带你读《存储漫谈:Ceph原理与实践》——2.1 数据寻址方案
带你读《存储漫谈:Ceph原理与实践》——2.1 数据寻址方案
|
自然语言处理 安全 API
【网安AIGC专题10.11】①代码大模型的应用:检测、修复②其安全性研究:模型窃取攻击(API和网页接口) 数据窃取攻击 对抗攻击(用途:漏洞隐藏) 后门攻击(加触发器+标签翻转)(上)
【网安AIGC专题10.11】①代码大模型的应用:检测、修复②其安全性研究:模型窃取攻击(API和网页接口) 数据窃取攻击 对抗攻击(用途:漏洞隐藏) 后门攻击(加触发器+标签翻转)
639 0
|
NoSQL Java 测试技术
破防了!阿里用17个真实企业级项目阐述Java系统分析与架构设计
最近,有小伙伴问我,有没有能够在短时间内快速增长软件项目的系统分析与架构设计能力的方法。 想了很久还是决定把这份用17个真实企业级项目阐述的《Java系统分析与架构设计》手册分享出来。 这份手册按照一个完整的软件项目周期: 立项→业务需求→软件需求分析→架构设计→模块设计→代码开发→软件测试→项目部署→系统维护 深入浅出地讲解了需求分析技术、软件开发架构设计、关系型物理表设计、Redis应用实战、MongoDB 开发与应用、Web服务器与数据库的集群部署等内容。
501 0