You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python3运行词频统计代码提示'module' object is not callable报错如何解决

问题修复方案

核心错误原因

  • 模块直接作为函数调用:import morphemes as mf、import index_terms as idt导入的是模块对象,不可直接加括号调用,需要指定模块内的具体处理函数,或直接导入模块内的目标函数。
  • 函数名不匹配:定义的统计函数名为count_yr,主程序中调用时写的是count_year,名称不一致会触发调用错误。
  • 统计逻辑存在bug:原函数内先遍历所有词给counter[word]赋值全0列表,会覆盖之前年份已经统计的频次数据,属于无效逻辑。

修复代码

导入部分调整(根据你自己模块内的实际函数名修改)

假设morphemes.py中的核心处理函数名为morphemes,index_terms.py中的核心处理函数名为index_terms,修改导入语句为:

import sys
# 直接导入模块内的目标函数
from morphemes import morphemes as mf
from index_terms import index_terms as idt

count_yr函数逻辑调整

def count_yr(counter, filename, index, size):
    '''
    counter: dictionary (key: word, value: frequency list)
    filename : file for analyzing words
    index : index for year 2000->0, 2001->1, ...
    size : total number of years
    '''
    with open(filename, "r") as file:
        lst = idt(mf(file))
        for word in lst:
            # 仅当词首次出现时初始化频次列表
            if word not in counter:
                counter[word] = [0]*size
            counter[word][index] += 1
    return counter

主程序调用部分调整

将count_year修改为正确的函数名count_yr,同时简化输出逻辑:

if __name__ == "__main__":
    if len(sys.argv) < 2:
        print( "[Usage]", sys.argv[0], "in-file(s)", file=sys.stderr)
        sys.exit()

    counter = {}
    file_list = sys.argv[1:]
    total_years = len(file_list)
    for i, filename in enumerate(file_list):
        count_yr( counter, filename, i, total_years)

    while True:
        query = input('Please type the word you are looking for (type "exit" to exit): ')
        if query == "exit":
            break
        print(counter.get(query, "No Result"))

内容的提问来源于stack exchange,提问作者Paul Park

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 09:12:03