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
相关产品推荐
相关产品推荐

