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

📄 tense.cpp

📁 计算机英汉机器翻译系统中的英语词性标注方法实现
💻 CPP
📖 第 1 页 / 共 5 页
字号:
				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 )
			{
				strcpy(Word,"nine");
				pDictNode2=g_objLexSearch.SearchWord(Word,nSearchMod);
				pDictNode1=CreateOrdinalWord(pDictNode2,inputword);
				return pDictNode1;
			}
			else if(strcmp(Word,"twelf")==0 )
			{
				strcpy(Word,"twelve");
				pDictNode2=g_objLexSearch.SearchWord(Word,nSearchMod);
				pDictNode1=CreateOrdinalWord(pDictNode2,inputword);
				return pDictNode1;
			}
	
/*
			for(int j=0; j<WordLen; j++)
			{
				if(!isdigit(Word[j]))
					break;
			}

			for(int j=0; j<WordLen-2; j++)
			{
				if(!isdigit(Word[j]))
					break;
			}
			if(j == WordLen-2)
			{
				strcpy(temp,"第");
				strcat(temp,Word);
				Mystrcpy(pDictNode1,temp,2);
				Mystrcpy(pDictNode1,"dig",3);
			}
*/
		}
		strcpy(Word,inputword);
		p=Word+ WordLen-4;
		strcpy(tail,p);
		if(strcmp(tail,"ieth")==0)
		{// >20序数词
			p[0]='y';
			p[1]='\0';
			if((pDictNode2=g_objLexSearch.SearchWord(Word,nSearchMod)) != NULL)
			{
				if(SearchCate(pDictNode2,Cate_number))
				{
					pDictNode1=CreateOrdinalWord(pDictNode2,inputword);
					return pDictNode1;
				}
			}
		}
		pDictNode1=CreateNewWord(inputword);		//生词
	}         
	return	pDictNode1;
}

BOOL	IsDigitalWord(char	*Word,int WordLen)
{	//是否为数字串
 char *p;
	for(int i=0; i<WordLen; i++)
		if(!isdigit(Word[i]) )
		{
			if ( (p=strstr(Word,"st"))!=NULL || (p=strstr(Word,"nd"))!=NULL ||
				(p=strstr(Word,"rd"))!=NULL || (p=strstr(Word,"th"))!=NULL )
			{
				if ( (WordLen-i)==2 )
				{
					return TRUE;
				}
				else
					return FALSE;
			}
			else
				return FALSE;
		}
	return	TRUE;
}

BOOL	IsAbreivWord(char *Word)
{
	if(strcmp("Mr",Word) == 0)
		return	TRUE;
	else if(strcmp("Ms",Word) == 0)
		return	TRUE;
	else if(strcmp("Mrs",Word) == 0)
		return	TRUE;
	else if(strcmp("Dr",Word) == 0)
		return	TRUE;
	else if(strcmp("Prof",Word) == 0)
		return	TRUE;
	else if(strcmp("sb",Word) == 0)
		return	TRUE;
	else if(strcmp("sth",Word) == 0)
		return	TRUE;
	else return	FALSE;
}


BOOL isAppellation(char	*Word)
{
	if(strcmp("Mr.",Word) == 0)
		return	TRUE;
	else if(strcmp("Ms.",Word) == 0)
		return	TRUE;
	else if(strcmp("Mrs.",Word) == 0)
		return	TRUE;
	else if(strcmp("Dr.",Word) == 0)
		return	TRUE;
	else if(strcmp("Prof.",Word) == 0)
		return	TRUE;
	else if(strcmp("Miss",Word) == 0)
		return	TRUE;
	else
		return	FALSE;
}

int	IsWordTail(char *Tail)
{
	if(strcmp("s",Tail) == 0)
		return	Tail_s;
	else if(strcmp("d",Tail) == 0)
		return	Tail_d;
	else if(strcmp("re",Tail) == 0)
		return	Tail_re;
	else if(strcmp("ll",Tail) == 0)
		return	Tail_ll;
	else if(strcmp("ve",Tail) == 0)
		return	Tail_ve;
	else if(strcmp("m",Tail) == 0)
		return	Tail_m;
	else if(strcmp("t",Tail) == 0)
		return	Tail_t;
	return	-1;
}

DictNode* CreateNewWord(char * Word)
{
	DictNode* pDictNode;
	int	i;
	pDictNode = new DictNode;
	i = strlen(Word);
	pDictNode->m_nLxhCate = NULL;
	if(i ==1)
		Mystrcpy(pDictNode,"sym",3);
	else if (strstr(Word,"'s")!=0)
		Mystrcpy(pDictNode,"ns",3);
	else
		Mystrcpy(pDictNode,"n",3);

	pDictNode->m_pszEnglish = new char[i+1];
	pDictNode->m_pszOrig = new char[i+1]; 
	
	strcpy(pDictNode->m_pszEnglish,Word);
	strcpy(pDictNode->m_pszOrig,Word);
	pDictNode->m_byDictForm = STYLE_ORIG;
	pDictNode->m_byDictNumber = Sing_Number;
	pDictNode->m_byMaxPhraseLen = DefaMaxPhraseLen;
	pDictNode->m_pNextWordNode = NULL;
	pDictNode->m_pPrevWordNode = NULL;

	pDictNode->m_nEnglishLen = i;
	pDictNode->m_bIsExistOrig = TRUE;
	pDictNode->m_nOrigLen = i;
	pDictNode->m_nWordStyle = 0;
	pDictNode->m_bIsExistAmbig = 0;
	pDictNode->m_pszAmbig = NULL;
	pDictNode->m_nAmbigLen = 0;
	pDictNode->m_nChinNum = 0;
	pDictNode->m_pFirstChin = NULL;
	
	return	pDictNode;
}

