public ArrayList GetMorphology(string inText) { Grafemat gr = new Grafemat(); ArrayList prText = gr.AnalyzeTextEl(inText); 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 || eSlovo.Length == 2 && eSlovo[1] == '-') { curSlovo.chastRechi = ChastRechi.Mestoimenie; curSlovo = OtherModule.Analyze(curPred, j); } 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); } prText[i] = curPred; } return prText; }
public ArrayList Analyze(string inText) { Grafemat gr = new Grafemat(); ArrayList prText = gr.AnalyzeTextEl(inText); 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 || eSlovo.Length == 2 && eSlovo[1] == '-') { curSlovo.chastRechi = ChastRechi.Mestoimenie; curSlovo = OtherModule.Analyze(curPred, j); } 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); } } curPred.SetSlovo(curSlovo,j); } // Полуторный проход - глаголы for(int j=0;j<curPred.Count;j++) { Slovo curSlovo = curPred[j]; if (curSlovo.chastRechi != ChastRechi.Znak && curSlovo.chastRechi != ChastRechi.Mestoimenie) { string eSlovo = curSlovo.eSlovo; if(eSlovo[0]=='R' || eSlovo[0]=='T' || eSlovo[0]=='Y' || eSlovo[0]=='U') { curSlovo = VerbModule.Analyze(curPred,j); } } 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); } if(eSlovo[0]=='F') { curSlovo = PredlogModule.Analyze(curPred,j); } if(eSlovo[0]=='A') { curSlovo = OtherModule.Analyze(curPred,j); } } curPred.SetSlovo(curSlovo,j); } prText[i] = curPred; } return prText; }
/** * Собственно, перевод.. */ public string Translate(string inText) { //Перед тем как переводить, приведем текст в нормальную форму inText = NormalizeText(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 || eSlovo.Length == 2 && eSlovo[1] == '-') curSlovo.chastRechi = ChastRechi.Mestoimenie; else switch (eSlovo[0]) { case 'Q': case 'W': curSlovo.chastRechi = ChastRechi.Suschestvitelnoe; break; case 'F': case 'P': 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 && curSlovo.chastRechi != ChastRechi.Mestoimenie) { 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 && curSlovo.chastRechi != ChastRechi.Mestoimenie) { string eSlovo = curSlovo.eSlovo; if (eSlovo[0] == 'R' || eSlovo[0] == 'T' || eSlovo[0] == 'Y' || eSlovo[0] == 'U' || eSlovo[0] == 'I') { 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 && curSlovo.chastRechi != ChastRechi.Mestoimenie) { string eSlovo = curSlovo.eSlovo; // // Заменить на соответствующее для данной части речи. // if (eSlovo[0] == 'E') { 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: case ChastRechi.Glagol: curSlovo = VerbModule.Translate(curPred, j); break; case ChastRechi.Predlog: curSlovo = PredlogModule.Translate(curPred, j); break; case ChastRechi.Mestoimenie: case ChastRechi.Mezhdometie: case ChastRechi.Narechie: 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(); Hashtable suschTable = new Hashtable(); for (int i = 0; i < prText.Count; i++) { rezult += ((Predlozhenie)prText[i]).ToEnString(ref suschTable); } if (this.End != null) End(this, new CoreEndEventArgs(rezult)); return rezult; }