⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 wordres.cpp

📁 计算机英汉机器翻译系统中的英语词性标注方法实现
💻 CPP
📖 第 1 页 / 共 4 页
字号:
	}
	else if((p=strrchr(Word,'-'))!=NULL)
	{	//连字符
		char	WordNext[150];
		DictNode *pDictNode3;
		strcpy(WordNext,p+1);
		p[0]='\0';
		pDictNode1 = g_objLexSearch.SearchWord(Word,nSearchMod);

		p=WordNext+strlen(WordNext)-2;
		strcpy(tail,p);
		if(strcmp(tail,"ed")==0)
		{// 名词后为-ed的还原      
			p[0]='\0';
			pDictNode3=g_objLexSearch.SearchWord(WordNext,nSearchMod);
		}
		else
		{
			pDictNode3 = g_objLexSearch.SearchWord(WordNext,nSearchMod);
		}
		if(pDictNode1!=NULL || pDictNode3!=NULL)
		{
			/*
			if(pDictNode1 ==NULL)
				pDictNode1 = CreateNewWord(Word);
			pDictNode2 = CreateNewWord("-");
			if(pDictNode3 ==NULL)
				pDictNode3 = CreateNewWord(WordNext);
			pDictNode1->m_pNextWordNode = pDictNode2;
			pDictNode2->m_pPrevWordNode = pDictNode1;
			pDictNode2->m_pNextWordNode = pDictNode3;
			pDictNode3->m_pPrevWordNode = pDictNode2;
			*/
			
			//cdq changed 12.14
			if ( pDictNode1 != NULL )
			{
				pDictNode2=pDictNode1;
				if ( pDictNode3 == NULL ||
					pDictNode3->m_pFirstChin == NULL )
				{
					p=WordNext+strlen(WordNext)-3;
					strcpy(tail,p);
					if(strcmp(tail,"ths")==0 && SearchCate(pDictNode2,Cate_number) )
					{//  去-s      
						p[2]='\0';
						pDictNode3=WordRestore(WordNext,SEARCH_ALLCH);
					}
					else
						pDictNode3=WordRestore(WordNext,SEARCH_ALLCH);
				}
				if ( pDictNode3->m_pFirstChin->m_pszChinese != NULL )
				{//建立新的合成词
					pDictNode1=CreateComposeWord(pDictNode2,pDictNode3,inputword);
				}	
				else
				{//建立生词
					pDictNode1=CreateNewWord(inputword);
					return pDictNode1;
				}
			}
			else
			{
				
				p=Word+ strlen(Word)-3;
				strcpy(tail,p);
				if(strcmp(tail,"ing")==0)
				{// 去-ing后查字典, 建立新的合成词     
					p[0]='\0';
					pDictNode2=WordRestore(Word,SEARCH_ALLCH);
					if ( pDictNode2->m_pFirstChin->m_pszChinese != NULL &&
							SearchCate(pDictNode2,Cate_n) )
					{
						pDictNode1=CreateComposeWord(pDictNode2,pDictNode3,inputword);
					}
				}
			}
		}
		else
		{
			pDictNode2=WordRestore(Word,SEARCH_ALLCH);
			pDictNode3=WordRestore(WordNext,SEARCH_ALLCH);
			if ( pDictNode2 != NULL || pDictNode3->m_pFirstChin->m_pszChinese != NULL )
			{
				pDictNode1=CreateComposeWord(pDictNode2,
										pDictNode3,inputword);
			}
			else
			{//建立生词
			pDictNode1=CreateNewWord(inputword);
			}
		}
		return pDictNode1;
	}//cdq changed

	/*
	else if((p=strchr(Word,','))!=NULL)
	{	// 去掉数字中间的分隔符
		while((p=strchr(Word,','))!=NULL)
		{
			int	k=p-Word;
			if(k>0 && k<WordLen-1)
			if(Word[k-1]>='0' && Word[k-1]<='9' && Word[k+1]>='0' && Word[k+1]<='9' )
				strcpy(p,p+1);
			else
				pDictNode1 = CreateNewWord(inputword);
		}
		pDictNode1 = CreateNewWord(Word);
		Mystrcpy(pDictNode1,"dig",3);
	}	*/
	else
	{	//无',词缀s,es,ing,ed,er,est, etc.
		strcpy(Word,inputword);
		//strcpy(BTNode[wordth]->m_pszEnglish,inputword);
		WordLen = strlen(Word);
		p=Word+ WordLen-1;
		strcpy(tail,p);
		if(strcmp(tail,"s")==0)
		{       	// -s      
			p[0]='\0';
			if((pDictNode1=g_objLexSearch.SearchWord(Word,nSearchMod)) != NULL)
			{
				pDictNode1->m_pszEnglish = Mystrcpy(pDictNode1,inputword,1);
				pDictNode1->m_pszOrig = Mystrcpy(pDictNode1,Word,2);
				pDictNode1->m_byDictForm = S_Form;
				pDictNode1->m_byDictNumber=Multi_Number;	//temp
				if(	pDictNode1->m_bIsExistOrig &&
					SearchCate(pDictNode1,Cate_n) &&
					!SearchCate(pDictNode1,Cate_vi) && 
					!SearchCate(pDictNode1,Cate_vt))
				{
					//strcpy(pDictNode1->m_pszAmbig,"N");
					//pDictNode1->m_nLxhCate = 
					//pDictNode1->m_nAmbigLen = 1;
					pDictNode1->m_byDictNumber=Multi_Number;
				}
				else
				if(pDictNode1->m_bIsExistOrig &&
					(SearchCate(pDictNode1,Cate_vi) || 
					SearchCate(pDictNode1,Cate_vt)) &&
					!SearchCate(pDictNode1,Cate_n) )
				{
					//pDictNode1->m_nLxhCate = 
					//pDictNode1->m_nAmbigLen = 1;
				}
				return pDictNode1;
			}
		}
		strcpy(Word,inputword);
		p=Word+ WordLen-1;
		strcpy(tail,p);
		if(strcmp(tail,"d")==0  && Word[WordLen-2]=='e')
		{       	// e-d, word应为动词
			p[0]='\0';
			if((pDictNode1=g_objLexSearch.SearchWord(Word,nSearchMod)) != NULL)
				{
				pDictNode1->m_pszEnglish = Mystrcpy(pDictNode1,inputword,1);	//98.3.10
				pDictNode1->m_pszOrig = Mystrcpy(pDictNode1,Word,2);
				Mystrcpy(pDictNode1,"@Cate=v",3);
				pDictNode1->m_byDictForm = Ed1_2_Form;
				if((pDictNode1->m_byDictForm == Ed2_Form || 
					pDictNode1->m_byDictForm == Ed1_2_Form) )
					ModifyPreWord();
				
				return pDictNode1;
				}
		}
		strcpy(Word,inputword);
		p=Word+ WordLen-1;
		strcpy(tail,p);
		if(strcmp(tail,"r")==0  && Word[WordLen-2]=='e')
		{       	// e-r, word应为名词,动词
			p[0]='\0';
			if((pDictNode1=g_objLexSearch.SearchWord(Word,nSearchMod)) != NULL)
				{
				pDictNode1->m_pszEnglish = Mystrcpy(pDictNode1,inputword,1);	//98.3.10
				//pDictNode1->m_pszOrig = new char[strlen(Word)+1];
				pDictNode1->m_pszOrig = Mystrcpy(pDictNode1,Word,2);
				Mystrcpy(pDictNode1,"adj",3);
				pDictNode1->m_byDictForm = Er_Form;
				return pDictNode1;
				}
		}
		strcpy(Word,inputword);
		p=Word+ WordLen-2;
		strcpy(tail,p);
		if(strcmp(tail,"ed")==0)
		{       	// -ed, word应为动词
			p[0]='\0';
			if((pDictNode1=g_objLexSearch.SearchWord(Word,nSearchMod)) != NULL)
				{
				pDictNode1->m_pszEnglish = Mystrcpy(pDictNode1,inputword,1);
				//pDictNode1->m_pszOrig = new char[strlen(Word)+1];
				pDictNode1->m_pszOrig = Mystrcpy(pDictNode1,Word,2);
				Mystrcpy(pDictNode1,"@Cate=v",3);
				pDictNode1->m_byDictForm = Ed1_2_Form;
				//strcpy(pDictNode1->m_pszAmbig,"V");
				if((pDictNode1->m_byDictForm == Ed2_Form || 
					pDictNode1->m_byDictForm == Ed1_2_Form) )
					ModifyPreWord();
				
				return pDictNode1;
				}
			if(Word[WordLen-3]=='i')
			{
				Word[WordLen-3] = 'y';	//改y为i,加ed
				if((pDictNode1=g_objLexSearch.SearchWord(Word,nSearchMod)) != NULL)
					{
					pDictNode1->m_pszEnglish = Mystrcpy(pDictNode1,inputword,1);
					//pDictNode1->m_pszOrig = new char[strlen(Word)+1];
					pDictNode1->m_pszOrig = Mystrcpy(pDictNode1,Word,2);
					Mystrcpy(pDictNode1,"@Cate=v",3);
					pDictNode1->m_byDictForm = Ed1_2_Form;
					//strcpy(pDictNode1->m_pszAmbig,"V");
					if((pDictNode1->m_byDictForm == Ed2_Form || 
						pDictNode1->m_byDictForm == Ed1_2_Form) )
						ModifyPreWord();
					
					return pDictNode1;
					}
			}
			else if(Word[WordLen-3]==Word[WordLen-4])
			{
				Word[WordLen-3] = '\0';	//双写最后的字母,再加ed,
				if((pDictNode1=g_objLexSearch.SearchWord(Word,nSearchMod)) != NULL)
					{
					pDictNode1->m_pszEnglish = Mystrcpy(pDictNode1,inputword,1);
					//pDictNode1->m_pszOrig = new char[strlen(Word)+1];
					pDictNode1->m_pszOrig = Mystrcpy(pDictNode1,Word,2);
					Mystrcpy(pDictNode1,"@Cate=v",3);
					pDictNode1->m_byDictForm = Ed1_2_Form;
					//strcpy(pDictNode1->m_pszAmbig,"V");
					if((pDictNode1->m_byDictForm == Ed2_Form || 
						pDictNode1->m_byDictForm == Ed1_2_Form) )
						ModifyPreWord();
					
					return pDictNode1;
					}
			}
		}
		strcpy(Word,inputword);
		p=Word+ WordLen-2;
		strcpy(tail,p);
		if(strcmp(tail,"er")==0)
		{       	// -er, word应为名词,形容词
			p[0]='\0';
			if((pDictNode1=g_objLexSearch.SearchWord(Word,nSearchMod)) != NULL)
				{
				pDictNode1->m_pszEnglish = Mystrcpy(pDictNode1,inputword,1);
				//pDictNode1->m_pszOrig = new char[strlen(Word)+1];
				pDictNode1->m_pszOrig = Mystrcpy(pDictNode1,Word,2);
				Mystrcpy(pDictNode1,"adj",3);
				pDictNode1->m_byDictForm = Er_Form;
				return pDictNode1;
				}
			else
			if(Word[WordLen-3]=='i')
			{
				Word[WordLen-3] = 'y';	//改y为i,加er
				if((pDictNode1=g_objLexSearch.SearchWord(Word,nSearchMod)) != NULL)
					{
					pDictNode1->m_pszEnglish = Mystrcpy(pDictNode1,inputword,1);
					//pDictNode1->m_pszOrig = new char[strlen(Word)+1];
					pDictNode1->m_pszOrig = Mystrcpy(pDictNode1,Word,2);
					Mystrcpy(pDictNode1,"adj",3);
					pDictNode1->m_byDictForm = Er_Form;
					return pDictNode1;
					}
			}
			else if(Word[WordLen-3]==Word[WordLen-4])
			{
				Word[WordLen-3] = '\0';	//双写最后的字母,再加er,
				if((pDictNode1=g_objLexSearch.SearchWord(Word,nSearchMod)) != NULL)
				{
					pDictNode1->m_pszEnglish = Mystrcpy(pDictNode1,inputword,1);
					//pDictNode1->m_pszOrig = new char[strlen(Word)+1];
					pDictNode1->m_pszOrig = Mystrcpy(pDictNode1,Word,2);
					Mystrcpy(pDictNode1,"adj",3);
					pDictNode1->m_byDictForm = Er_Form;
					return pDictNode1;
				}
			}
		}
		strcpy(Word,inputword);
		p=Word+ WordLen-2;
		strcpy(tail,p);
		if(strcmp(tail,"es")==0)
		{       	// -es, word应为名词
			p[0]='\0';
			if((pDictNode1=g_objLexSearch.SearchWord(Word,nSearchMod)) != NULL)
			{
				pDictNode1->m_pszEnglish = Mystrcpy(pDictNode1,inputword,1);
				//pDictNode1->m_pszOrig = new char[strlen(Word)+1];
				pDictNode1->m_pszOrig = Mystrcpy(pDictNode1,Word,2);
				pDictNode1->m_byDictForm = S_Form;
				pDictNode1->m_byDictNumber = Multi_Number;
				return pDictNode1;
			}
		}
		strcpy(Word,inputword);
		p=Word+ WordLen-2;
		strcpy(tail,p);
		if(strcmp(tail,"st")==0 && Word[WordLen-3]=='e')
		{       	// e-st, word应为形容词
			p[0]='\0';
			
			if((pDictNode1=g_objLexSearch.SearchWord(Word,nSearchMod)) != NULL)
			{
				pDictNode1->m_pszEnglish = Mystrcpy(pDictNode1,inputword,1);
				//pDictNode1->m_pszOrig = new char[strlen(Word)+1];
				pDictNode1->m_pszOrig = Mystrcpy(pDictNode1,Word,2);
				Mystrcpy(pDictNode1,"adj",3);
				pDictNode1->m_byDictForm = Est_Form;
				return pDictNode1;
			}
		}
		strcpy(Word,inputword);
		p=Word+ WordLen-3;
		strcpy(tail,p);
		if(strcmp(tail,"est")==0)
		{       	// -est, word应为形容词
			p[0]='\0';
			if((pDictNode1=g_objLexSearch.SearchWord(Word,nSearchMod)) != NULL)
			{
				pDictNode1->m_pszEnglish = Mystrcpy(pDictNode1,inputword,1);
				//pDictNode1->m_pszOrig = new char[strlen(Word)+1];
				pDictNode1->m_pszOrig = Mystrcpy(pDictNode1,Word,2);
				Mystrcpy(pDictNode1,"adj",3);
				pDictNode1->m_byDictForm = Est_Form;
				return pDictNode1;
			}
			else if(Word[WordLen-4]=='i')
			{
				Word[WordLen-4] = 'y';	//改y为i,加er
				if((pDictNode1=g_objLexSearch.SearchWord(Word,nSearchMod)) != NULL)
				{
					pDictNode1->m_pszEnglish = Mystrcpy(pDictNode1,inputword,1);
					pDictNode1->m_pszOrig = Mystrcpy(pDictNode1,Word,2);
					Mystrcpy(pDictNode1,"adj",3);
					pDictNode1->m_byDictForm = Est_Form;
					return pDictNode1;
				}
			}
		}
		strcpy(Word,inputword);
		p=Word+ WordLen-3;
		strcpy(tail,p);
		if(strcmp(tail,"ing")==0)
		{       	// -ing, word应为动词,
			p[0]='\0';
			//cdq changed 12.8
			while((pDictNode1=g_objLexSearch.SearchWord(Word,nSearchMod)) != NULL)
			{
				if ( !SearchCate(pDictNode1,Cate_v) )
				{
						break;
				}
				pDictNode1->m_pszEnglish = Mystrcpy(pDictNode1,inputword,1);
				//pDictNode1->m_pszOrig = new char[strlen(Word)+1];
				pDictNode1->m_pszOrig = Mystrcpy(pDictNode1,Word,2);
				Mystrcpy(pDictNode1,"@Cate=v",3);
				pDictNode1->m_byDictForm = Ing_Form;
				return pDictNode1;
			}

			p[0]='e';	//去e,加ing
			p[1]='\0';
			while((pDictNode1=g_objLexSearch.SearchWord(Word,nSearchMod)) != NULL)
			{
				if ( !SearchCate(pDictNode1,Cate_v) )
				{
					break;
				}
				pDictNode1->m_pszEnglish = Mystrcpy(pDictNode1,inputword,1);
				pDictNode1->m_pszOrig = Mystrcpy(pDictNode1,Word,2);
				Mystrcpy(pDictNode1,"@Cate=v",3);
				pDictNode1->m_byDictForm = Ing_Form;
				return pDictNode1;
			}
			Word[WordLen-4] = '\0';	//双写最后的字母,再加ing,
			while((pDictNode1=g_objLexSearch.SearchWord(Word,nSearchMod)) != NULL)
			{
				if ( !SearchCate(pDictNode1,Cate_v) )
				{
					break;
				}
				pDictNode1->m_pszEnglish = Mystrcpy(pDictNode1,inputword,1);
				pDictNode1->m_pszOrig = Mystrcpy(pDictNode1,Word,2);
				Mystrcpy(pDictNode1,"@Cate=v",3);
				pDictNode1->m_byDictForm = Ing_Form;
				return pDictNode1;
			}
		}			//cdq changed 12.8

		strcpy(Word,inputword);
		p=Word+ WordLen-3;
		strcpy(tail,p);
		if(strcmp(tail,"ves")==0)
		{       	// -ves, word应为名词,
			p[0]='f';
			p[1]='\0';
			if((pDictNode1=g_objLexSearch.SearchWord(Word,nSearchMod)) != NULL)
			{
				pDictNode1->m_pszEnglish = Mystrcpy(pDictNode1,inputword,1);
				pDictNode1->m_pszOrig = Mystrcpy(pDictNode1,Word,2);
				pDictNode1->m_byDictForm = S_Form;
				pDictNode1->m_byDictNumber = Multi_Number;
				return pDictNode1;
			}
			p[1]='f';
			p[2]='e';
			p[3]='\0';
			if((pDictNode1=g_objLexSearch.SearchWord(Word,nSearchMod)) != NULL)
			{
				pDictNode1->m_pszEnglish = Mystrcpy(pDictNode1,inputword,1);
				pDictNode1->m_pszOrig = Mystrcpy(pDictNode1,Word,2);
				pDictNode1->m_byDictForm = S_Form;
				pDictNode1->m_byDictNumber = Multi_Number;
				return pDictNode1;
			}
		}
		strcpy(Word,inputword);
		p=Word+ WordLen-3;
		strcpy(tail,p);
		if(strcmp(tail,"ies")==0)
		{       	// -ies, word应为名词,
			p[0]='y';
			p[1]='\0';
			if((pDictNode1=g_objLexSearch.SearchWord(Word,nSearchMod)) != NULL)
			{
				pDictNode1->m_pszEnglish = Mystrcpy(pDictNode1,inputword,1);
				pDictNode1->m_pszOrig = Mystrcpy(pDictNode1,Word,2);
				//Mystrcpy(pDictNode1,"Cate=n",3);
				pDictNode1->m_byDictForm = S_Form;
				pDictNode1->m_byDictNumber = Multi_Number;
				return pDictNode1;
			}
		}

		strcpy(Word,inputword);
		p=Word+ WordLen-2;
		strcpy(tail,p);
		if(strcmp(tail,"th")==0)
		{// <20序数词
			p[0] = '\0';
			if((pDictNode2=g_objLexSearch.SearchWord(Word,nSearchMod)) != NULL)
			{
				if(SearchCate(pDictNode2,Cate_number))
				{
					pDictNode1=CreateOrdinalWord(pDictNode2,inputword);
					return pDictNode1;
				}
			}
			else if(strcmp(Word,"fif")==0 )
			{
				strcpy(Word,"five");
				pDictNode2=g_objLexSearch.SearchWord(Word,nSearchMod);
				pDictNode1=CreateOrdinalWord(pDictNode2,inputword);
				return pDictNode1;
			}
			else if(strcmp(Word,"eigh")==0 )
			{
				strcpy(Word,"eight");
				pDictNode2=g_objLexSearch.SearchWord(Word,nSearchMod);
				pDictNode1=CreateOrdinalWord(pDictNode2,inputword);
				return pDictNode1;
			}
			else if(strcmp(Word,"nin")==0 )
			{

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -