假设您有一个包含10,000个函数名称的存储库,可能还有它们在C / C#/ C ++中的代码语料库中的使用频率。 (他们有不同的惯例通常规定)
有些样本可能是:
DoPaint
OnPaint
CloseWindow
DeleteGraphOnClose
FreeConnection
ConnectInternat (smallTypo, but part of code)
FreeSoH
现在给出一个函数名称,我们如何预测名称是否遵循人类生成名称的约定?
注意:
一些候选人:
Z090292 - not likely
onDelete - likely
CloseWindow - likely
iGetIndex - unlikely
欢迎任何关于技术和软件的指示
答案 0 :(得分:2)
您可以尝试对文本进行一些贝叶斯分析:
获取一个函数名称,并使用您刚收集的数据查找每个部分出现的概率
P((人类生成|看到令牌)= P(看到令牌|人类生成)* P(人类生成))/ P(看到令牌)
在这种情况下,人类或计算机生成的某些事物的概率将根据已知知识决定,即功能名称的百分比被认为是人类生成的。
看到令牌(P(看到令牌))的概率必须逐渐发展。它包括在人类功能中看到令牌的次数以及在计算机功能中看到它的次数......这个解决方案基于程序随时间学习的前提(因此需要训练)
结果P((HumanGenerated | Seeing the Token)将为您提供人类生成函数名称的概率。
注意:这只是一个粗略的轮廓,很多细节都缺失了。如果您对这一系列调查感兴趣,我建议您阅读概率论,特别是贝叶斯分析
答案 1 :(得分:1)
将标识符拆分为单个单词(基于大小写),并将单词放入拼写检查器(例如ispell)。将所有拼写错误的单词与非人类生成的单词一起考虑,以及它们出现的标识符。
答案 2 :(得分:1)
我的一个朋友可能会帮忙。就我所知,他正在就这个主题做博士学位。
答案 3 :(得分:0)
预测它是否是人类生成的是一个非常棘手的问题。分析代码库以查找函数名称更容易 - 您可以查看NDepend等工具。
答案 4 :(得分:0)
你可能会检测到camelcase。此外,您可以在下一个大写单词之前进行正则表达式搜索典型单词,例如:do,get,set,in等。
答案 5 :(得分:0)
除了使用字典作为Martin V. Lowes建议的是一个很好的字典,但你必须记住还要考虑以下常见形式的变量:
$return
或list_
)。