data-mining - 如何预测函数名称是否遵循约定

标签 data-mining text-mining

假设您有一个包含 10,000 个函数名称的存储库,并且可能包含它们在 C/C#/C++ 代码库中的使用频率。 (他们通常有不同的约定)

一些示例可能是:

DoPaint
OnPaint
CloseWindow
DeleteGraphOnClose
FreeConnection
ConnectInternat (smallTypo, but part of code)
FreeSoH 

现在给定一个函数名称,我们如何预测该名称是否遵循人类生成名称的约定

注意:

  1. 显然,所有候选人姓名都是有效姓名
  2. 生成的名称可以包含任意字符,并将被视为错误
  3. 大小写可能会出现乱码

部分候选人:

Z090292 - not likely
onDelete - likely
CloseWindow - likely
iGetIndex - unlikely

欢迎任何有关技术软件的指点

最佳答案

您可以尝试对文本进行一些贝叶斯分析:

  1. 将名称列表(及其频率)加载到您的程序中。此时可能值得对名称进行标记。所以例如CloseWindow 变为 Close 和 Window,两者的频率都增加。此时,加载一些非人类函数名称以使用否定形式训练程序也很有用。
  2. 取一个函数名称,并使用您刚刚收集的数据找出每个部分出现的概率

    P((人类生成|看到 token ) = P(看到 token |人类生成) * P(人类生成))/P(看到 token )

在这种情况下,人类或计算机生成的概率将根据已知知识来决定,即函数名称的百分比被认为是人类生成的。

看到 token 的概率(P(看到 token ))必须逐渐演变。它将由该 token 在人类功能中出现的次数和在计算机功能中出现的次数组成......该解决方案基于程序随着时间的推移而学习的前提(因此需要进行训练) )

结果 P((HumanGenerate|Seeing the Token) 将为您提供函数名称由人类生成的概率。

注意:这只是一个粗略的轮廓,缺少许多细节。如果您对这方面的研究感兴趣,我建议您阅读概率论,特别是贝叶斯分析

关于data-mining - 如何预测函数名称是否遵循约定,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1352445/

相关文章:

artificial-intelligence - 是否有监督学习算法以标签作为输入,并产生概率作为输出?

machine-learning - 关于在 kdd cup 2012 track 2 中使用 AUC 指标,真的合理吗?

postgresql - 数据库中的集群文本文档

python - TFIDF 计算困惑

r - 在 Shiny 中上传许多文件

r - 在 R 中使用 TM 包的 VCorpus 时遇到错误

networkx - 值错误: The specified interaction extension is broader than the ones already present for the given nodes

r - 对于R中的文本挖掘,如何将DocumentTermMatrix与原始数据框结合起来?

java - 如何从文本中提取所有地址信息?

Python Pandas - 如何格式化和拆分列中的文本?