Dictionary.h
上传用户:sunyong76
上传日期:2021-10-03
资源大小:2236k
文件大小:6k
源码类别:

多国语言处理

开发平台:

Java

  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. /* 
  43. * ----- commented by huangjin@ict.ac.cn 2006-5-29 ------ 
  44. *  #define WORD_MAXLENGTH 100
  45. *
  46. */
  47. /*----Added By huangjin@ict.ac.cn 2006-5-30----*/
  48. #define WORD_MAXLENGTH 200
  49. /*-----------------------------------------------*/
  50. #define WT_DELIMITER 0
  51. #define WT_CHINESE   1
  52. #define WT_OTHER     2
  53. #define CC_ID(c1,c2) ((unsigned char)(c1)-176)*94+((unsigned char)(c2)-161)
  54. //The ID equation of Chinese Char 
  55. #define CC_CHAR1(id) (id)/94+176
  56. //The first char computed by the Chinese Char ID
  57. #define CC_CHAR2(id) (id)%94+161
  58. //The second char computed by the Chinese Char ID 
  59. /*data structure for word segmentation and tag result*/
  60. //Add in 2002-6-20
  61. struct tagWordResult{
  62. char sWord[WORD_MAXLENGTH];
  63. //The word 
  64. int nHandle;
  65. //the POS of the word
  66. double  dValue;
  67. //The -log(frequency/MAX)
  68. /*----Added By huangjin@ict.ac.cn 2006-5-30----*/
  69. struct tagWordResult()
  70. {
  71. sWord[0]='';
  72. nHandle=0;
  73. dValue=0.0;
  74. }
  75. /*-----------------------------------------------*/
  76. };
  77. typedef struct tagWordResult WORD_RESULT,*PWORD_RESULT;
  78. /*data structure for word item*/
  79. struct tagWordItem{
  80. int nWordLen;
  81. char *sWord;
  82. //The word 
  83. int nHandle;
  84. //the process or information handle of the word
  85. int  nFrequency;
  86. //The count which it appear
  87. /*----Added By huangjin@ict.ac.cn 2006-5-30----*/
  88. struct tagWordItem()
  89. {
  90. sWord=NULL;
  91. nHandle=0;
  92. nFrequency=0;
  93. }
  94. /*-----------------------------------------------*/
  95. };
  96. typedef struct tagWordItem WORD_ITEM,*PWORD_ITEM;
  97. /*data structure for dictionary index table item*/
  98. struct tagIndexTable{
  99.     int nCount;
  100. //The count number of words which initial letter is sInit
  101.     PWORD_ITEM pWordItemHead;
  102. //The  head of word items
  103. /*----Added By huangjin@ict.ac.cn 2006-5-30----*/
  104. struct tagIndexTable()
  105. {
  106. nCount=0;
  107. pWordItemHead=NULL;
  108. }
  109. /*-----------------------------------------------*/
  110. };
  111. typedef struct tagIndexTable INDEX_TABLE;
  112. /*data structure for word item chain*/
  113. struct tagWordChain{
  114.        WORD_ITEM data;
  115.        struct tagWordChain *next;
  116.    /*----Added By huangjin@ict.ac.cn 2006-5-30----*/
  117.    struct tagWordChain()
  118.    {
  119.    next=NULL;
  120.    }
  121.    /*-----------------------------------------------*/
  122. };
  123. typedef struct tagWordChain WORD_CHAIN,*PWORD_CHAIN;
  124. /*data structure for dictionary index table item*/
  125. struct tagModifyTable{
  126.     int nCount;
  127. //The count number of words which initial letter is sInit
  128. int nDelete;
  129.     //The number of deleted items in the index table
  130. PWORD_CHAIN pWordItemHead;
  131. //The  head of word items
  132. /*----Added By huangjin@ict.ac.cn 2006-5-30----*/
  133. struct tagModifyTable()
  134. {
  135. pWordItemHead=NULL;
  136. }
  137. /*-----------------------------------------------*/
  138. };
  139. typedef struct tagModifyTable MODIFY_TABLE,*PMODIFY_TABLE;
  140. class CDictionary  
  141. {
  142. public:
  143. bool Optimum();
  144. bool Merge(CDictionary dict2,int nRatio);
  145. bool OutputChars(char *sFilename);
  146. bool Output(char *sFilename);
  147. int GetFrequency(char *sWord,  int nHandle);
  148. bool GetPOSString(int nPOS,char *sPOSRet);
  149. int GetPOSValue(char *sPOS);
  150. bool GetMaxMatch(char *sWord, char *sWordRet, int *npHandleRet);
  151. bool MergePOS(int nHandle);
  152. bool GetHandle(char *sWord,int *pnCount,int *pnHandle,int *pnFrequency);
  153. bool IsExist(char *sWord,int nHandle);
  154. bool AddItem(char *sWord,int nHandle,int nFrequency=0);
  155. bool DelItem(char *sWord,int nHandle);
  156. bool Save(char *sFilename);
  157. bool Load(char *sFilename,bool bReset=false);
  158. int  GetWordType(char *sWord);
  159. bool PreProcessing(char *sWord,int *nId,char *sWordRet,bool bAdd=false);
  160. CDictionary();
  161.     virtual ~CDictionary();
  162. INDEX_TABLE   m_IndexTable[CC_NUM];
  163.     PMODIFY_TABLE m_pModifyTable;
  164. //The data for modify  
  165. protected:
  166. bool DelModified();
  167. bool FindInOriginalTable(int nInnerCode,char *sWord,int nHandle,int *nPosRet=0);
  168. bool FindInModifyTable(int nInnerCode,char *sWord,int nHandle,PWORD_CHAIN *pFindRet=0);
  169. /*----Added By huangjin@ict.ac.cn 2006-5-29----*/
  170. void ClearDictionary(void);
  171. /*-----------------------------------------------*/
  172. /*----Added By huangjin@ict.ac.cn 2006-9-12----*/
  173. bool m_bAvailable; //indicate wether init the dict from loading
  174. /*---------------------------------------------*/
  175. };
  176. #endif // !defined(AFX_DICTIONARY_H__80E88BC1_784E_4C96_868B_D7CD66DD6725__INCLUDED_)