Dictionary.h
上传用户:chen_dj
上传日期:2013-04-22
资源大小:111k
文件大小:4k
源码类别:

多国语言处理

开发平台:

C/C++

  1. /****************************************************************************
  2.  *
  3.  * Copyright (c) 2000, 2001 
  4.  *     Machine Group
  5.  *     Software Research Lab.
  6.  *     Institute of Computing Tech.
  7.  *     Chinese Academy of Sciences
  8.  *     All rights reserved.
  9.  *
  10.  * This file is the confidential and proprietary property of 
  11.  * Institute of Computing Tech. and the posession or use of this file requires 
  12.  * a written license from the author.
  13.  * Filename: Dictionary.h
  14.  * Abstract:
  15.  *           dictionary class definition
  16.  *  interface for the CDictionary class.
  17.  * Author:   Kevin Zhang 
  18.  *          (zhanghp@software.ict.ac.cn)
  19.  * Date:     2002-1-8
  20.  *
  21.  * Notes:
  22.  *                
  23.  * 
  24.  ****************************************************************************/
  25. #if !defined(AFX_DICTIONARY_H__80E88BC1_784E_4C96_868B_D7CD66DD6725__INCLUDED_)
  26. #define AFX_DICTIONARY_H__80E88BC1_784E_4C96_868B_D7CD66DD6725__INCLUDED_
  27. #if _MSC_VER > 1000
  28. #pragma once
  29. #endif // _MSC_VER > 1000
  30. #define CC_NUM  6768
  31. //The number of Chinese Char,including 5 empty position between 3756-3761
  32. #define WORD_MAXLENGTH 100
  33. #define WT_DELIMITER 0
  34. #define WT_CHINESE   1
  35. #define WT_OTHER     2
  36. #define CC_ID(c1,c2) ((unsigned char)(c1)-176)*94+((unsigned char)(c2)-161)
  37. //The ID equation of Chinese Char 
  38. #define CC_CHAR1(id) (id)/94+176
  39. //The first char computed by the Chinese Char ID
  40. #define CC_CHAR2(id) (id)%94+161
  41. //The second char computed by the Chinese Char ID 
  42. /*data structure for word segmentation and tag result*/
  43. //Add in 2002-6-20
  44. struct tagWordResult{
  45. char sWord[WORD_MAXLENGTH];
  46. //The word 
  47. int nHandle;
  48. //the POS of the word
  49. double  dValue;
  50. //The -log(frequency/MAX)
  51. };
  52. typedef struct tagWordResult WORD_RESULT,*PWORD_RESULT;
  53. /*data structure for word item*/
  54. struct tagWordItem{
  55. int nWordLen;
  56. char *sWord;
  57. //The word 
  58. int nHandle;
  59. //the process or information handle of the word
  60. int  nFrequency;
  61. //The count which it appear
  62. };
  63. typedef struct tagWordItem WORD_ITEM,*PWORD_ITEM;
  64. /*data structure for dictionary index table item*/
  65. struct tagIndexTable{
  66.     int nCount;
  67. //The count number of words which initial letter is sInit
  68.     PWORD_ITEM pWordItemHead;
  69. //The  head of word items
  70. };
  71. typedef struct tagIndexTable INDEX_TABLE;
  72. /*data structure for word item chain*/
  73. struct tagWordChain{
  74.        WORD_ITEM data;
  75.        struct tagWordChain *next;
  76. };
  77. typedef struct tagWordChain WORD_CHAIN,*PWORD_CHAIN;
  78. /*data structure for dictionary index table item*/
  79. struct tagModifyTable{
  80.     int nCount;
  81. //The count number of words which initial letter is sInit
  82. int nDelete;
  83.     //The number of deleted items in the index table
  84. PWORD_CHAIN pWordItemHead;
  85. //The  head of word items
  86. };
  87. typedef struct tagModifyTable MODIFY_TABLE,*PMODIFY_TABLE;
  88. class CDictionary  
  89. {
  90. public:
  91. bool Output(char *sFilename);
  92. int GetFrequency(char *sWord,  int nHandle);
  93. bool GetPOSString(int nPOS,char *sPOSRet);
  94. int GetPOSValue(char *sPOS);
  95. bool GetMaxMatch(char *sWord, char *sWordRet, int *npHandleRet);
  96. bool MergePOS(int nHandle);
  97. bool GetHandle(char *sWord,int *pnCount,int *pnHandle,int *pnFrequency);
  98. bool IsExist(char *sWord,int nHandle);
  99. bool AddItem(char *sWord,int nHandle,int nFrequency=0);
  100. bool DelItem(char *sWord,int nHandle);
  101. bool Save(char *sFilename);
  102. bool Load(char *sFilename,bool bReset=false);
  103. int  GetWordType(char *sWord);
  104. bool PreProcessing(char *sWord,int *nId,char *sWordRet,bool bAdd=false);
  105. CDictionary();
  106.     virtual ~CDictionary();
  107. INDEX_TABLE   m_IndexTable[CC_NUM];
  108.     PMODIFY_TABLE m_pModifyTable;
  109. //The data for modify  
  110. protected:
  111. bool DelModified();
  112. bool FindInOriginalTable(int nInnerCode,char *sWord,int nHandle,int *nPosRet=0);
  113. bool FindInModifyTable(int nInnerCode,char *sWord,int nHandle,PWORD_CHAIN *pFindRet=0);
  114. };
  115. #endif // !defined(AFX_DICTIONARY_H__80E88BC1_784E_4C96_868B_D7CD66DD6725__INCLUDED_)