예제 #1
0
		private void CopyCharact(Predlozhenie pr, int place, ref Slovo analyzed)
		{
			
			int i=(place-4>=0?place-4:0);
			int max = (place+4>pr.Count?pr.Count:place+4);
			while(i<max)
			{
            	Slovo slovpoisk = pr[i];
            	if (slovpoisk.chastRechi == ChastRechi.Suschestvitelnoe)
            	{
                	
            		break;
            	}
                else i++;
            }
            if (i != pr.Count)
            {
            	analyzed.ruSlovo.ruChislo = pr[i].ruSlovo.ruChislo;
               analyzed.ruSlovo.ruPadezh = pr[i].ruSlovo.ruPadezh;
               analyzed.ruSlovo.ruRod = pr[i].ruSlovo.ruRod;
               //throw new Exception( pr[i].rSlovo);
              
            }
            else
            {
                analyzed.ruSlovo.ruChislo = RuChislo.Edinstvennoe;
                analyzed.ruSlovo.ruPadezh = RuPadezh.Imenitelniy;
                analyzed.ruSlovo.ruRod = RuRod.Muzhskoj;
            }
		}
예제 #2
0
		public Slovo Translate(Predlozhenie pr,int place)
		{
			Slovo analyzed = pr[place];
			
			bool translated = false;
			
			if(analyzed.eSlovo == "FQV" || analyzed.eSlovo == "FZJ" || analyzed.eSlovo == "FZP")
			{
				analyzed.rSlovo = "";
				translated = true;
			}
			else if(analyzed.eSlovo == "FT")
			{
				if(place-1>0 && pr[place-1].eSlovo[0] != 'Q')
				{
					analyzed.rSlovo = "";
					translated = true;
				}
			}
			if(!translated)
			{
				Dictionary dict = new Dictionary();
				ArrayList al = dict.GetStrict(analyzed.eSlovo);
	            if(al.Count > 0)
				{
					analyzed.rSlovo = ((DictSlovo)al[0]).Rus;
				}
				else
	            {
					analyzed.rSlovo = analyzed.eSlovo;
				}
			}
			
			return analyzed;
		}	
예제 #3
0
		public Slovo Translate(Predlozhenie pr,int place)
		{
			Slovo analyzed = pr[place];
			
			Sklonenie(ref analyzed);
			
			return analyzed;
		}	
예제 #4
0
		protected void PreAnalyze(Predlozhenie pr,int place,ref Slovo slovo)
		{
			AnalyzePadezh(pr,place,ref slovo);
			AnalyzeChislo(ref slovo);
			AnalyzeRod(ref slovo);
			FindOsnova(ref slovo);
			TranslateOsnova(ref slovo);
		}
예제 #5
0
		public Slovo Analyze(Predlozhenie pr,int place)
		{
			Slovo analyzed = pr[place];
			
			PreAnalyze(pr,place,ref analyzed);
			PostAnalyze(pr,place,ref analyzed);			
			
			return analyzed;
		}
예제 #6
0
        public Slovo Translate(Predlozhenie pr, int place)
        {
            Slovo analyzed = pr[place];
            //AnalyzeCharacteristicsFromNoun(pr, place, ref analyzed);
            if (pr[place].chastRechi == ChastRechi.Prilagatelnoe)
                Sklonenie(ref analyzed);
            if (pr[place].chastRechi == ChastRechi.Prichastie)
                SpryajeniePrich(ref analyzed);

            return analyzed;
        }
예제 #7
0
		public Slovo Analyze(Predlozhenie pr,int place)
		{
			Slovo analyzed = pr[place];
			
			//if(analyzed.chastRechi == ChastRechi.Mestoimenie)
				CopyCharact(pr,place,ref analyzed);
			
			
			
			return analyzed;
		}
예제 #8
0
        public Slovo Analyze(Predlozhenie pr, int place)
        {

            Slovo analyzed = pr[place];
            //AnalyzeStepenSravnenia(ref analyzed);
            AnalyzeCharacteristicsFromNoun(pr, place, ref analyzed);
            FindOsnova(ref analyzed);

            TranslateOsnova(ref analyzed);

            return analyzed;
        }
