Classifier.h
上传用户:sanxfzhen
上传日期:2014-12-28
资源大小:2324k
文件大小:4k
源码类别:

多国语言处理

开发平台:

Visual C++

  1. // Classifier.h: interface for the CClassifier class.
  2. //
  3. //////////////////////////////////////////////////////////////////////
  4. #if !defined(AFX_CLASSIFIER_H__FA4DB8D8_AC36_44A8_884B_0D715575B7A1__INCLUDED_)
  5. #define AFX_CLASSIFIER_H__FA4DB8D8_AC36_44A8_884B_0D715575B7A1__INCLUDED_
  6. #if _MSC_VER > 1000
  7. #pragma once
  8. #endif // _MSC_VER > 1000
  9. #include "CatalogList.h"
  10. #include "ClassifierParam.h"
  11. #include "WordList.h"
  12. #include "Compute_Param.h"
  13. #include "Compute_Prompt.h"
  14. #include "Compute_Result.h"
  15. #include "svm.h"
  16. #include "BAYES.h"
  17. struct sSortType
  18. {
  19. char        word[40];
  20. double dWeight;
  21. CWordNode *pclsWordNode;
  22. };
  23. struct DocWeight
  24. {
  25. double dWeight;
  26. long   lDocID;
  27. };
  28. struct DocCatalog
  29. {
  30. CDocNode * pDocNode;
  31. short      nCataID;
  32. };
  33. class CClassifier 
  34. {
  35. public:
  36. CClassifier();
  37. virtual ~CClassifier();
  38. public: //训练时需要用到的公有成员方法
  39. //参数bGenDic=false 层次分类时使用, nType决定分类模型的类别
  40. bool Train(int nType=0,bool bFlag=true);
  41. void TrainSVM();
  42. void TrainBAYES();
  43. bool GenDic();
  44. void InitTrain();
  45. bool WriteModel(CString strFileName, int nType=0);
  46. void Evaluate(CString strPath);
  47. void CopyFile(char *pFileName, char *pSource, char *pTarget, char *pCatalog);
  48. long SaveResults(CCatalogList &cataList, CString strFileName, CStringArray *aryType=NULL);
  49. private: //训练时需要用到的私有成员方法
  50. void Sort(struct sSortType *,int);
  51. void QuickSort(struct sSortType *,int,int);
  52. void GenSortBuf(CWordList& wordList,sSortType *psSortBuf,int nCatalog);
  53. void GenModel();
  54. void FeatherSelection(CWordList& dstWordList);
  55. void FeatherWeight(CWordList& wordList);
  56. public: //分类时需要用到的公有成员方法
  57. bool OpenModel(CString strFileName);
  58. void Prepare();
  59. bool Classify();
  60. bool ClassifySmart();
  61. bool KNNClassify(char *, CDocNode &, bool bFile=true, int nCmpType=0);
  62. long KNNClassify(CCatalogList&,int nCmpType=0);
  63. short KNNCategory(char *,CDocNode &,bool bFile=true, int nCmpType=0);
  64. short KNNCategory(char *pPath, bool bFile=true, int nCmpType=0);
  65. long SVMClassify(CCatalogList& cataList);
  66. bool SVMClassify(char *pPath, CDocNode &docNode, bool bFile=true);
  67. short SVMCategory(char *pPath, CDocNode &docNode, bool bFile=true);
  68. short SVMCategory(char *file, bool bFile=true);
  69. void SVMClassifyVectorFile(CString strFileName);
  70. short GetCategory(char *file, bool bFile=true);
  71. short GetCategory(char *path, CDocNode &docNode, bool bFile=true);
  72. bool Classify(char *path, CDocNode &docNode, bool bFile=true);
  73. long Classify(CCatalogList& cataList);
  74. short SingleCategory(CDocNode &docNode);
  75. bool MultiCategory(CDocNode &docNode, CArray<short,short>& aryResult, double dThreshold);
  76. private: //分类时需要用到的私有成员方法
  77. void ComputeWeight(bool bMult=false);
  78. void ComputeSimRatio(CDocNode &, int nCmpType=0);
  79. void Sort(DocWeight *,int);
  80. void QuickSort(DocWeight*, int, int);
  81. private:  //分类时需要用到的私有成员变量
  82. //指向训练文本集的指针,用来加快读取速度
  83. DocCatalog *m_pDocs;
  84. //暂时保存当前测试文档和训练文档中每一篇文档的相似度
  85. DocWeight *m_pSimilarityRatio;
  86. //保存当前测试文档与每类的概率
  87. DocWeight *m_pProbability;
  88. //训练文档的个数
  89. long m_lDocNum;
  90. //训练文档的类别数
  91. short m_nClassNum;
  92. public:
  93. void ComputePro(CDocNode &docNode);
  94. bool BAYESClassify(char *, CDocNode &, bool bFile=true);
  95. short BAYESCategory(char *pPath, CDocNode &, bool bFile=true);
  96. long BAYESClassify(CCatalogList& cataList);
  97. //分类模型文件头标识符
  98. int n_Type;
  99. static const DWORD dwModelFileID;
  100. CClassifierParam  m_paramClassifier;
  101. CWordList         m_lstTrainWordList;
  102. //训练时需要用到的,用来保存在没有进行特征选择之前训练集中所有的特征
  103. CWordList         m_lstWordList;
  104. CCatalogList      m_lstTrainCatalogList;
  105. CCatalogList      m_lstTestCatalogList;
  106. CSVM              m_theSVM;
  107. CBAYES   m_theBAYES;
  108. };
  109. extern CClassifier theClassifier;
  110. #endif // !defined(AFX_CLASSIFIER_H__FA4DB8D8_AC36_44A8_884B_0D715575B7A1__INCLUDED_)