Dictionary.h
上传用户:yxl0916
上传日期:2007-05-25
资源大小:2245k
文件大小:5k
源码类别:

多国语言处理

开发平台:

Visual C++

  1. //////////////////////////////////////////////////////////////////////
  2. //ICTCLAS简介:计算所汉语词法分析系统ICTCLAS(Institute of Computing Technology, Chinese Lexical Analysis System),
  3. //             功能有:中文分词;词性标注;未登录词识别。
  4. //             分词正确率高达97.58%(973专家评测结果),
  5. //             未登录词识别召回率均高于90%,其中中国人名的识别召回率接近98%;
  6. //             处理速度为31.5Kbytes/s。
  7. //著作权:  Copyright?2002-2005中科院计算所 职务著作权人:张华平 刘群
  8. //遵循协议:自然语言处理开放资源许可证1.0
  9. //Email: zhanghp@software.ict.ac.cn
  10. //Homepage:www.nlp.org.cn;mtgroup.ict.ac.cn
  11. /****************************************************************************
  12.  *
  13.  * Copyright (c) 2000, 2001 
  14.  *     Machine Group
  15.  *     Software Research Lab.
  16.  *     Institute of Computing Tech.
  17.  *     Chinese Academy of Sciences
  18.  *     All rights reserved.
  19.  *
  20.  * This file is the confidential and proprietary property of 
  21.  * Institute of Computing Tech. and the posession or use of this file requires 
  22.  * a written license from the author.
  23.  * Filename: Dictionary.h
  24.  * Abstract:
  25.  *           dictionary class definition
  26.  *  interface for the CDictionary class.
  27.  * Author:   Kevin Zhang 
  28.  *          (zhanghp@software.ict.ac.cn)
  29.  * Date:     2002-1-8
  30.  *
  31.  * Notes:
  32.  *                
  33.  * 
  34.  ****************************************************************************/
  35. #if !defined(AFX_DICTIONARY_H__80E88BC1_784E_4C96_868B_D7CD66DD6725__INCLUDED_)
  36. #define AFX_DICTIONARY_H__80E88BC1_784E_4C96_868B_D7CD66DD6725__INCLUDED_
  37. #if _MSC_VER > 1000
  38. #pragma once
  39. #endif // _MSC_VER > 1000
  40. #define CC_NUM  6768
  41. //The number of Chinese Char,including 5 empty position between 3756-3761
  42. #define WORD_MAXLENGTH 100
  43. #define WT_DELIMITER 0
  44. #define WT_CHINESE   1
  45. #define WT_OTHER     2
  46. #define CC_ID(c1,c2) ((unsigned char)(c1)-176)*94+((unsigned char)(c2)-161)
  47. //The ID equation of Chinese Char 
  48. #define CC_CHAR1(id) (id)/94+176
  49. //The first char computed by the Chinese Char ID
  50. #define CC_CHAR2(id) (id)%94+161
  51. //The second char computed by the Chinese Char ID 
  52. /*data structure for word segmentation and tag result*/
  53. //Add in 2002-6-20
  54. struct tagWordResult{
  55. char sWord[WORD_MAXLENGTH];
  56. //The word 
  57. int nHandle;
  58. //the POS of the word
  59. double  dValue;
  60. //The -log(frequency/MAX)
  61. };
  62. typedef struct tagWordResult WORD_RESULT,*PWORD_RESULT;
  63. /*data structure for word item*/
  64. struct tagWordItem{
  65. int nWordLen;
  66. char *sWord;
  67. //The word 
  68. int nHandle;
  69. //the process or information handle of the word
  70. int  nFrequency;
  71. //The count which it appear
  72. };
  73. typedef struct tagWordItem WORD_ITEM,*PWORD_ITEM;
  74. /*data structure for dictionary index table item*/
  75. struct tagIndexTable{
  76.     int nCount;
  77. //The count number of words which initial letter is sInit
  78.     PWORD_ITEM pWordItemHead;
  79. //The  head of word items
  80. };
  81. typedef struct tagIndexTable INDEX_TABLE;
  82. /*data structure for word item chain*/
  83. struct tagWordChain{
  84.        WORD_ITEM data;
  85.        struct tagWordChain *next;
  86. };
  87. typedef struct tagWordChain WORD_CHAIN,*PWORD_CHAIN;
  88. /*data structure for dictionary index table item*/
  89. struct tagModifyTable{
  90.     int nCount;
  91. //The count number of words which initial letter is sInit
  92. int nDelete;
  93.     //The number of deleted items in the index table
  94. PWORD_CHAIN pWordItemHead;
  95. //The  head of word items
  96. };
  97. typedef struct tagModifyTable MODIFY_TABLE,*PMODIFY_TABLE;
  98. class CDictionary  
  99. {
  100. public:
  101. bool Optimum();
  102. bool Merge(CDictionary dict2,int nRatio);
  103. bool OutputChars(char *sFilename);
  104. bool Output(char *sFilename);
  105. int GetFrequency(char *sWord,  int nHandle);
  106. bool GetPOSString(int nPOS,char *sPOSRet);
  107. int GetPOSValue(char *sPOS);
  108. bool GetMaxMatch(char *sWord, char *sWordRet, int *npHandleRet);
  109. bool MergePOS(int nHandle);
  110. bool GetHandle(char *sWord,int *pnCount,int *pnHandle,int *pnFrequency);
  111. bool IsExist(char *sWord,int nHandle);
  112. bool AddItem(char *sWord,int nHandle,int nFrequency=0);
  113. bool DelItem(char *sWord,int nHandle);
  114. bool Save(char *sFilename);
  115. bool Load(char *sFilename,bool bReset=false);
  116. int  GetWordType(char *sWord);
  117. bool PreProcessing(char *sWord,int *nId,char *sWordRet,bool bAdd=false);
  118. CDictionary();
  119.     virtual ~CDictionary();
  120. INDEX_TABLE   m_IndexTable[CC_NUM];
  121.     PMODIFY_TABLE m_pModifyTable;
  122. //The data for modify  
  123. protected:
  124. bool DelModified();
  125. bool FindInOriginalTable(int nInnerCode,char *sWord,int nHandle,int *nPosRet=0);
  126. bool FindInModifyTable(int nInnerCode,char *sWord,int nHandle,PWORD_CHAIN *pFindRet=0);
  127. };
  128. #endif // !defined(AFX_DICTIONARY_H__80E88BC1_784E_4C96_868B_D7CD66DD6725__INCLUDED_)