예제 #9
0
		public void TranslateOsnova(ref Predlozhenie pr,ref Slovo slovo)
		{
			ArrayList al = pr.Dict.GetStrictRusEx(slovo.eSlovo);
            if(al.Count > 0)
			{
				slovo.eSlovo = ((DictSlovo)al[0]).El;
			}
			else
            {
				slovo.eSlovo = pr.Dict.CreateNewSlovoEx(slovo);
			}
		}
예제 #10
0
		public Slovo Translate(Predlozhenie pr,int place)
		{
			Slovo analyzed = pr[place];
			
			TranslateOsnova(ref pr,ref analyzed);
			Chislo(ref analyzed);
			Rod(ref analyzed);
			Padezh(ref pr,place,ref analyzed);
			
			pr.SetSlovo(analyzed,place);
			
			return analyzed;
		}
예제 #11
0
		public void Padezh(ref Predlozhenie pr,int place, ref Slovo slovo)
		{
			string ppred = "";
			
			switch(slovo.ruSlovo.ruPadezh)
			{
				case RuPadezh.Imenitelniy:
					break;
				case RuPadezh.Roditelniy:
					ppred = "FQV";
					break;
				case RuPadezh.Vinitelniy:
					ppred = "FF";
					break;
				case RuPadezh.Datelniy:
					ppred = "FZP";
					break;
				case RuPadezh.Tvoritelniy:
					ppred = "FT";
					break;
				case RuPadezh.Predlozhniy:
					ppred = "FZJ";
					break;
			}
			
			int i = place-1;
			
			while(i>0 && (pr[i].chastRechi == ChastRechi.Prichastie || pr[i].chastRechi == ChastRechi.Prilagatelnoe || pr[i].chastRechi == ChastRechi.Mestoimenie))
			{
				i= i-1;
			}
			
			if(i>=0 && pr[i].chastRechi != ChastRechi.Predlog)
			{
				Slovo ts = pr[i];
				ts.eSlovo = ts.eSlovo + " "+ppred;
				pr.SetSlovo(ts,i);
			}
			else
			{
				if(i>=0 && pr[i].eSlovo != ppred)
				{
					Slovo ts = pr[i];
					ts.eSlovo = ts.eSlovo + " "+ppred;
					pr.SetSlovo(ts,i);
				}
			}
		}
예제 #12
0
		public Slovo Translate(Predlozhenie pr,int place)
		{
			Slovo analyzed = pr[place];
			
			ArrayList al = pr.Dict.GetStrictRusEx(analyzed.eSlovo);
            if(al.Count > 0)
			{
				analyzed.eSlovo = ((DictSlovo)al[0]).El;
			}
			else
            {
				analyzed.eSlovo = pr.Dict.CreateNewSlovoEx(analyzed);
			}
			
			return analyzed;
		}	
예제 #13
0
		public Slovo Translate(Predlozhenie pr,int place)
		{
			Slovo analyzed = pr[place];
			
			Dictionary dict = new Dictionary();
			ArrayList al = dict.GetStrict(analyzed.eSlovo);
            if(al.Count > 0)
			{
				analyzed.rSlovo = ((DictSlovo)al[0]).Rus;
			}
			else
            {
				analyzed.rSlovo = analyzed.eSlovo;
			}
			
			return analyzed;
		}	
예제 #14
0
		public Slovo Translate(Predlozhenie pr,int place)
		{
			Slovo analyzed = pr[place];
			
			Dictionary dict = new Dictionary();
			ArrayList al = dict.GetStrict(analyzed.eSlovo);
            if(al.Count > 0)
			{
				analyzed.rSlovo = ((DictSlovo)al[0]).Rus;
			}
			else
            {
				analyzed.rSlovo = analyzed.eSlovo;
			}
			
		//	if(analyzed.chastRechi == ChastRechi.Mestoimenie)
				analyzed.rSlovo = MestChange(analyzed,analyzed.rSlovo);
			
			return analyzed;
		}	
