You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

遍历元组列表提取主题模型高频词时遇TypeError错误求助

问题定位与解决方案

首先咱们来拆解你遇到的TypeError: 'int' object is not iterable错误核心原因:

  • 你的test_topic里的每个元素是**(主题ID, 词-权重元组列表)**的结构,比如(0, [('pizza', 0.13345005), ...])
  • 你内层循环写的for weight, term in item:,这里的item是整个(主题ID, 词列表)元组,遍历它时会先拿到第一个元素——整数类型的主题ID(比如0),而你试图把这个整数拆成weightterm两个变量,这就触发了错误,因为单个整数没法被迭代拆分。
  • 另外还要注意:LdaModel.show_topics返回的词-权重元组是(term, weight)的顺序,不是你写的(weight, term),顺序搞反也会拿到错误的值。

修正后的代码

test_topic = [(0, [('pizza', 0.13345005), ('notch', 0.08421454), ('weekend', 0.049728252), ('fair', 0.035808913), ('thank', 0.034821175), ('girlfriend', 0.03274733), ('seen', 0.029821698), ('patient', 0.026760893), ('sucked', 0.026622303), ('skip', 0.026458882), ('san', 0.024171583), ('luckily', 0.021163197), ('god', 0.020423584), ('stellar', 0.016307), ('improve', 0.01599736)]),(1, [('ingredients', 0.019390099), ('opening', 0.018882414), ('choice', 0.013553904), ('summer', 0.01068847), ('minute', 0.010665418), ('asian', 0.010231626), ('money', 0.010114605), ('near', 0.00918076), ('dined', 0.008954125), ('odd', 0.0087335445), ('14', 0.008653159), ('noise', 0.008145982), ('place', 0.008041287), ('live', 0.0075712656), ('definitely', 0.007468632)]),(2, [('pork', 0.022275768), ('chicken', 0.022122012), ('ribs', 0.021125246), ('strips', 0.018241541), ('green', 0.014933401), ('tomato', 0.013756915), ('cheese', 0.013535802), ('juice', 0.012698732), ('soup', 0.012126858), ('good', 0.011680452), ('sauce', 0.011264608), ('grilled', 0.010635098), ('favorite', 0.010507565), ('fat', 0.009539875), ('meat', 0.009525091)])]

# 先拆分主题ID和词权重列表,再遍历词列表
for idx, (topic_id, terms_weights) in enumerate(test_topic):
    print(f"=== 主题 {topic_id} 的高频词 ===")
    # 如果只需要打印词,就用下面的注释行替换当前循环
    # for term, _ in terms_weights:
    #     print(term)
    for term, weight in terms_weights:
        print(f"词: {term}, 权重: {weight}")

关键细节说明

  • 正确拆分结构:用(topic_id, terms_weights)test_topic的每个元素拆成主题ID和对应的词-权重列表,避免直接遍历整个元组导致的类型错误。
  • 词和权重的顺序:严格按照LdaModel.show_topics返回的(term, weight)顺序拆包,确保拿到正确的词和权重值。
  • 简化写法:如果只需要提取词不需要权重,可以用for term, _ in terms_weights:,用下划线忽略权重变量,代码更简洁清晰。

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

火山引擎 最新活动