Beispiel #1
0
		public string Translate(string inText)
		{
			Grafemat grafemat = new Grafemat();
			
			Mess(this,new CoreEndEventArgs("GrafematStart"));
			ArrayList prText = grafemat.AnalyzeText(inText);
			Mess(this,new CoreEndEventArgs("GrafematEnd"));
			
			Count = 0;
			Scet = 0;
			
			//Считаем слова (для тиков)
			foreach(Predlozhenie curPred in prText)
				for(int i=0;i<curPred.Count;i++)
					Count++;
			
			Count *=2;
						
			MorfologRus morfolog = new MorfologRus();
			
			morfolog.Tick += MorfTickEventHandler;
			
			for(int i=0;i<prText.Count;i++)
			{
				Mess(this,new CoreEndEventArgs("MorfAnalyze"));
				prText[i] = morfolog.MorfAnalyze((Predlozhenie)prText[i]);
				Mess(this,new CoreEndEventArgs("MorfAnalyzeEnd"));
			}
			
			for(int i=0;i<prText.Count;i++)
			{
				Predlozhenie curPred = (Predlozhenie)prText[i];
				Mess(this,new CoreEndEventArgs("DictOpen"));
				curPred.Dict.Open();
				Mess(this,new CoreEndEventArgs("DictOpened"));
				
				//
				//	Второй этап - перевод
				//
				
				for(int j=0;j<curPred.Count;j++)
				{
					Slovo curSlovo = curPred[j];
					
					Mess(this,new CoreEndEventArgs(curSlovo.eSlovo));
					
					switch(curSlovo.chastRechi)
					{
						case ChastRechi.Prichastie:
							curSlovo = VerbModule.Translate(curPred,j);
							curSlovo.eSlovo = "I"+curSlovo.eSlovo.Substring(1);
							break;
						case ChastRechi.Suschestvitelnoe:
							//System.Windows.Forms.MessageBox.Show(curSlovo.eSlovo);
							curSlovo = NounModule.Translate(curPred,j);
							break;
						case ChastRechi.Glagol:
							//System.Windows.Forms.MessageBox.Show(curSlovo.eSlovo);
							curSlovo = VerbModule.Translate(curPred,j);
							break;
						case ChastRechi.Predlog:
							curSlovo = PredlogModule.Translate(curPred,j);
							break;
						default:
							curSlovo = DefaultModule.Translate(curPred,j);
							break;
					}					
					curPred.SetSlovo(curSlovo,j);
					
					Scet++;
					OnTick();
				}
				
				curPred.Dict.Close();
				
				prText[i] = curPred;
			}
			
			string rezult = "";
			
			for(int i=0;i<prText.Count;i++)
			{
				rezult += ((Predlozhenie)prText[i]).ToEString();
			}
			
			if(this.End != null)
				End(this,new CoreEndEventArgs(rezult));
			
			return rezult;
		}