예제 #15
0
		Slovo PostAnalyzePadezh(Predlozhenie pr,int place)
		{
			Slovo s = pr[place];
			int pl = place-1;
			
			if(pl>=0)
			{
				Slovo prev = (Slovo)pr[pl];
						
				while(pl>0&&(prev.chastRechi == ChastRechi.Prilagatelnoe || prev.chastRechi == ChastRechi.ChislitelnoePoryadkovoe || prev.chastRechi == ChastRechi.Chislitelnoe))
				{
					pl--;
					prev = (Slovo)pr[pl];
				}
				
				if(prev.chastRechi == ChastRechi.Predlog)
				{
				//	Slovo prev = (Slovo)pr[place-1];
									
					if(prev.rSlovo == "к")
						s.ruSlovo.ruPadezh = RuPadezh.Datelniy;
					else if(prev.rSlovo == "по")
						s.ruSlovo.ruPadezh = RuPadezh.Datelniy;
					else if(prev.rSlovo == "без")
						s.ruSlovo.ruPadezh = RuPadezh.Roditelniy;
					else if(prev.rSlovo == "о")
						s.ruSlovo.ruPadezh = RuPadezh.Predlozhniy;
				/*	else if(prev.rSlovo == "с")
						s.ruSlovo.ruPadezh = RuPadezh.Tvoritelniy;					*/
				}
			}
			
			return s;
		}
예제 #16
0
		public Slovo Analyze(Predlozhenie pr,int place)
		{
			Slovo analyzed = pr[place];
			
			return analyzed;
		}
예제 #17
0
		protected void AnalyzePadezh(Predlozhenie pr,int place,ref Slovo slovo)
		{
			int i = place-1;
			
			while(i>0 && (pr[i].chastRechi == ChastRechi.Prilagatelnoe || pr[i].chastRechi == ChastRechi.Prichastie || pr[i].chastRechi == ChastRechi.Mestoimenie))
			{
				i = i-1;
			}
			
			if(pr[i]!=null && pr[i].chastRechi == ChastRechi.Predlog)
			{
				Slovo predlog = pr[i];
				switch(predlog.eSlovo)
				{
					case "FF":
						slovo.padezh = Padezh.Vinitelnij;
						break;
					case "FQV":
					case "FJB":
						slovo.padezh = Padezh.Prityazhatelnij;
						break;
					case "FZP":
						slovo.padezh = Padezh.Datelnij;
						break;
					case "FT":
						slovo.padezh = Padezh.Tvoritelnij;						
						break;
					case "FR":
						slovo.padezh = Padezh.Instrumentalnij;
						break;
					case "FZJ":
						slovo.padezh = Padezh.Prisvyazochnij;
						break;
					case "FOB":
						slovo.padezh = Padezh.Dejstviya;
						break;
					case "FZO":
						slovo.padezh = Padezh.Predmeta;
						break;
					case "FZE":
						slovo.padezh = Padezh.Napravleniya;
						break;
					case "FA":
						slovo.padezh = Padezh.Mestoprebivaniya;
						break;
					case "FWV":
						slovo.padezh = Padezh.Obrasheniya;
						break;
					case "FSVE":
						slovo.padezh = Padezh.Avtora;
						break;
					case "FRZF":
						slovo.padezh = Padezh.Nazvaniya;
						break;
					case "FVA":
						slovo.padezh = Padezh.Celi;
						break;
					case "FFVY":
						slovo.padezh = Padezh.Prichini;
						break;
					case "FFV":
						slovo.padezh = Padezh.Sledstviya;
						break;					
				}
			}
			else
			{
				slovo.padezh = Padezh.Imenitelnij;
			}				
		}
예제 #18
0
		public void PostAnalyze(Predlozhenie pr,int place,ref Slovo slovo)
		{
			PostAnalyzeRod(ref slovo);
			PostAnalyzePadezh(pr,place,ref slovo);			
		}
