【问题标题】:MALLET Topic Modeling: input StringMALLET 主题建模:输入字符串
【发布时间】:2014-06-07 12:45:39
【问题描述】:

我有这个代码来导入文件 .mallet:

File f=new File("/home/test/file.mallet");
InstanceList t=InstanceList.load(f);

但如果我想手动切换每个实例,我该怎么做? 我试过这个:

String str="Test for mallet.";
InstanceList t=new InstanceList();
t.add(new Instance(str,"test","test",null));

但它给了我一个错误!

编辑

我试过了,它似乎可以处理字符串数组:

ArrayList<String> aa =ArrayList<Pipe>();
aa.add("Test string 1.");
aa.add("Test string 2.");

String[] ob1=new String[aa.size];
ob1=aa.toArray(ob1);

ArrayList<Pipe> pipeList=ArrayList<Pipe>();
pipeList.add(new CharSequenceLowerCase());
//....
pipeList.add(new TokenSequence2FeatureSequence());

InstanceList training=new InstanceList(new SerialPipes(pipeList))

training.addThruPipe(new StringArrayIterator(ob1));

【问题讨论】:

  • 我不明白你的问题
  • 如果你想像第二个例子那样传递一个字符串,通常它被传递到一个文件 .mallet 进行主题建模?
  • 我会发布你的版本作为答案。

标签: java topic-modeling mallet


【解决方案1】:

如果您想为 Mallet 使用字符串或对象列表而不是文件,则必须为 thrupipe 使用迭代器。根据您要使用的对象类型,您可以使用StringArrayIterator 或简单地使用ArrayIterator。 StringArrayIterator 需要一个字符串数组,ArrayIterator 需要一个列表或对象数组。 API 没有很好的文档记录,但可以直接使用。

ArrayList<Pipe> pipeList = new ArrayList<>();
pipeList.add(new CharSequenceLowercase());
pipeList.add(new CharSequence2TokenSequence(Pattern.compile("[\\p{L}\\p{N}_]+")));
pipeList.add(new TokenSequenceRemoveStopwords(false, false));
...

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

选择使用数组或对象列表:

ArrayList<String> list = new ArrayList<>();
list.add("text1 text2 text3");
list.add("text4 text5");
list.add("text6 text7");
instances.addThruPipe(new ArrayIterator(list));

或者一个字符串数组:

String[] array = new String[]{"text1","text2","text3"};
instances.addThruPipe(new StringArrayIterator(array));

部分示例取自here

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-04
    相关资源
    最近更新 更多