MALLET主题建模:输入字符串

时间:2014-06-07 12:45:39

标签: java topic-modeling mallet

我有这个代码来导入文件.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));

1 个答案:

答案 0 :(得分:0)

如果要使用字符串或对象列表而不是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