예제 #19
0
		 public Slovo Translate(Predlozhenie a, int b)//для перевода русских глаголов на эльюнди
        {
		 	bool glag = true;
            c = new Slovo();
            c = a[b];
            if (a == null || a[b] == null) return c;
            if (c.rSlovo == "") return c;
            //Dictionary dict = a.Dict;
            
            //c.eSlovo = c.eSlovo.ToUpper(); - он вообще в словарь заглядывал?? /pas/
            
            string ruInf = a[b].eSlovo;
            if(a[b].eSlovo.Substring(a[b].eSlovo.Length-2)=="ся")
            {
            	ruInf = a[b].eSlovo.Substring(0,a[b].eSlovo.Length-2);
            	c.zalog = Zalog.Vozvratniy;
            }
            //throw new Exception(ruInf);
            ArrayList ar = a.Dict.GetStrictRusEx(ruInf);
            c.rSlovo = a[b].eSlovo;
            c.eSlovo = ar.Count>0?((DictSlovo)ar[0]).El:"";
            if(c.naklonenie == Naklonenie.Infinitiv)
            {
            	if(c.zalog == Zalog.Vozvratniy)
            		c.eSlovo = c.eSlovo+"-A";
            	return c;
            }
            Regex reg = new Regex(@"(?<часть1>.{1,})(?<часть2>((я|а|и)сь)|(вши))(?<часть3>(сь)?)");
            Match mreg = reg.Match(c.rSlovo);
            if (mreg.Success && (mreg.Groups["часть1"].Value + mreg.Groups["часть2"].Value + mreg.Groups["часть3"].Value == c.rSlovo)) glag = false;
            else
            {
                char s = c.rSlovo[c.rSlovo.Length - 1];
                if (s == 'а' || /*s == 'я' ||*/ s == 'в' || s == 'и') glag = false;
            }
            if (c.eSlovo != "")
            {
                if (c.eSlovo[0] == 'R' || c.eSlovo[0] == 'T' || c.eSlovo[0] == 'Y' || c.eSlovo[0] == 'U' || c.eSlovo[0] == 'O')
                {
                   
                	c = HaractEl(c);
                    if (!glag) c.eSlovo = GlagModule.ZamLit(c.eSlovo, 'O', 0);
                }
            }
            else
            {
            	c.eSlovo = ruInf;
            	c.eSlovo = a.Dict.CreateNewSlovoEx(c);

            	/*
            	//ересь
                //на входе c.rSlovo
                //.......
                //код по постановке русского глагола или деепричастия в инифинитив глагола без приставок
                //.......
                //на выходе в c.rSlovo должен быть инфинитив русского глагола 
                c.eSlovo = dict.TranslateRus(a[b].rSlovo);
                if (c.eSlovo != "")
                {
                    if (c.eSlovo[0] == 'R' || c.eSlovo[0] == 'T' || c.eSlovo[0] == 'Y' || c.eSlovo[0] == 'U' || c.eSlovo[0] == 'O')
                    {
                        c = HaractEl(c);
                        if (!glag) c.eSlovo = GlagModule.ZamLit(c.eSlovo, 'O', 0);
                    }
                }
                else
                {
                    //переводим как любой перевод (стр.160-161)
                    //требуется глобальная переменная (например int COUNT в головном модуле)
                    int COUNT = 0;
                    if (!glag) c.eSlovo = 'O' + "-N-" + (++COUNT).ToString();
                    else
                    {
                        switch (c.vremya)
                        {
                            case Vremya.Buduschee: c.eSlovo = 'U' + "-N-" + (++COUNT).ToString(); break;
                            case Vremya.Nastoyaschee: c.eSlovo = 'T' + "-N-" + (++COUNT).ToString(); break;
                            case Vremya.Proshedshee: c.eSlovo = 'Y' + "-N-" + (++COUNT).ToString(); break;
                            default: c.eSlovo = 'R' + "-N-" + (++COUNT).ToString(); break;
                        }
                    }
                }
                */

            }
            return c;
        }
