📄 diction.h
字号:
int m_nChinNum;
DictChin *m_pFirstChin;
DictChin *AppendEmptyChin(); // 在m_pFirstChin的尾部追加一个空的
// DictChin结点,返回新添加的结点的指针
DictChin *GetPointedChin(int nPointedIndex);
void DeletePointedChin(int nPointedIndex);
//LXHBegin
//char lxh_m_pszOrig[20]; // 原形,临时
int m_byMaxPhraseLen; //如果 m_pszEnglish为一个单词,
// 记录短语第一个为该词的短语最大长度
int m_byForm;
/*
0:original,
1:-ed1,2:ed2,3:-ing,4:-s,5:ed1,ed2; 6; er;7;est;
8: 待定 is or has;9: 待定 would or had 10: unknown word,
11:number
*/
//int m_byDe; //1:所有格
LPSTR m_nLxhCate;
int m_nLxhCateLen;
BYTE m_byGenetive; //1:所有格
int m_byNumber; //0:单数, 1:复数
DictNode *m_pNextWordNode; //下一个 词结点
DictNode *m_pPrevWordNode; //前一个 词结点
int m_byDictForm;
BYTE m_byDictGenetive; //1:所有格
char m_cDictTense; //时态:0现在,1过去,2将来,3过去将来
char m_cDictAspect; //体态:0一般,1进行,2完成,3完成进行
char m_cDictVoice; //0:主动,1:被动
char m_cDictNegative; //0:肯定,1:否定
BYTE m_byDictPerson; //1:第一人称,2:第二人称,3:第三人称
BYTE m_byDictNumber; //0:单数,1:复数
//LXHEnd
//CDQBegin
LPSTR m_pszPostag; //统计算法词性标注结果
LPSTR m_pszBaseNPtag; //BaseNP标注结果
//CDQEnd
//xunedBegin
DictNode();
~DictNode();
DictChin* m_pCurrSele; //当前完成译文选择的词典一行
LPSTR m_pszTranslation; //生成或选择后的译文
int m_nTranslationLen;
LPSTR m_pszParseRule; //分析数的中间结点的分析规则
int m_nParseRule;
LPSTR m_pszTransferRule; //分析数的中间结点的转换生成规则
int m_nTransferRule;
LPSTR m_pszDynamicInfo; //翻译过程中动态生成的信息
int m_nDynamicInfo;
BOOL m_bIsSentBegin; //当前结点是否为句子头
BOOL m_bIsSentEnd; //当前结点是否为句子尾
BOOL m_bIsLeafNode; //当前结点是否为分析树的叶结点
DictNode* m_pChild; //当前结点的儿子结点
DictNode* m_pParent; //当前结点的父亲结点
DictNode* m_pLeftBrother; //当前结点的左兄弟结点
DictNode* m_pRightBrother; //当前结点的右兄弟结点
DictNode* m_pLeftCousin; //当前结点的左堂兄弟结点
DictNode* m_pRightCousin; //当前结点的右堂兄弟结点
//xunedEnd
} DictNode;
/*class CTranRule{
public:
CTranRule();
~CTranRule();
LPSTR m_pszTranRule; // 规则 #VP-->vd NP THCL
int m_nTranRuleLen; // 规则长度
// 注:m_pszAttrTrans,m_pszRuleRestr,m_pszProdRuleLeft并非完全由
// 字符串组成,中间可能会出现字符串结束符'\0',因此判断长度
// 请用m_nAttrTransLen,复制用memcpy等.
LPSTR m_pszAttrTrans; // 属性传递 @ F=0
int m_nAttrTransLen; // 属性传递长度
LPSTR m_pszRuleRestr; // 规则限制 $ 1:Head=Human | 1:Head=Orgnz
int m_nRuleRestr; // 规则限制长度
LPSTR m_pszAttrRestr; // 属性约束 % SD: !C=qm & SB: C=be
int m_nAttrRestrLen; // 属性约束长度
//^2:Head=Human-->2:*+1:*+I:干什么的
LPSTR m_pszProdRuleLeft; // 生成规则左部 ^2:Head=Human
int m_nProdRuleLeftLen; // 生成规则左部长度
LPSTR m_pszProdRuleRight; // 生成规则右部 ^-->0:+1:*+2:就是这样
int m_nProdRuleRightLen; // 生成规则右部长度
};
*/
class DictSearch
{
public:
DictSearch();
~DictSearch();
DictNode *m_pDictNode;
//yys 98.5.26 Bgn
//qlp delete
/* Dictionary *m_obDiction;
Dictionary *m_obSysDiction; //系统词典数据
Dictionary *m_obAddtionDiction; //系统附加词典数据
Dictionary *m_obUserDiction; //用户词典数据
*/
FILE *m_fpIndexDat;
/* FILE *m_fpSysIndexDat; //系统词典索引
FILE *m_fpAddtionIndexDat; //系统附加词典索引
FILE *m_fpUserIndexDat; //用户词典索引
*/
BOOL bSearchSysDict; //是否搜索系统词典
BOOL bSearchUserDict; //是否搜索用户词典
BOOL bHaveAllocMemory ; //是否已经为m_pszSys/UserHashTable分配过内存
char szUserDictName[255]; //用户词典名
//yys 98.5.26 End
//CHuffman m_Huffman;
// Debug Use
FILE *m_fpSearchWord;
int m_narrayDector[BYTES_BIT_NUM+1];
int m_nHashTableOffset; // HASH表的偏移地址
// int m_nHashTableSize; // HASH表的长度(以BIT为单位)
LPSTR m_pszHashTable;
//qlp delete 5.27
/*
LPSTR m_pszSysHashTable;
LPSTR m_pszAddtionHashTable;
LPSTR m_pszUserHashTable;
*/
// Debug Use variables Begin
int m_nSameHushWordsNum; // 具有相同HASH值的单词数
// Debug Use variables End
protected:
int FillChin(DictChin *pCurrChin,LPSTR pszWordInfo);
void FillNode(LPSTR pszWordInfo,int nWordInfoLen);
void InitNode();
public:
//yys 98.5.26 Bgn
//获取用户词典文件名
BOOL GetUserIndexName( char *szUserDictName );
FILE *OpenIndex( char *pszDicIndexName );
//初始化词典
Dictionary *DictInit( LPSTR pszDicIndexName ,
FILE *m_fpIndexDat );
BOOL InitUserDict( char *szUserDict );
BOOL UserDictExit();
//yys 98.5.26 End
BOOL SearchWordInit(LPSTR pszDicIndexName,
LPSTR pszHuffmanFreqDataName);
void SearchWordExit();
void FreeNode(DictNode *pDictNode);
DictNode *SearchWord(LPCSTR pszEnglishWord,int nSearchCondi);
DictNode *SearchWord(LPCSTR pszEnglishWord);
BOOL UpdateWordInfo(LPCSTR pszEnglishWord,LPSTR pszWordInfo,
int nWordInfoLen);
/* void FillRule(CTranRule *pTranRule,LPSTR pszWordInfo);
CTranRule *SearchRuleCore(LPSTR pszRuleKeyword,int nRuleKeywordLen);
CTranRule *SearchRule(int nRuleNum);
CTranRule *SearchRule(LPSTR pszRuleRight,int nRuleRightLen);
// 解码词典
//nMethor = 1系统/2附加/3用户 by YYS 98.7.21
*/ BOOL DumpTotalDictToFile(FILE *fpOutDic,SlotDecode *pSlotDecode,int nMethor);
BOOL OutputNodeToFile(FILE *fpOutDic,SlotDecode *pSlotDecode);
void SetHashTableValue(LPCSTR pszKeyword);
BOOL HashFindPossible(LPCSTR pszKeyword);
inline UINT HashKey(LPCSTR pszKeyword,UINT nHashLen) const;
void SetHableTableSize();
BOOL AllocHashTableMemory();
void FreeHashTableMemory();
BOOL CreateSingleDictHashTable(LPSTR pszDictName);
//yys 98.5.14 Bgn
//添加一个形参szDicName
BOOL CreateHashTableAndAddToDat(FILE *fpIndexDat,DictHeader &phHead,char *szDicName);
//yys 98.5.14 End
BOOL LoadHushTable();
//yys 98.5.14 Bgn
//添加一个形参m_fpUserIndexDat
int LoadSysHushTableFromIndexDat(FILE *fpSysIndexDat,FILE *fpAddtionIndexDat);
BOOL LoadUserHushTableFromIndexDat(FILE *fpUserIndexDat);
//添加一个形参szDicName
BOOL CreateHashTable(char *szDicName);
//yys 98.5.14 End
BOOL HashFindInit(DictHeader dictHead);
void HashFindExit();
};
extern LPSTR myfgets(LPSTR pszString,int n,FILE *fp);
extern long WriteIndexData(FILE *fpIndexDat,LPCTSTR pszIndexData,
int nLen);
extern void ReadIndexData(FILE *fpIndexDat,LPSTR pszIndexData,
long lOffset,int nLen);
extern void CompressIndexOffsetInfo(long lOffset,int nLen,
LPSTR pszTarOffset);
extern void DecompressIndexOffsetInfo(LPSTR pszSouOffset,long &lOffset,int &nLen);
//yys 98.5.18 Bgn
extern BOOL BuildUserIndex(char *szUserDicName , char *szDicIndexName);
//yys 98.5.18 End
// yys 98.5.14 Bgn
// 加入一个形式参数 szDicName
extern BOOL BuildIndexStepOne(LPSTR pszInDefineName,LPSTR pszOutDefineName,
LPSTR pszDicIndexName,LPSTR pszEngInfoName,LPSTR pszCodeTable,
char *szDicName);
// yys 98.5.14 End
extern BOOL BuildIndexStepTwo(LPSTR pszEngInfoName,
LPSTR pszHuffmanFreqDataName,
LPSTR pszEngHuffName);
//yys 98.5.14 Bgn
// 加入一个形式参数 szDicName
extern BOOL BuildIndexStepThree(LPSTR pszEngHuffName,
LPSTR pszDicIndexName,
char *szDicName);
//yys 98.5.14 End
extern void DecodeWordRule(LPSTR pszCodedRule,LPSTR pszOrgRule);
extern void EncodeWordRule(LPCSTR pszSouCode,LPSTR pszTarCode,
int &nTarCodeLen);
extern BOOL DumpDict(LPSTR pszOutDictName,int nMethor);
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -