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

📄 tense.cpp

📁 计算机英汉机器翻译系统中的英语词性标注方法实现
💻 CPP
📖 第 1 页 / 共 5 页
字号:
			pDictNode2->m_pFirstChin->m_nChineseLen=
					p-(pDictNode2->m_pFirstChin->m_pszChinese);					
			p[0]='\0';
		}	
		if ( strstr(ComposeWord,"ed")!=0 )
		{
			if (SearchCate(pDictNode3,Cate_n))
			{
				while ( pDictNode3->m_pFirstChin->m_nCate != Cate_n )
				{
					pDictNode3->m_pFirstChin=pDictNode3->m_pFirstChin->m_pNextChin;
				}
			}
		}
		if ( (p=strchr(pDictNode3->m_pFirstChin->m_pszChinese,';'))!=NULL )
		{
			pDictNode3->m_pFirstChin->m_nChineseLen=
					p-(pDictNode3->m_pFirstChin->m_pszChinese);
			p[0]='\0';
		}
		strcat(pDictNode2->m_pFirstChin->m_pszChinese,
			pDictNode3->m_pFirstChin->m_pszChinese);
		nNewLen=pDictNode2->m_pFirstChin->m_nChineseLen
					+pDictNode3->m_pFirstChin->m_nChineseLen;
		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);

		if (  strstr(ComposeWord,"ed")!=0 ||
				pDictNode3->m_byDictForm==STYLE_ED ||
				pDictNode3->m_byDictForm==STYLE_ED1 ||
				pDictNode3->m_byDictForm==STYLE_ED2 ||
				pDictNode3->m_byDictForm==STYLE_ING )
			pDictNode->m_pFirstChin->m_nCate=Cate_adj;
		else if ( SearchCate(pDictNode3,Cate_n) )
			pDictNode->m_pFirstChin->m_nCate=Cate_n;
		else if ( SearchCate(pDictNode3,Cate_v) )
			pDictNode->m_pFirstChin->m_nCate=Cate_vt;
		else
			pDictNode->m_pFirstChin->m_nCate=Cate_n;
	}
	else if (SearchCate(pDictNode2,Cate_adv))
	{
		while ( pDictNode2->m_pFirstChin->m_nCate != Cate_adv )
		{
			pDictNode2->m_pFirstChin=pDictNode2->m_pFirstChin->m_pNextChin;
		}
		if ( (p=strchr(pDictNode2->m_pFirstChin->m_pszChinese,';'))!=NULL )
		{
			pDictNode2->m_pFirstChin->m_nChineseLen=
					p-(pDictNode2->m_pFirstChin->m_pszChinese);					
			p[0]='\0';
		}	
		if( SearchCate(pDictNode3,Cate_adj) ||
			pDictNode3->m_byDictForm==STYLE_ED ||
				pDictNode3->m_byDictForm==STYLE_ED1 ||
				pDictNode3->m_byDictForm==STYLE_ED2 ||
				pDictNode3->m_byDictForm==STYLE_ING )
		{
			pDictNode->m_pFirstChin->m_nCate=Cate_adj;
			while ( pDictNode3->m_pFirstChin->m_nCate != Cate_adj && 
				pDictNode3->m_pFirstChin->m_nCate != Cate_vi &&
				pDictNode3->m_pFirstChin->m_nCate != Cate_vt &&
				pDictNode3->m_pFirstChin->m_nCate != Cate_vd &&
				pDictNode3->m_pFirstChin->m_nCate != Cate_vl)
			{
				pDictNode3->m_pFirstChin=pDictNode3->m_pFirstChin->m_pNextChin;
			}
		}
		else
			pDictNode->m_pFirstChin->m_nCate=Cate_n;
		if ( (p=strchr(pDictNode3->m_pFirstChin->m_pszChinese,';'))!=NULL )
		{
			pDictNode3->m_pFirstChin->m_nChineseLen=
					p-(pDictNode3->m_pFirstChin->m_pszChinese);
			p[0]='\0';
		}
		strcat(pDictNode2->m_pFirstChin->m_pszChinese,
			pDictNode3->m_pFirstChin->m_pszChinese);
		nNewLen=pDictNode2->m_pFirstChin->m_nChineseLen
					+pDictNode3->m_pFirstChin->m_nChineseLen;
		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);


	}
	else if	(SearchCate(pDictNode2,Cate_n))
	{
		while ( pDictNode2->m_pFirstChin->m_nCate != Cate_n )
		{
			pDictNode2->m_pFirstChin=pDictNode2->m_pFirstChin->m_pNextChin;
		}
		if ( (p=strchr(pDictNode2->m_pFirstChin->m_pszChinese,';'))!=NULL )
		{
			pDictNode2->m_pFirstChin->m_nChineseLen=
					p-(pDictNode2->m_pFirstChin->m_pszChinese);					
			p[0]='\0';
		}	
		if( SearchCate(pDictNode3,Cate_conj))
		{
			pDictNode->m_pFirstChin->m_nCate=Cate_adj;
			while ( pDictNode3->m_pFirstChin->m_nCate != Cate_conj )
			{
				pDictNode3->m_pFirstChin=pDictNode3->m_pFirstChin->m_pNextChin;
			}
		}
		else if( SearchCate(pDictNode3,Cate_adj) ||
			pDictNode3->m_byDictForm==STYLE_ED ||
			pDictNode3->m_byDictForm==STYLE_ED1 ||
			pDictNode3->m_byDictForm==STYLE_ED2 ||
				pDictNode3->m_byDictForm==STYLE_ING )
		{
			pDictNode->m_pFirstChin->m_nCate=Cate_adj;
			if (pDictNode3->m_pszAmbig!=NULL && (strstr(pDictNode3->m_pszAmbig,"adj")!=0 ||
				strstr(pDictNode3->m_pszAmbig,"/v")!=0))
			{
				while ( pDictNode3->m_pFirstChin->m_nCate != Cate_adj && 
					 pDictNode3->m_pFirstChin->m_nCate != Cate_vi &&
					pDictNode3->m_pFirstChin->m_nCate != Cate_vt &&
					pDictNode3->m_pFirstChin->m_nCate != Cate_vd &&
					pDictNode3->m_pFirstChin->m_nCate != Cate_vl)
				{
					pDictNode3->m_pFirstChin=pDictNode3->m_pFirstChin->m_pNextChin;
				}
			}
		}
		else if ( SearchCate(pDictNode3,Cate_v) )  
		{
			pDictNode->m_pFirstChin->m_nCate=Cate_vt;
			while ( pDictNode3->m_pFirstChin->m_nCate != Cate_vi &&
				pDictNode3->m_pFirstChin->m_nCate != Cate_vt &&
				pDictNode3->m_pFirstChin->m_nCate != Cate_vd &&
				pDictNode3->m_pFirstChin->m_nCate != Cate_vl)
			{
				pDictNode3->m_pFirstChin=pDictNode3->m_pFirstChin->m_pNextChin;
			}
		}
		else
			pDictNode->m_pFirstChin->m_nCate=Cate_n;
		if ( (p=strchr(pDictNode3->m_pFirstChin->m_pszChinese,';'))!=NULL )
		{
			pDictNode3->m_pFirstChin->m_nChineseLen=
					p-(pDictNode3->m_pFirstChin->m_pszChinese);
			p[0]='\0';
		}
		strcat(pDictNode2->m_pFirstChin->m_pszChinese,
			pDictNode3->m_pFirstChin->m_pszChinese);
		nNewLen=pDictNode2->m_pFirstChin->m_nChineseLen
					+pDictNode3->m_pFirstChin->m_nChineseLen;
		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);

	}
	else if	(SearchCate(pDictNode2,Cate_v))
	{
		if ( (p=strchr(pDictNode2->m_pFirstChin->m_pszChinese,';'))!=NULL )
		{
			pDictNode2->m_pFirstChin->m_nChineseLen=
					p-(pDictNode2->m_pFirstChin->m_pszChinese);					
			p[0]='\0';
		}	
		if ( (p=strchr(pDictNode3->m_pFirstChin->m_pszChinese,';'))!=NULL )
		{
			pDictNode3->m_pFirstChin->m_nChineseLen=
					p-(pDictNode3->m_pFirstChin->m_pszChinese);
			p[0]='\0';
		}
		strcat(pDictNode2->m_pFirstChin->m_pszChinese,
			pDictNode3->m_pFirstChin->m_pszChinese);
		nNewLen=pDictNode2->m_pFirstChin->m_nChineseLen
					+pDictNode3->m_pFirstChin->m_nChineseLen;
		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_n;
	}
	else
	{
		if ( (p=strchr(pDictNode2->m_pFirstChin->m_pszChinese,';'))!=NULL )
		{
			pDictNode2->m_pFirstChin->m_nChineseLen=
					p-(pDictNode2->m_pFirstChin->m_pszChinese);					
			p[0]='\0';
		}	
		if ( (p=strchr(pDictNode3->m_pFirstChin->m_pszChinese,';'))!=NULL )
		{
			pDictNode3->m_pFirstChin->m_nChineseLen=
					p-(pDictNode3->m_pFirstChin->m_pszChinese);
			p[0]='\0';
		}
		strcat(pDictNode2->m_pFirstChin->m_pszChinese,
			pDictNode3->m_pFirstChin->m_pszChinese);
		nNewLen=pDictNode2->m_pFirstChin->m_nChineseLen
					+pDictNode3->m_pFirstChin->m_nChineseLen;
		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_n;
	}


	return pDictNode;

}

DictNode* CreateOrdinalWord(DictNode *pDictNode2,char *Word)
{
	DictNode* pDictNode;
	char temp[150];
	int	i;
	pDictNode = new DictNode;
	i = strlen(Word);
	pDictNode->m_nLxhCate = NULL;

	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;

	strcpy(temp,"第");
	strcat(temp,pDictNode2->m_pFirstChin->m_pszChinese);
	pDictNode->m_pFirstChin = new DictChin;
	i = strlen(temp);

	pDictNode->m_pFirstChin->m_pszChinese=new char[i+1];
	strcpy(pDictNode->m_pFirstChin->m_pszChinese,temp);
	pDictNode->m_pFirstChin->m_nChineseLen=
			strlen(pDictNode->m_pFirstChin->m_pszChinese);
	pDictNode->m_pFirstChin->m_nCate=Cate_number;
	pDictNode->m_pFirstChin->m_nSlotNum = 1;
	pDictNode->m_pFirstChin->m_pwSlotLink = 
		new WORD[pDictNode->m_pFirstChin->m_nSlotNum*2+1];
	memcpy( pDictNode->m_pFirstChin->m_pwSlotLink,&Sem_OrdnlNU,sizeof(WORD));
	Mystrcpy(pDictNode,"number",3);

	return	pDictNode;
}//cdq add end


