- A classification for short text using NLPIR.
For the first test version, you need NLPIR license to do train and classify.
To be a better model you need make that better "NewTrain": Chinese is using uni-gram and 50-100 dim, and English is Bi-gram and 10 dim.
- Train model
publicclassTrain {
publicList<String> files=newArrayList<String>();
publicvoidgetAllfiles(FilefilePath){
File[] fsFiles=filePath.listFiles();
for(Filef:fsFiles){
if(f.isFile()&&!f.getName().equals(".DS_Store")) files.add(f.getPath());
if(f.isDirectory()) this.getAllfiles(f);
}
}
publicStringgetContent(Filefile)throwsException{
RandomAccessFilef=newRandomAccessFile(file, "r");
byte[] b=newbyte[(int) file.length()];
f.read(b);
f.close();
Stringc=newString(b,"UTF-8").replaceAll("\\s", "");
returnc;
}
publicstaticvoidmain(String[] args) throwsException{
CLibraryTextClassifier.Instance.TextClassifierInit("");
CLibraryTextClassifier.Instance.NewTrain(false,1,50);
StringfPath="train";
Traintest=newTrain();
test.getAllfiles(newFile(fPath));
for(Stringf:test.files){
//System.out.println(f);Stringcon=test.getContent(newFile(f));
String[] cls=newFile(f).getParent().split("/");
Stringcl=cls[cls.length-1];
System.out.print(cl+"\t");
CLibraryTextClassifier.Instance.AddString(cl, con);
}
CLibraryTextClassifier.Instance.Completed();
intt=CLibraryTextClassifier.Instance.Train();
System.out.println(t);
}
}- Classify
publicclassTest {
publicstaticvoidmain(String[] args) throwsException{
CLibraryTextClassifier.Instance.TextClassifierInit("");
CLibraryTextClassifier.Instance.LoadModel();
StringfPath="train";
Traintest=newTrain();
test.getAllfiles(newFile(fPath));
inttotal=0;
intpre=0;
for(Stringf:test.files){
//System.out.println(f);Stringcon=test.getContent(newFile(f));
String[] cls=newFile(f).getParent().split("/");
Stringcl=cls[cls.length-1];
Stringresult=CLibraryTextClassifier.Instance.GetClassification(con , 1,false);//获取最优分类结果System.out.println(cl+"\t"+result);
if(result.contains(cl)) ++pre;
++total;
}
System.out.println((float)pre/(float)total);
}
}