如何用Python和NLP根据函数名推导其返回类型
从函数名推导返回类型的实现方案
核心实现逻辑
蛇形命名的函数名通常遵循固定的语义排布规则,你可以通过规则匹配+关键词库的方式快速实现需求,准确率足以覆盖绝大多数常规场景:
- 提前预设常用的返回类型关键词集合,支持自定义扩展业务专属类型
- 按命名习惯设置匹配优先级:
- 优先匹配
return/get等动作词之后的第一个单词,这类位置出现类型词的概率最高 - 未匹配到则从后往前遍历单词列表,匹配
xxx_类型这类后缀命名的场景
- 优先匹配
示例代码
# 通用返回类型集合,可根据自身业务场景自由扩展 COMMON_RETURN_TYPES = {"list", "dict", "str", "int", "float", "bool", "tuple", "set", "dataframe", "ndarray", "json"} def infer_return_type(words_list: list) -> str | None: # 优先级1:匹配动作词后的第一个类型词 action_words = {"return", "get", "fetch", "query", "load", "read"} for idx, word in enumerate(words_list): if word in action_words and idx + 1 < len(words_list): next_word = words_list[idx + 1] if next_word in COMMON_RETURN_TYPES: return next_word # 优先级2:匹配末尾的类型词,适配xxx_list这类后缀命名 for word in reversed(words_list): if word in COMMON_RETURN_TYPES: return word # 无匹配时返回None,也可根据需求返回默认值 return None # 测试示例 print(infer_return_type(["return", "list", "of", "apples"])) # 输出:list print(infer_return_type(["return", "apples", "list"])) # 输出:list
复杂场景适配
如果你的函数名命名规范不统一,规则匹配准确率不够,可以引入轻量NLP能力优化:
- 用nltk的词性标注过滤掉介词、动词等非名词词汇,缩小类型关键词的匹配范围
- 如果你有大量标注好的<函数名, 返回类型>样本,可以用scikit-learn训练轻量文本分类模型,TF-IDF特征加朴素贝叶斯分类器在小样本下就能获得不错的准确率
相关Python模块说明
目前没有专门针对这个场景的成熟第三方模块,因为该需求高度依赖具体团队的命名规范,通用性较低。你可以基于上述规则方案自定义扩展,成本很低,灵活度也更高。
内容的提问来源于stack exchange,提问作者amin shahidi
相关产品推荐
相关产品推荐