void	DictWordInit(DictNode* pDictNode)	//called by Caim
{	//in diction.cpp	DictWordInit(m_pDictNode);
	pDictNode->m_pNextWordNode = NULL;
	pDictNode->m_pPrevWordNode = NULL;

	pDictNode->m_byDictForm = Orig_Form;
	pDictNode->m_nLxhCate = NULL;
	pDictNode->m_nLxhCateLen = 0;
	pDictNode->m_byDictGenetive = No_Genetive;		//1:所有格
	pDictNode->m_cDictTense = Pre_Tense;			//时态:0现在,1过去,2将来,3过去将来
	pDictNode->m_cDictAspect = Simple_Aspect;		//体态:0一般,1进行,2完成,3完成进行
	pDictNode->m_cDictVoice = Active_Voice;			//0:主动,1:被动
	pDictNode->m_cDictNegative = Positive;			//0:肯定,1:否定,
	pDictNode->m_byDictPerson = Third_Person;		//1:第一人称,2:第二人称,3:第三人称
	pDictNode->m_byDictNumber = Sing_Number;		//0:单数,1:复数

	if(pDictNode->m_bIsExistOrig != FALSE)
		pDictNode->m_byDictForm = pDictNode->m_nWordStyle;
	else
		pDictNode->m_byDictForm = Orig_Form;
	pDictNode->m_byDictNumber = Sing_Number;
	pDictNode->m_byDictGenetive = No_Genetive;
	if(pDictNode->m_bIsExistOrig == FALSE || 
		pDictNode->m_pszOrig==NULL)
	{
		pDictNode->m_pszOrig = Mystrcpy(pDictNode,
			pDictNode->m_pszEnglish,2);

	}
	
}