//cdq add begin
DictNode* CreateComposeWord(DictNode *pDictNode2,
							DictNode *pDictNode3,
							char * ComposeWord)
{//生成合成词
	DictNode* pDictNode;
	pDictNode = new DictNode;
	char *p;
	int nNewLen;

	int i;
	i=strlen(ComposeWord);
	pDictNode->m_pszEnglish = new char[i+1];
	pDictNode->m_pszOrig = new char[i+1]; 

	pDictNode->m_nLxhCate = NULL;

	strcpy(pDictNode->m_pszEnglish,ComposeWord);
	strcpy(pDictNode->m_pszOrig,ComposeWord);
	pDictNode->m_byDictForm = STYLE_ORIG;
	pDictNode->m_byDictNumber = NULL;
	pDictNode->m_byMaxPhraseLen = DefaMaxPhraseLen;
	pDictNode->m_pNextWordNode = NULL;
	pDictNode->m_pPrevWordNode = NULL;

	pDictNode->m_nEnglishLen = i;
	pDictNode->m_bIsExistOrig = TRUE;
	pDictNode->m_nOrigLen = i;
	pDictNode->m_nWordStyle = 0;
	pDictNode->m_bIsExistAmbig = 0;
	pDictNode->m_pszAmbig = NULL;
	pDictNode->m_nAmbigLen = 0;
	pDictNode->m_nChinNum = 1;


	pDictNode->m_pFirstChin = new DictChin;

	if ( pDictNode2->m_pFirstChin==NULL ||
		pDictNode3->m_pFirstChin==NULL )
	{
		strcat(pDictNode2->m_pszOrig,pDictNode3->m_pszOrig);
		nNewLen=strlen(pDictNode2->m_pszOrig);
					
		pDictNode->m_pFirstChin->m_pszChinese=new char[nNewLen+2];
		strcpy(pDictNode->m_pFirstChin->m_pszChinese,
				pDictNode2->m_pszOrig);
		pDictNode->m_pFirstChin->m_nChineseLen=
				strlen(pDictNode->m_pFirstChin->m_pszChinese);

		pDictNode->m_pFirstChin->m_nCate=Cate_n;
	}
	else if ( SearchCate(pDictNode2,Cate_dig) &&
		 SearchCate(pDictNode3,Cate_dig) )
	{
		strcat(pDictNode2->m_pszEnglish,"-");
		strcat(pDictNode2->m_pszEnglish,pDictNode3->m_pszEnglish);
		nNewLen=strlen(pDictNode2->m_pszEnglish);
					
		pDictNode->m_pFirstChin->m_pszChinese=new char[nNewLen+2];
		strcpy(pDictNode->m_pFirstChin->m_pszChinese,
				pDictNode2->m_pszEnglish);
		pDictNode->m_pFirstChin->m_nChineseLen=
				strlen(pDictNode->m_pFirstChin->m_pszChinese);

		pDictNode->m_pFirstChin->m_nCate=Cate_dig;
	}
	else if ( SearchCate(pDictNode2,Cate_number) &&
		 SearchCate(pDictNode3,Cate_number) &&
		 ((p=strstr(pDictNode3->m_pFirstChin->m_pszChinese,"第"))==NULL) )
	{		
		strcat(pDictNode2->m_pFirstChin->m_pszChinese,pDictNode3->m_pFirstChin->m_pszChinese);
		nNewLen=strlen(pDictNode2->m_pFirstChin->m_pszChinese);
					
		pDictNode->m_pFirstChin->m_pszChinese=new char[nNewLen+2];
		strcpy(pDictNode->m_pFirstChin->m_pszChinese,
				pDictNode2->m_pFirstChin->m_pszChinese);
		pDictNode->m_pFirstChin->m_nChineseLen=
				strlen(pDictNode->m_pFirstChin->m_pszChinese);

		pDictNode->m_pFirstChin->m_nCate=Cate_number;
	}
	else if ( SearchCate(pDictNode2,Cate_number) &&
		 SearchCate(pDictNode3,Cate_number) &&
		 ((p=strstr(pDictNode3->m_pFirstChin->m_pszChinese,"第"))!=NULL) )
	{
		pDictNode3->m_pFirstChin->m_pszChinese=p+2;
		strcat(pDictNode3->m_pFirstChin->m_pszChinese,"分之");
		strcat(pDictNode3->m_pFirstChin->m_pszChinese,
			pDictNode2->m_pFirstChin->m_pszChinese);
		nNewLen=strlen(pDictNode3->m_pFirstChin->m_pszChinese);
					
		pDictNode->m_pFirstChin->m_pszChinese=new char[nNewLen+2];
		strcpy(pDictNode->m_pFirstChin->m_pszChinese,
				pDictNode3->m_pFirstChin->m_pszChinese);
		pDictNode->m_pFirstChin->m_nChineseLen=
				strlen(pDictNode->m_pFirstChin->m_pszChinese);

		pDictNode->m_pFirstChin->m_nCate=Cate_number;
	}
	else if (SearchCate(pDictNode2,Cate_adj))
	{
		while ( pDictNode2->m_pFirstChin->m_nCate != Cate_adj )
		{
			pDictNode2->m_pFirstChin=pDictNode2->m_pFirstChin->m_pNextChin;
		}
		if ( (p=strchr(pDictNode2->m_pFirstChin->m_pszChinese,';'))!=NULL )
		{

⌨️ 快捷键说明

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