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

多国语言处理

开发平台:

Visual C++

  1. // WordList.h: interface for the CWordList class.
  2. //
  3. //////////////////////////////////////////////////////////////////////
  4. #if !defined(AFX_WORDLIST_H__D7A246C0_9CD0_11D3_BAA2_0000250394FE__INCLUDED_)
  5. #define AFX_WORDLIST_H__D7A246C0_9CD0_11D3_BAA2_0000250394FE__INCLUDED_
  6. #if _MSC_VER > 1000
  7. #pragma once
  8. #endif // _MSC_VER > 1000
  9. #include <afxtempl.h>
  10. #define CataMax 200
  11. class CWordNode;
  12. void AFXAPI SerializeElements(CArchive& ar,CWordNode* pElements,int nCount);
  13. class CWordNode
  14. {
  15. public:
  16. CWordNode();
  17. ~CWordNode();
  18. CWordNode& operator = (const CWordNode& x);
  19. void AllocBuffer(int nLen);
  20. void DeallocBuffer();
  21. void Serialize(CArchive& ar);
  22. public:
  23. void Copy(CWordNode& wordNode);
  24. void InitBuffer(int nLen);
  25. long GetWordNum();
  26. long GetDocNum();
  27. long GetCataWordNum(int cataID);
  28. long GetCataDocNum(int cataID);
  29. int  MaxWeightIndex();
  30. void ComputeWeight(long sum, bool bMult=false);
  31. //在特征选择的时候用来保存特征的类别区分度
  32. //在特征选择完成之后,它用来保存每个特征的"log(训练文档总数/特征的文档频率)"值
  33. double m_dWeight;
  34. short m_nAllocLen;
  35. int m_nWordID;           //特征的ID
  36. double *m_pCataWeight;   //特征对于每个类别的区分度
  37. double *m_pCataWeightPro;  //特征属于每个类别的概率
  38. //特征在整个文档集中的文档频率,实际就是函数GetDocNum()返回的值
  39. //如果特征不是从训练文档集中选择得到的,就无法使用GetDocNum()得到特征的文档频率
  40. //所以,此处使用m_lDocFreq来记录特征的文档频率
  41. long m_lDocFreq;         //特征在整个文档集中的文档频率
  42. //特征在整个文档集中的词频,实际就是函数GetWordNum()返回的值
  43. //如果特征不是从训练文档集中选择得到的,就无法使用GetWordNum()得到特征的词频
  44. //所以,此处使用m_lWordFreq来记录特征的词频
  45. long m_lWordFreq;        //特征在整个文档集中的词频
  46. long *m_pCataDocFreq;    //特征在每一个类别中的文档频率
  47. long *m_pCataWordFreq;   //特征在每一个类别中的词频
  48. long m_lDocID;           //得到特征的文档频率的时候用到
  49. };
  50. AFX_INLINE UINT AFXAPI HashKey(CString key);
  51. typedef CTypedPtrList<CPtrList,CWordNode*> CPWordList;
  52. class CWordList  
  53. {
  54. public:
  55. CWordNode& Add(const CString str,  long docID);
  56. bool GetListFromFile(CString strFileName);
  57. CString GetWordByID(long wordID);
  58. CWordList();
  59. CWordList& operator =(CWordList &x);
  60. virtual ~CWordList();
  61. void Serialize(CArchive& ar);
  62. void DumpToFile(CString strFileName);
  63. void DumpWordList(CString strFileName);
  64. void DumpWordProList(CString strFileName,int CataNum);
  65. bool GetFromFile(CString strFileName);
  66. void InitWordList();
  67. //如果词表中不存在这个词,则加入词表
  68. CWordNode& Add(const CString);
  69. //如果词表中不存在这个词,则加入词表,并且根据docID决定文档频率是否加1
  70. CWordNode& Add(const CString, short, long, int);
  71. void SetAt(const CString,CWordNode&);
  72. //获得词表中词的总数
  73. int  GetCount();
  74. long GetWordNum();
  75. BOOL Lookup(CString str, CWordNode &wordNode);
  76. CWordNode& GetNext(POSITION &, CString &);
  77. POSITION GetFirstPosition(void);
  78. void IndexWord();
  79. //计算每个词的反比文档频率
  80. void ComputeWeight(long sum, bool bMult=false);
  81. public :
  82. bool GetProFromFile(CString strFileName);
  83. CWordNode& GetWordProByID(POSITION& pos,int j);
  84. double GetWordProByID(POSITION &pos,long wordID,int classnum);
  85. CMap<CString,CString,CWordNode,CWordNode&> m_lstWordList;
  86. };
  87. #endif // !defined(AFX_WORDLIST_H__D7A246C0_9CD0_11D3_BAA2_0000250394FE__INCLUDED_)