void LxhFreeDictNode(DictNode *pDictNode)	//called by Caim
{
	if(pDictNode != NULL && pDictNode->m_nLxhCate != NULL)
	{
		delete pDictNode->m_nLxhCate;
		pDictNode->m_nLxhCate = NULL;
		pDictNode->m_nLxhCateLen = 0;
	}
}


BOOL	SearchCate(DictNode *pDictNode,int	Cate)
{
	DictChin *m_pChin;
	if(pDictNode == NULL)
		return	FALSE;
	m_pChin = pDictNode->m_pFirstChin;
	while(m_pChin != NULL)
	{
		if(Cate == Cate_v)
		{
			if(m_pChin->m_nCate == Cate_vd)
				return	TRUE;
			else if(m_pChin->m_nCate == Cate_ved)
				return	TRUE;
			else if(m_pChin->m_nCate == Cate_vi)
				return	TRUE;
			else if(m_pChin->m_nCate == Cate_ving)
				return	TRUE;
			else if(m_pChin->m_nCate == Cate_vl)
				return	TRUE;
			else if(m_pChin->m_nCate == Cate_vt)
				return	TRUE;
		}
		else
		if(m_pChin->m_nCate == Cate)
			return	TRUE;
		m_pChin = m_pChin->m_pNextChin;
	}
	return	FALSE;
}

BOOL SearchHead(DictNode *pDictNode,int	Head)
{
	DictChin *m_pChin;
	if(pDictNode == NULL)
		return	FALSE;
	m_pChin = pDictNode->m_pFirstChin;
	while(m_pChin != NULL)
	{
		if(m_pChin->m_nHead == Head)
			return	TRUE;
		else
			m_pChin = m_pChin->m_pNextChin;
	}
	return	FALSE;
}

BOOL SearchCase(DictNode *pDictNode,int	Case)
{
	DictChin *m_pChin;
	int	i;
	if(pDictNode == NULL)
		return	FALSE;
	m_pChin = pDictNode->m_pFirstChin;
	while(m_pChin != NULL)
	{
		for(i=0;i<m_pChin->m_nSlotNum;i++)
			if(m_pChin->m_pwSlotLink[i] == Case)
				break;
		if(i < m_pChin->m_nSlotNum)
			return	TRUE;
		else
			m_pChin = m_pChin->m_pNextChin;
	}
	return	FALSE;
}

char * Mystrcpy(DictNode *pDictNode,char *Word,int Option)
{	//Option:1, resource; 2: Original, 3: LxhCate
	int	StrLen = strlen(Word)+1;
	if(Option == 1)
	{
		if(pDictNode->m_pszEnglish != NULL)
			delete pDictNode->m_pszEnglish;
		pDictNode->m_pszEnglish = new char[StrLen];
		strcpy(pDictNode->m_pszEnglish,Word);
		pDictNode->m_nEnglishLen = StrLen-1;
		return	pDictNode->m_pszEnglish;
	}
	else if (Option ==2)
		{
		if(pDictNode->m_pszOrig != NULL)
			delete pDictNode->m_pszOrig;
		pDictNode->m_pszOrig = new char[StrLen];
		strcpy(pDictNode->m_pszOrig,Word);
		pDictNode->m_nOrigLen = StrLen-1;
		return	pDictNode->m_pszOrig;
	}
	else if (Option == 3)
		{
		if(pDictNode->m_nLxhCate != NULL)
			delete pDictNode->m_nLxhCate;
		pDictNode->m_nLxhCate = new char[StrLen];
		strcpy(pDictNode->m_nLxhCate,Word);
		pDictNode->m_nLxhCateLen = StrLen-1;
		return	pDictNode->m_pszOrig;
	}
	return	NULL;
}


void	FreeSentence(SentenceType * Sen)
{		//释放句子结点
	DictNode	* pDict1, *pDict2;
	pDict1 = Sen->m_pWordFirst;
	while(pDict1 != NULL)
	{
		pDict2 = pDict1->m_pNextWordNode;
		g_objLexSearch.FreeNode(

⌨️ 快捷键说明

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