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

Java中TMFlatFile无法解析为变量及Eclipse命令行传参咨询

问题解决步骤

一、修复代码中的变量传递错误

你当前的核心问题是TMFlatFile变量仅在main方法中定义,没有传递到StartTopicModellingProcess方法里,导致方法内无法识别该变量。按以下步骤修改代码:

  1. 修改main方法的调用语句:
    将原代码中的

    loader.StartTopicModellingProcess(filePath);
    

    替换为

    loader.StartTopicModellingProcess(filePath, TMFlatFile);
    
  2. 修改StartTopicModellingProcess方法的参数定义:
    将方法签名从

    private void StartTopicModellingProcess(String filePath) {
    

    改为

    private void StartTopicModellingProcess(String filePath, String TMFlatFile) {
    

    这样方法内部就能直接使用TMFlatFile调用SaveLemmaDataToFile,无需硬编码。

修改后的完整代码如下:

import java.io.File;
import java.io.FileInputStream;
import java.io.FileWriter;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.Map.Entry;
import java.util.concurrent.ConcurrentHashMap;

import cc.mallet.pipe.CharSequence2TokenSequence;
import cc.mallet.pipe.Pipe;
import cc.mallet.pipe.SerialPipes;
import cc.mallet.pipe.TokenSequence2FeatureSequence;
import cc.mallet.topics.ParallelTopicModel;
import cc.mallet.types.InstanceList;
import cc.mallet.util.CsvIterator;

public class B4TopicModelling {

    public static void main(String[] args) {
        
        
        if (args.length == 2) {
            B4TopicModelling loader = new B4TopicModelling();

            String filePath = args[0];    // e.g. "JSONDataStore_complex.json"
            String TMFlatFile = args[1]; // e.g. "topicdatanew.txt"

            System.out.println("Start Topic Modelling :" + filePath);
            loader.StartTopicModellingProcess(filePath, TMFlatFile);
            
            int numTopics = 10; // 主题数量(文档聚类的组数)
            int numThreads = 2; // 使用的线程数(多核机器可加速)
            int numIterations = 500; // 迭代次数
            int numTopWords = 10; // 每个主题的高频词数量
            
            loader.RunTopicModelling(TMFlatFile, numTopics, numThreads, numIterations, numTopWords);

        } else {
            System.err.println("Error: No valid arguments have been entered.");
        }
    }     

    private void StartTopicModellingProcess(String filePath, String TMFlatFile) {
        JSONIOHelper jsonIO = new JSONIOHelper(); // 创建JSONIOHelper实例
        jsonIO.LoadJSON(filePath); // 调用加载JSON方法
        ConcurrentHashMap<String, String> lemmas = jsonIO.GetDocumentsFromJSONStructure();

        SaveLemmaDataToFile(TMFlatFile, lemmas);

    }

    private void SaveLemmaDataToFile(String TMFlatFile, ConcurrentHashMap<String, String> lemmas) {

        // 将ConcurrentHashMap中的数据写入文件
        try (FileWriter writer = new FileWriter(TMFlatFile)) {

            for (Entry<String, String> entry : lemmas.entrySet()) {
                // 按格式写入:键 + 制表符 + en + 制表符 + 值
                writer.write(entry.getKey() + "\ten\t" + entry.getValue() + "\r\n");
            }

            System.out.println("TMFlatFile File saved successfully...");

        } catch (Exception e) {
            System.out.println("Saving TMFlatFile to text file failed...");
        }

    }

    private void RunTopicModelling(String TMFlatFile, int numTopics, int numThreads, int numIterations, int numTopWords) {
        ArrayList<Pipe> pipeList = new ArrayList<Pipe>();

        // 管道配置:分词、特征映射
        pipeList.add(new CharSequence2TokenSequence(java.util.regex.Pattern.compile("\\p{L}[\\p{L}\\p{P}]+\\p{L}")));
//      pipeList.add(new TokenSequenceRemoveStopwords(new File("stoplist_en.txt"), "UTF-8", false, false, false));
        pipeList.add(new TokenSequence2FeatureSequence());

        InstanceList instances = new InstanceList(new SerialPipes(pipeList));

        InputStreamReader fileReader = null;

        try {
            File inFile = new File(TMFlatFile);
            fileReader = new InputStreamReader(new FileInputStream(inFile));
        } catch (Exception e) {
            System.out.println("File Load failed");
            System.exit(1);
        }
        
        // 将数据导入管道
        instances.addThruPipe(new CsvIterator(fileReader, java.util.regex.Pattern.compile("^(\\S*)[\\s,]*(\\S*)[\\s,]*(.*)$"), 3, 2, 1));

        // 初始化并行主题模型
        ParallelTopicModel model = new ParallelTopicModel(numTopics, 1.0, 0.01);

        model.addInstances(instances);
        model.setNumThreads(numThreads);
        model.setNumIterations(numIterations);

        try {
            model.estimate();
        } catch (java.io.IOException e) {
            System.out.println("Model estimation failed...");
        }

    }

}

二、在Eclipse中配置命令行参数

代码修复完成后,按以下步骤设置命令行参数:

  • 右键项目中的B4TopicModelling类,选择「Run As」→「Run Configurations...」
  • 在弹出窗口左侧找到「Java Application」分类,若没有对应配置,点击左上角「New launch configuration」新建一个
  • 切换到「Arguments」标签页,在「Program arguments」输入框中填入两个文件名,例如JSONDataStore_complex.json topicdatanew.txt(参数间用空格分隔)
  • 点击「Apply」保存配置,再点击「Run」启动程序即可

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 17:45:45