Data mining 如何预测函数名是否遵循约定
假设您有一个包含10000个函数名的存储库,以及它们在C/C#/C++中的代码库中的使用频率。(它们通常有不同的约定) 有些样品可能是:Data mining 如何预测函数名是否遵循约定,data-mining,text-mining,Data Mining,Text Mining,假设您有一个包含10000个函数名的存储库,以及它们在C/C#/C++中的代码库中的使用频率。(它们通常有不同的约定) 有些样品可能是: DoPaint OnPaint CloseWindow DeleteGraphOnClose FreeConnection ConnectInternat (smallTypo, but part of code) FreeSoH 现在给定一个函数名,我们如何预测该名称是否符合人工生成名称的约定 注: 显然,所有候选名称都是有效名称 生成的名称可以具有任意
DoPaint
OnPaint
CloseWindow
DeleteGraphOnClose
FreeConnection
ConnectInternat (smallTypo, but part of code)
FreeSoH
现在给定一个函数名,我们如何预测该名称是否符合人工生成名称的约定
注:
Z090292 - not likely
onDelete - likely
CloseWindow - likely
iGetIndex - unlikely
欢迎使用技术和软件上的任何指针将标识符拆分为单独的单词(基于大写),并将单词放入拼写检查器(例如)。把所有拼写错误的单词看成是非人类生成的,以及它们出现的标识符。
预测它是否是人类生成的,这是一个非常棘手的问题。分析代码库以查找函数名更容易-您可以查看工具,例如。
您可能可以检测camelcase。此外,您还可以在下一个大写单词之前对典型单词进行正则表达式搜索,如:do、get、set、in等。我的一位朋友可能会有所帮助。据我所知,他正在攻读这门学科的博士学位您可以尝试对文本进行一些贝叶斯分析:
NB:这只是一个粗略的轮廓,很多细节都没有。如果你对这一系列的调查感兴趣,我建议你阅读概率论,特别是贝叶斯分析,除了使用马丁·洛斯建议的字典之外,这是一本不错的字典,但你还必须记住t表示以下常见形式的变量:
$return
或列表
)还要注意的是,我最感兴趣的是名称的可能性,而不是它们是否真的存在,这主要可以通过代码分析工具找到,特别是对于技术名词,如StarteredTunnelling,大多数单词可能会被标记为坏词。我明白你的建议,类似于垃圾邮件检测,这是个好主意