예제 #20
0
 public Slovo Analyze(Predlozhenie a, int b)
 {
     haract = Haract.глагол;
     c = new Slovo();
     if (a == null || a[b] == null) return c;
     c = a[b];
     if (c.eSlovo == "") return c;
     predl = new Predlozhenie();
     predl = a;
     pozition_predl = b;
     c.eSlovo = c.eSlovo.ToUpper();
     switch (c.eSlovo[0])
     {
         case 'R'://[та] неопред.форма (инфинитив)
             c.naklonenie = Naklonenie.Infinitiv;
             Analize();
             break;
         case 'T'://[ча] настоящее время изъяв. накл.
             c.naklonenie = Naklonenie.Izjavitelnoe;
             c.vremya = Vremya.Nastoyaschee;
             Analize();
             break;
         case 'Y'://[ка] прошедшее время изъяв. накл.
             c.naklonenie = Naklonenie.Izjavitelnoe;
             c.vremya = Vremya.Proshedshee;
             Analize();
             break;
         case 'U'://[ша] будущее время изъяв. накл.
             c.naklonenie = Naklonenie.Izjavitelnoe;
             c.vremya = Vremya.Buduschee;
             Analize();
             break;
         case 'O'://[ма] деепричастие
             c.naklonenie = Naklonenie.Izjavitelnoe;
             haract = Haract.деепричастие;
             c.vremya = Vremya.Nastoyaschee;
             c.eSlovo = ZamLit(c.eSlovo, 'T', 0);
             Analize();
             c.eSlovo = ZamLit(c.eSlovo, 'O', 0);
             break;
     }
     return c;
 }
예제 #21
0
 public Slovo Translate(Predlozhenie a, int b)
 {
     c = new Slovo();
     pozition_predl = b;
     predl = a;
     if (a == null || a[b] == null) return c;
     c = a[b];
     if (c.eSlovo == "") return c;
     c.eSlovo = c.eSlovo.ToUpper();
     char t = c.eSlovo[0];
     if (t == 'R' || t == 'T' || t == 'Y' || t == 'U' || t == 'O')
     {
         lico = 3;//по умолчанию    
         bool y = true;
         //переводим слово на русский и возвращаем
         GlagDict dict = new GlagDict();
         logFormRus += "\nПеревод начальной формы: ";
         if (t == 'O') { haract = Haract.деепричастие; }
         if ((c.rSlovo = dict.TranslateEl(a[b].eSlovo)) != "") y = false;//поиск 1                
         if (c.rSlovo == "") c.rSlovo = dict.TranslateEl(ZamLit(a[b].eSlovo, 'R', 0));//поиск 2                
         if (c.rSlovo == "") c.rSlovo = dict.TranslateEl(OsnovaEl(a[b].eSlovo));//поиск 3 
         if (c.rSlovo == "") { logFormRus += "НЕТ В БАЗЕ ДАННЫХ"; c.rSlovo = c.eSlovo; return c; }
         logFormRus += "< " + c.rSlovo.ToUpper() + " >";
         if (y)
         {
             c.rSlovo = RusForm(c.rSlovo);
             logFormRus += "\nПостановка формы: < " + c.rSlovo.ToUpper() + " >";
         }
     }
     return c;
 }
예제 #22
0
		public void PostAnalyzePadezh(Predlozhenie pr,int place,ref Slovo slovo)
		{
			if(pr[place-1]!=null && pr[place-1].chastRechi == ChastRechi.Predlog)
			{
				Slovo predlog = pr[place-1];
				//Здесь будет анализ падежа на основе падежа эльюнди и русского предлога.
			}
			
			ShiftPadezh(ref slovo);
		}
