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

📄 tense.cpp

📁 计算机英汉机器翻译系统中的英语词性标注方法实现
💻 CPP
📖 第 1 页 / 共 5 页
字号:
					pDictNode2 = g_objLexSearch.SearchWord("is",nSearchMod);
					//pDictNode2->m_pszOrig = new char[3];
					pDictNode2->m_pszOrig = Mystrcpy(pDictNode2,"be",2);
					pDictNode1->m_pNextWordNode = pDictNode2;
					pDictNode2->m_pPrevWordNode = pDictNode1;
				    pDictNode2->m_byDictForm = Is_Has_Form;
					pDictNode2->m_byDictNumber = Sing_Number;
				}
				else
				{   //Word's
					if((pDictNode1 =g_objLexSearch.SearchWord(head,nSearchMod)) != NULL)
					{
						pDictNode1->m_byDictGenetive = Have_Genetive;
						Mystrcpy(pDictNode1,"ns",3);
						pDictNode1->m_byDictNumber = Sing_Number;
						Mystrcpy(pDictNode1,inputword,1);
					}
					else
						return	CreateNewWord(inputword);
				}
				
			}
			else if(strcmp(tail,"ve")==0)
			{	//W've
				pDictNode1 = g_objLexSearch.SearchWord(head,nSearchMod);
				if(pDictNode1 != NULL)
				{
					pDictNode2 = g_objLexSearch.SearchWord("have",nSearchMod);
					pDictNode1->m_pNextWordNode = pDictNode2;
					pDictNode2->m_pPrevWordNode = pDictNode1;
					pDictNode2->m_byDictNumber=Multi_Number;
				}
				else
					return	CreateNewWord(inputword);
			}
			else if(strcmp(tail,"ll")==0)
			{	//W'll
				pDictNode1 = g_objLexSearch.SearchWord(head,nSearchMod);
				if(pDictNode1 != NULL)
				{
					pDictNode2 = g_objLexSearch.SearchWord("will",nSearchMod);
					pDictNode1->m_pNextWordNode = pDictNode2;
					pDictNode2->m_pPrevWordNode = pDictNode1;
				}
				else
					return	CreateNewWord(inputword);
			}
			else if(strcmp(tail,"re")==0)
			{	//W're
				pDictNode1 = g_objLexSearch.SearchWord(head,nSearchMod);
				if(pDictNode1 != NULL)
				{
					pDictNode2 = g_objLexSearch.SearchWord("are",nSearchMod);
					pDictNode2->m_pszOrig = Mystrcpy(pDictNode2,"be",2);
					pDictNode1->m_pNextWordNode = pDictNode2;
					pDictNode2->m_pPrevWordNode = pDictNode1;
				}
				else
					return	CreateNewWord(inputword);
			}
			else if(strcmp(tail,"d")==0)
			{	//W'd
				if((pDictNode1=g_objLexSearch.SearchWord(head,nSearchMod)) != NULL)
				{                                        
					pDictNode2 = g_objLexSearch.SearchWord("would",nSearchMod);
					pDictNode1->m_pNextWordNode = pDictNode2;
					pDictNode2->m_pPrevWordNode = pDictNode1;
					pDictNode2->m_byDictForm = Would_had_Form;
		
				}
				else
					return	CreateNewWord(inputword);
			}
			else
				return	CreateNewWord(inputword);
		}
	}
	else if((p=strrchr(Word,'-'))!=NULL)
	{	//连字符

		char	WordNext[150];
		CString strTmp;
		strTmp=Word;
		strTmp=strTmp.Right(strTmp.GetLength()-strTmp.Find("-")-1);
		if (strchr(strTmp,'-')!=NULL)
		{
			pDictNode1=CreateNewWord(inputword);
			return pDictNode1;
		}
		strTmp=Word;
		strTmp=strTmp.Left(strTmp.Find("-"));
		DictNode *pDictNode3;
		strcpy(WordNext,p+1);
		if (strcmp(WordNext,"")==0 || strcmp(strTmp,"")==0 )
		{
			pDictNode1=CreateNewWord(inputword);
			return pDictNode1;
		}
		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 != NULL && 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 != NULL && pDictNode2->m_pFirstChin->m_pszChinese != NULL &&
							SearchCate(pDictNode2,Cate_n) )
					{
						pDictNode1=CreateComposeWord(pDictNode2,pDictNode3,inputword);
					}
					else
						pDictNode1=CreateNewWord(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);

⌨️ 快捷键说明

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