2014-06-07 53 views
3

我有這樣的代碼導入文件.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)); 
+0

我不明白你的問題 –

+0

如果你想像第二個例子那樣傳遞一個字符串,它通常會被傳遞給文件.maclet進行主題建模? – Enzo

+0

我會發布你的版本作爲答案。 – Klerisson

回答

0

如果你想使用字符串列表或對象,而不是用於槌文件,你必須爲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