예제 #23
0
		public Predlozhenie MorfAnalyze(Predlozhenie pr)
		{
			Open();
			Predlozhenie pred = pr;
			
			for(int j=0;j<pred.Count;j++)
			{
				Slovo s = (Slovo)pred[j];
				string slovo = s.rSlovo;
				string flextype = "";
				string grtype = "";
				slovo = slovo.ToUpper();
				
				bool cifra = false;
				
				try
				{
					int i = int.Parse(slovo);
					cifra = true;					
				}
				catch
				{
					cifra = false;
				}
				
				if(!cifra)
				{
				
					for(int i=slovo.Length;i>0;i--)
					{
						string osnova = slovo.Substring(0,i);
						ArrayList ar = GetDict(osnova);
						bool br = false;
						if(ar.Count>0)
						{
							//System.Windows.Forms.MessageBox.Show(osnova);
							foreach(string flexid in ar)
							{
							
							//	Console.WriteLine(osnova);
							string flex = GetFlex(flexid.Split(';')[0]);
						//System.Windows.Forms.MessageBox.Show(flexid.ToString());
								foreach(string f in flex.Split('%'))
								{
									if(f!="")
									{
										if(osnova+f.Split('*')[0]==slovo)
										{
										//	System.Windows.Forms.MessageBox.Show(osnova+flex.Split('%')[1].Split('*')[0],"Начальная форма: ");
											s.eSlovo = (osnova+flex.Split('%')[1].Split('*')[0]).ToLower();
										//	System.Windows.Forms.MessageBox.Show(f.Split('*')[1],"Тип флексии: ");
											flextype = f.Split('*')[1];
											grtype = flexid.Split(';')[1];
											br = true;
											break;
										}
									}
									if(br)
										break;
								}
							}						
						}
						if(br)
							break;
					}
					AnalyzeGramTab(ref s,flextype,grtype);
					pr.SetSlovo(s,j);
					if(s.chastRechi == ChastRechi.Suschestvitelnoe)
						pr.SetSlovo(PostAnalyzePadezh(pr,j),j);
				}
				else 
				{
					s.eSlovo = s.rSlovo;
					s.chastRechi = ChastRechi.Znak;
					pr.SetSlovo(s,j);
				}
				if(this.Tick != null)
					Tick(this,null);
			}
			
			Close();
			
			return pr;
		}
예제 #24
0
        protected void AnalyzeCharacteristicsFromNoun(Predlozhenie pr, int place, ref Slovo analyzed)
        {
            // поиск в предложении существительного
            //и копировaние его хaрaктеристик (родa, числa, пaдежa) Прилaгaтельное
            int i = place+4>pr.Count-1?pr.Count-1:place+4;
            int max = place-4>0?place-4:0;
            if ((analyzed.chastRechi == ChastRechi.Prilagatelnoe || analyzed.chastRechi == ChastRechi.Prichastie )&& pr.Count > 1)
            {
                while (i > max)
                {
                    Slovo slovpoisk = pr[i];
                    if (slovpoisk.chastRechi == ChastRechi.Suschestvitelnoe)
                        break;
                    else i--;
                }
                if (i != max)
                {
                    analyzed.ruSlovo.ruChislo = pr[i].ruSlovo.ruChislo;
                    analyzed.ruSlovo.ruPadezh = pr[i].ruSlovo.ruPadezh;
                    analyzed.ruSlovo.ruRod = pr[i].ruSlovo.ruRod;
                }
                else
                {
                    analyzed.ruSlovo.ruChislo = RuChislo.Edinstvennoe;
                    analyzed.ruSlovo.ruPadezh = RuPadezh.Imenitelniy;
                    analyzed.ruSlovo.ruRod = RuRod.Muzhskoj;
                }
            }

            i = 0;
            //aнaлиз Причaстия нa Эльюнди
            if (analyzed.chastRechi == ChastRechi.Prichastie)
            {
                analyzed.vremya = Vremya.Nastoyaschee;
                analyzed.zalog = Zalog.Dejstvitekniy;
                /*
                while (i < pr.Count)
                {
                    Slovo slovpoisk = pr[i];
                    if (slovpoisk.chastRechi == ChastRechi.Glagol)
                        break;
                    else i++;
                }
                if (i != pr.Count)
                    analyzed.vremya = pr[i].vremya;
                if (analyzed.eSlovo.IndexOf("RBA") != -1)
                    analyzed.vremya = Vremya.NastoyascheeDlitelnoe;
                if (analyzed.eSlovo.IndexOf("TBA") != -1)
                    analyzed.vremya = Vremya.Nastoyaschee;
                if (analyzed.eSlovo.IndexOf("YBA") != -1)
                    analyzed.vremya = Vremya.Proshedshee;


                if (analyzed.eSlovo[1] == 'S' || analyzed.eSlovo[analyzed.eSlovo.Length - 1] == 'S')
                    analyzed.vid = Vid.Zavershennost;
                if (analyzed.eSlovo[1] == 'S' && analyzed.eSlovo[analyzed.eSlovo.Length - 1] == 'S')
                    analyzed.vid = Vid.NevozvratnayaZavershennost;
                if (analyzed.eSlovo.IndexOf("RBY") != -1)
                    analyzed.vid = Vid.Mgnovennost;
                if (analyzed.eSlovo.IndexOf("SCY") != -1)
                    analyzed.vid = Vid.NachaloDejstviya;
                if (analyzed.eSlovo.IndexOf("PVI") != -1)
                    analyzed.vid = Vid.OgranichenieDlitelnosti;
                if (analyzed.eSlovo.IndexOf("PVS") != -1)
                    analyzed.vid = Vid.NeopredelennayaDlitelnost;
                if (analyzed.eSlovo.IndexOf("RBA") != -1)
                    analyzed.vid = Vid.PostoyannayaDlitelnost;
                if (analyzed.eSlovo.IndexOf("UCS") != -1)
                    analyzed.vid = Vid.NezavershennostDejstviya;
                analyzed.zalog = Zalog.Dejstvitekniy;
                if (analyzed.eSlovo[1] == 'A' || analyzed.eSlovo[analyzed.eSlovo.Length - 1] == 'A' && analyzed.eSlovo[analyzed.eSlovo.Length - 1] == '-')
                    analyzed.zalog = Zalog.Vozvratniy;
                if (analyzed.eSlovo.IndexOf("SVA") != -1)
                    analyzed.zalog = Zalog.Vzaimniy;
                if (analyzed.eSlovo[analyzed.eSlovo.Length - 1] == 'F' && analyzed.eSlovo [analyzed.eSlovo.Length - 2] == '-')
                    analyzed.zalog = Zalog.Stradatelniy;
                */

            }
            //MessageBox.Show(pr[place].rSlovo);



            //это нaпишем в последнюю очередь.
        }
