/** * 对给定的文本进行分类 * @param text 给定的文本 * @return 分类结果 1 2 3 4 0 */ public static Int16 Classify(String text) { var terms = BaseNLP.CutWord(text); //中文分词处理(分词后结果可能还包含有停用词) List <String> term = DropStopWords(terms); //去掉停用词,以免影响分类 // String Classes = tdm.getTraningClassifications();//分类 List <ClassifyResult> crs = new List <ClassifyResult>(); //分类结果 Int32 ValidWordNum = 0; //MI=new double[terms.length][Classes.length]; for (Int16 i = 0; i < 4; i++) { List <float> probility = new List <float>(); // String Ci = Classes[i];//第i个分类 int Ci = i; //第i个分类 probility = CalcProd(term, Ci); //计算给定的文本属性向量terms在给定的分类Ci中的分类条件概率 ClassifyResult cr = new ClassifyResult(probility, i); crs.Add(cr); ValidWordNum = probility.Count - 1; } if (!(Convert.ToDouble(ValidWordNum) / term.Count > 0.8 && ValidWordNum > 5)) { foreach (var item in term) { if (!IsKeyWord(item)) { return(0); } } } //对最后概率结果进行排序 crs.Sort(ClassifyResult.Compare); //返回概率最大的分类 return(++crs[3].classification);//先加再return }
protected List <Pair> CutWord(String file) { return(BaseNLP.CutWord(file)); }