Mallet使用--output-topic-docs参数输出txt文件为空问题求助
问题成因
你遇到的报错是Mallet 2.0.8及之后正式版的已知代码缺陷:cc.mallet.topics.ParallelTopicModel类的printTopicDocuments方法在输出主题关联文档时,错误将实例存储的文档来源URI对象直接强转为String类型,类型不匹配触发运行时异常,直接中断--output-topic-docs参数对应的文件写入流程,因此只会生成空文件。
解决方案
方案1:无代码修改,直接用已有输出文件计算
你的运行命令已经指定了--output-doc-topics参数生成了文档-主题分布文件,基于该文件可直接计算每个主题的最相关文档:
- 读取doc-topics文件,跳过开头的说明行
- 每行第三列起为对应主题在该文档中的占比
- 按主题维度遍历,取该主题占比最高的前N个文档即可,逻辑比依赖Mallet自带输出更可控。
方案2:修改源码重新编译
找到Mallet源码中ParallelTopicModel.java的1773行,将原有强转代码:String name = (String) instance.getName();
修改为兼容URI类型的代码:String name = instance.getName().toString();
重新编译Mallet后运行命令即可正常生成topic-docs文件。
方案3:导入数据集时添加规避参数
在执行import-dir/import-file生成.mallet数据集文件时,添加--name-as-filename参数,将实例的name字段存储为纯字符串格式的文件名而非URI对象,即可规避类型转换错误,后续训练时--output-topic-docs参数可正常输出结果。
内容的提问来源于stack exchange,提问作者Maarten D.
相关产品推荐
相关产品推荐