Beispiel #2
0
		//etc...
		
		public string Translate(string inText)
		{
			Grafemat gr = new Grafemat();
			ArrayList prText = gr.AnalyzeTextEl(inText);
			
			Count = 0;
			Scet = 0;
			
			//Считаем слова (для тиков)
			foreach(Predlozhenie curPred in prText)
				for(int i=0;i<curPred.Count;i++)
					Count++;
			
			Count *=2;
			
			for(int i=0;i<prText.Count;i++)
			{
				Predlozhenie curPred = (Predlozhenie)prText[i];
				
				//
				//	Первый этап - анализ
				//
				
				//Нулевой проход - определение частей речи
				
				for(int j=0;j<curPred.Count;j++)
				{
					Slovo curSlovo = curPred[j];
					if(curSlovo.chastRechi != ChastRechi.Znak)
					{
						string eSlovo = curSlovo.eSlovo;
						if(eSlovo.Length == 1)
							curSlovo.chastRechi = ChastRechi.Mestoimenie;
						else
						switch(eSlovo[0])
						{
							case 'Q':
							case 'W':
								curSlovo.chastRechi = ChastRechi.Suschestvitelnoe;
								break;
							case 'F':
								curSlovo.chastRechi = ChastRechi.Predlog;
								break;
							case 'E':
								curSlovo.chastRechi = ChastRechi.Prilagatelnoe;
								break;
							case 'I':
								curSlovo.chastRechi = ChastRechi.Prichastie;
								break;
							case 'A':
								curSlovo.chastRechi = ChastRechi.Mestoimenie;
								break;
							case 'R':
							case 'T':
							case 'Y':
							case 'U':
							case 'O':
								curSlovo.chastRechi = ChastRechi.Glagol;
								break;
							//etc...
							default:
								curSlovo.chastRechi = ChastRechi.Mezhdometie;
								break;
						}
					}
					
					curPred.SetSlovo(curSlovo,j);
				}
				
				// Первый проход - существительные
				
				for(int j=0;j<curPred.Count;j++)
				{
					Slovo curSlovo = curPred[j];
					if(curSlovo.chastRechi != ChastRechi.Znak)
					{
						string eSlovo = curSlovo.eSlovo;
						if(eSlovo[0]=='Q' || eSlovo[0]=='W')
						{
							curSlovo = NounModule.Analyze(curPred,j);	
							Scet++;
							OnTick();
						}
					}
					
					curPred.SetSlovo(curSlovo,j);
				}
				
				// Полуторный проход - глаголы
				
				for(int j=0;j<curPred.Count;j++)
				{
					Slovo curSlovo = curPred[j];
					if(curSlovo.chastRechi != ChastRechi.Znak)
					{
						string eSlovo = curSlovo.eSlovo;
						if(eSlovo[0]=='R' || eSlovo[0]=='T' || eSlovo[0]=='Y' || eSlovo[0]=='U')
						{
							curSlovo = VerbModule.Analyze(curPred,j);	
							Scet++;
							OnTick();
						}
					}
					
					curPred.SetSlovo(curSlovo,j);
				}
				
				//Второй проход - все остальное.
				for(int j=0;j<curPred.Count;j++)
				{
					Slovo curSlovo = curPred[j];
					if(curSlovo.chastRechi != ChastRechi.Znak)
					{
						string eSlovo = curSlovo.eSlovo;
						
						//
						// Заменить на соответствующее для данной части речи.
						//
						if(eSlovo[0]=='E' || eSlovo[0]=='I')
						{
							curSlovo = AdjectiveModule.Analyze(curPred,j);
							Scet++;
							OnTick();
						}
						if(eSlovo[0]=='F')
						{
							curSlovo = PredlogModule.Analyze(curPred,j);
							Scet++;
							OnTick();
						}
						
						if(eSlovo[0]=='A')
						{
							curSlovo = OtherModule.Analyze(curPred,j);
							Scet++;
							OnTick();
						}
					}
					
					curPred.SetSlovo(curSlovo,j);
				}	
				
				//
				//	Второй этап - перевод
				//
				
				for(int j=0;j<curPred.Count;j++)
				{
					Slovo curSlovo = curPred[j];
					try
					{
					
						switch(curSlovo.chastRechi)
						{
							case ChastRechi.Suschestvitelnoe:
								curSlovo = NounModule.Translate(curPred,j);
								break;
							case ChastRechi.Prilagatelnoe:
								curSlovo = AdjectiveModule.Translate(curPred,j);
								break;
							case ChastRechi.Prichastie:
								curSlovo = AdjectiveModule.Translate(curPred,j);
								break;
							case ChastRechi.Glagol:
								curSlovo = VerbModule.Translate(curPred,j);
								break;
							case ChastRechi.Predlog:
								curSlovo = PredlogModule.Translate(curPred,j);
								break;
							case ChastRechi.Mestoimenie:
								curSlovo = OtherModule.Translate(curPred,j);
								break;
							default:
								curSlovo = DefaultModule.Translate(curPred,j);
								break;
						}
					}
					catch
					{}
					
					curPred.SetSlovo(curSlovo,j);
					Scet++;
					OnTick();
				}
				
				prText[i] = curPred;
			}
			
			string rezult = "";
			
			Scet=Count;
			OnTick();
			
			for(int i=0;i<prText.Count;i++)
			{
				rezult += ((Predlozhenie)prText[i]).ToRString();
			}
			
			if(this.End != null)
				End(this,new CoreEndEventArgs(rezult));
			
			return rezult;
		}