예제 #25
0
		protected ArrayList SecondParse(ArrayList slova)
		{
			ArrayList ar = new ArrayList();
			Predlozhenie pr = new Predlozhenie();
			
			for(int i=0;i<slova.Count;i++)
			{
				Slovo current = (Slovo)slova[i];
				if(current.chastRechi == ChastRechi.Znak)
				{
					if(current.rSlovo == "."||current.rSlovo == "?"||current.rSlovo == "!"||current.rSlovo == "..."||current.rSlovo == "\n")
					{
						pr.AddSlovo(current);
						if(i+1<slova.Count)
						{
							current = (Slovo)slova[i+1];
							while(current.chastRechi == ChastRechi.Znak&&i+1<slova.Count)
							{
								pr.AddSlovo(current);
								i++;
								if(i+1<slova.Count)
								current = (Slovo)slova[i+1];														
							}
							//i--;
						}
						ar.Add(pr);
						pr = new Predlozhenie();
						
					}
					else
					{
						pr.AddSlovo(current);
					}
				}
				else 
				{
					pr.AddSlovo(current);
				}
			}
			
			ar.Add(pr);
			
			return ar;
		}
예제 #26
0
        protected void AnalyzeCharacteristicsFromNoun(Predlozhenie pr, int place, ref Slovo analyzed)
        {
            // поиск в предложении существительного
            //и копировaние его хaрaктеристик (родa, числa, пaдежa) Прилaгaтельное
            int max = place+4>pr.Count-1?pr.Count-1:place+4;
            int min = place-4>0?place-4:0;

            if ((analyzed.chastRechi == ChastRechi.Prilagatelnoe || analyzed.chastRechi == ChastRechi.Prichastie)&& pr.Count > 1)
            {
            	Hashtable sush = new Hashtable();
            	for(int i=min;i<max;i++)
                {
                    Slovo slovpoisk = pr[i];
                    if (slovpoisk.chastRechi == ChastRechi.Suschestvitelnoe)
                    {
                    	sush[i] = slovpoisk;
                    	//System.Windows.Forms.MessageBox.Show(slovpoisk.rSlovo);
                    }
                    
                    //else i++;
                }
            	
            	Slovo res = null;
            	int minres = 999;
            	
            	foreach(int j in sush.Keys)
            	{
            		if(Math.Abs(place-j)<minres || (Math.Abs(place-j)==minres && j>place))
            		{
            			res = (Slovo)sush[j];
            			minres = Math.Abs(place-j);
            		}
            	}
            	
                if (res != null)
                {
                    analyzed.ruSlovo.ruChislo = res.ruSlovo.ruChislo;
                    analyzed.ruSlovo.ruPadezh = res.ruSlovo.ruPadezh;
                    analyzed.ruSlovo.ruRod = res.ruSlovo.ruRod;
                }
                else
                {
                    analyzed.ruSlovo.ruChislo = RuChislo.Edinstvennoe;
                    analyzed.ruSlovo.ruPadezh = RuPadezh.Imenitelniy;
                    analyzed.ruSlovo.ruRod = RuRod.Muzhskoj;
                }
            }

            //i = 0;
            //aнaлиз Причaстия нa Эльюнди
            if (analyzed.chastRechi == ChastRechi.Prichastie)
            {
                analyzed.vremya = Vremya.Nastoyaschee;
                analyzed.zalog = Zalog.Dejstvitekniy;
                /*
                while (i < pr.Count)
                {
                    Slovo slovpoisk = pr[i];
                    if (slovpoisk.chastRechi == ChastRechi.Glagol)
                        break;
                    else i++;
                }
                if (i != pr.Count)
                    analyzed.vremya = pr[i].vremya;
                if (analyzed.eSlovo.IndexOf("RBA") != -1)
                    analyzed.vremya = Vremya.NastoyascheeDlitelnoe;
                if (analyzed.eSlovo.IndexOf("TBA") != -1)
                    analyzed.vremya = Vremya.Nastoyaschee;
                if (analyzed.eSlovo.IndexOf("YBA") != -1)
                    analyzed.vremya = Vremya.Proshedshee;


                if (analyzed.eSlovo[1] == 'S' || analyzed.eSlovo[analyzed.eSlovo.Length - 1] == 'S')
                    analyzed.vid = Vid.Zavershennost;
                if (analyzed.eSlovo[1] == 'S' && analyzed.eSlovo[analyzed.eSlovo.Length - 1] == 'S')
                    analyzed.vid = Vid.NevozvratnayaZavershennost;
                if (analyzed.eSlovo.IndexOf("RBY") != -1)
                    analyzed.vid = Vid.Mgnovennost;
                if (analyzed.eSlovo.IndexOf("SCY") != -1)
                    analyzed.vid = Vid.NachaloDejstviya;
                if (analyzed.eSlovo.IndexOf("PVI") != -1)
                    analyzed.vid = Vid.OgranichenieDlitelnosti;
                if (analyzed.eSlovo.IndexOf("PVS") != -1)
                    analyzed.vid = Vid.NeopredelennayaDlitelnost;
                if (analyzed.eSlovo.IndexOf("RBA") != -1)
                    analyzed.vid = Vid.PostoyannayaDlitelnost;
                if (analyzed.eSlovo.IndexOf("UCS") != -1)
                    analyzed.vid = Vid.NezavershennostDejstviya;
                analyzed.zalog = Zalog.Dejstvitekniy;
                if (analyzed.eSlovo[1] == 'A' || analyzed.eSlovo[analyzed.eSlovo.Length - 1] == 'A' && analyzed.eSlovo[analyzed.eSlovo.Length - 1] == '-')
                    analyzed.zalog = Zalog.Vozvratniy;
                if (analyzed.eSlovo.IndexOf("SVA") != -1)
                    analyzed.zalog = Zalog.Vzaimniy;
                if (analyzed.eSlovo[analyzed.eSlovo.Length - 1] == 'F' && analyzed.eSlovo [analyzed.eSlovo.Length - 2] == '-')
                    analyzed.zalog = Zalog.Stradatelniy;
                */

            }
            //MessageBox.Show(pr[place].rSlovo);



            //это нaпишем в последнюю очередь.
        }