/// <summary> /// Analyzuje jednotlivá slova v textu /// </summary> /// <param name="strText"></param> /// <returns></returns> public static List <TextovyPrvek> AnalyzujText(string strText) { TextovePrvky tps = new TextovePrvky(); tps.Analyzuj(strText); return(tps); }
private Datace AnalyzujDataci2(string sSlovniPopis) { char[] chOddelovace = new char[] { '/', '–', ',' }; var dt = new Datace(CultureInfo); List <string> glsCoObsahuje = new List <string>(); List <string> glsNeznamaSlova = new List <string>(); ZjistiObsahANeznamaSlova(sSlovniPopis, ref glsCoObsahuje, ref glsNeznamaSlova); List <TextovyPrvek> gltpTextovePrvky = new TextovePrvky(sSlovniPopis); List <string> glsNeznameVyrazy = new List <string>(); foreach (TextovyPrvek tp in gltpTextovePrvky) { if (tp.Typ == TypTextovehoPrvku.Neurceno) { glsNeznameVyrazy.Add(tp.Text); } } if (glsNeznameVyrazy.Count > 0) { dt.Upresneni = "neznámé výrazy (" + String.Join("; ", glsNeznameVyrazy.ToArray()) + ")"; return(dt); } //if (glsNeznamaSlova.Count > 0) { // dt.Upresneni = "neznámé výrazy (" + String.Join("; ", glsNeznamaSlova.ToArray()) + ")"; // return dt; //} string mstrSlovniPopis = sSlovniPopis; string sPopis = mstrSlovniPopis; if (glsCoObsahuje.Contains(csOtaznik)) { dt.Upresneni = csOtaznik; glsCoObsahuje.Remove(csOtaznik); sPopis = sPopis.Replace(csOtaznik, "").Trim(); } string[] asRozhrani = null; if (sSlovniPopis.IndexOfAny(chOddelovace) > 0) { asRozhrani = sPopis.Split(chOddelovace); } if (glsCoObsahuje.Contains(csNebo)) { asRozhrani = sPopis.Split(new string[] { csNebo }, StringSplitOptions.RemoveEmptyEntries); } if (asRozhrani != null) { string zacatek = asRozhrani[0].Trim(); if (asRozhrani[1].Contains(csLeta) && !asRozhrani[0].Contains(csLeta)) { zacatek = zacatek + asRozhrani[1].Substring(asRozhrani[1].IndexOf(csLeta, StringComparison.Ordinal) + 1); } Datace dtZacatek = new Datace(zacatek.Trim(), CultureInfo); Datace dtKonec = new Datace(asRozhrani[1].Trim(), CultureInfo); dt = dtKonec; dt.NePredRokem = dtZacatek.NePredRokem; if (dtZacatek.Upresneni != null) { if (dtKonec.Upresneni != null) { dt.Upresneni = String.Format("{0}; {1}", dtZacatek.Upresneni, dtKonec.Upresneni); } else { dt.Upresneni = dtZacatek.Upresneni; } } return(dt); } if (glsCoObsahuje.Contains(csPrelom)) { //vypreparovat první a druhé století sPopis = sPopis.Remove(sPopis.IndexOf(csPrelom), csPrelom.Length + 1); asRozhrani = sPopis.Split(new string[] { " a " }, StringSplitOptions.RemoveEmptyEntries); dt.RelativniChronologie = 0; Datace dtKonec = new Datace(asRozhrani[1], CultureInfo); Datace dtZacatek = new Datace(); dtZacatek.Stoleti = dtKonec.Stoleti - cintStoLet; dtZacatek.RelativniChronologie = 9; dtZacatek.NePredRokem = dtZacatek.Stoleti + (cintStoLet - cintPrelom); dt.Stoleti = dtKonec.Stoleti; dt.PolovinaStoleti = dtKonec.PolovinaStoleti; dt.NePredRokem = dtZacatek.NePredRokem; dt.NePoRoce = dtZacatek.Stoleti + (cintStoLet + cintPrelom); dt.Upresneni = csPrelom; } if (glsCoObsahuje.Count == 2 && glsCoObsahuje.Contains(csA) && glsCoObsahuje.Contains(csStoleti)) { int iStoleti = ZjistiStoleti(sPopis); sPopis = sPopis.Replace(((iStoleti / cintStoLet) + 1).ToString() + csStoleti, "").Replace(csA, "").Trim(); int iStoletiStart = ZjistiStoleti(sPopis); dt.Stoleti = iStoleti; dt.RelativniChronologie = 0; dt.PolovinaStoleti = 0; dt.Desetileti = 0; dt.NePredRokem = iStoletiStart + 1; dt.NePoRoce = iStoleti + cintStoLet; //dt.SlovniPopis = sSlovniPopis; return(dt); } if (glsCoObsahuje.Contains(csStoleti)) { //vypreparovat století, analayzovat zbytek int iStoleti = ZjistiStoleti(sPopis); dt.Stoleti = iStoleti; sPopis = sPopis.Replace(((iStoleti / cintStoLet) + 1).ToString() + csStoleti, "").Trim(); if (glsCoObsahuje.Contains(csLeta) || glsCoObsahuje.Contains(csPolovina) || glsCoObsahuje.Contains(csTretina) || glsCoObsahuje.Contains(csCtvrtina) || glsCoObsahuje.Contains(csJenPolovina)) { CasovyZlomek zl = ZjistiZlomek(sPopis); sPopis = sPopis.Replace(zl.CitatelPopis + zl.JmenovatelPopis, "").Trim(); if (zl.Jmenovatel == 10) { dt.Desetileti = zl.Citatel; dt.PolovinaStoleti = PolovinaStoletiNaZakladeDesetileti(dt.Desetileti * zl.Jmenovatel); dt.NePredRokem = dt.Stoleti + zl.Jmenovatel * (zl.Citatel == 1 ? 0 : zl.Citatel) + 1; dt.NePoRoce = dt.NePredRokem + zl.Jmenovatel; } else if (zl.Jmenovatel == 2 && zl.Citatel == -1) { dt.PolovinaStoleti = 0; dt.RelativniChronologie = 5; dt.Upresneni = csJenPolovina; dt.NePredRokem = dt.Stoleti + (50) - cintJenPolovina + 1; dt.NePoRoce = dt.NePredRokem + 50; //int desetileti = dt.NePoRoce - dt.Stoleti; //dt.PolovinaStoleti = PolovinaStoletiNaZakladeDesetileti(desetileti); } else { dt.Stoleti = iStoleti; dt.PolovinaStoleti = PolovinaStoletiNaZakladeDesetileti(((cintStoLet / zl.Jmenovatel) * (zl.Citatel))); dt.Desetileti = ((cintStoLet / zl.Jmenovatel) * (zl.Citatel)) / 10; dt.NePredRokem = dt.Stoleti + ((cintStoLet / zl.Jmenovatel) * (zl.Citatel - 1)) + 1; dt.NePoRoce = dt.Stoleti + ((cintStoLet / zl.Jmenovatel) * (zl.Citatel)); RelativniChronologieNaZakladeRoku(dt.NePoRoce); } } else if (glsCoObsahuje.Count == 1) { dt.RelativniChronologie = 0; dt.NePredRokem = dt.Stoleti + 1; dt.NePoRoce = dt.Stoleti + cintStoLet; } } if (sPopis == csZacatek) { dt.RelativniChronologie = 1; dt.NePredRokem = dt.Stoleti; dt.NePoRoce = dt.Stoleti + cintZacatekKonec; dt.Upresneni = csZacatek; dt.Desetileti = 2; dt.PolovinaStoleti = 1; sPopis = sPopis.Replace(csZacatek, "").Trim(); } if (sPopis == csKonec) { dt.NePoRoce = dt.Stoleti + cintStoLet; dt.NePredRokem = dt.Stoleti + cintStoLet - cintZacatekKonec; dt.RelativniChronologie = 9; dt.PolovinaStoleti = 2; dt.Desetileti = 9; dt.Upresneni = csKonec; sPopis = sPopis.Replace(csKonec, "").Trim(); } if (glsCoObsahuje.Contains(csPoRoce)) { sPopis = sPopis.Remove(sPopis.IndexOf(csPoRoce), csPoRoce.Length); dt.Upresneni = csPoRoce; int iRok; if (Int32.TryParse(sPopis, out iRok)) { UrciDataciNaZakladeRoku(dt, iRok); dt.NePoRoce = dt.Rok + cintOkoloRoku; //TODO Tady by mělo být koncové datum, např. úmrtí autora dt.NePredRokem = dt.Rok; } } if (glsCoObsahuje.Contains(csOkoloRoku)) { sPopis = sPopis.Remove(sPopis.IndexOf(csOkoloRoku), csOkoloRoku.Length); dt.Upresneni = csOkoloRoku; int iRok; if (Int32.TryParse(sPopis, out iRok)) { UrciDataciNaZakladeRoku(dt, iRok); dt.NePoRoce = dt.Rok + cintOkoloRoku; dt.NePredRokem = dt.Rok - cintOkoloRoku; int desetileti = dt.NePoRoce - dt.Stoleti; dt.PolovinaStoleti = PolovinaStoletiNaZakladeDesetileti(desetileti); } } if (glsCoObsahuje.Contains(csPost)) { sPopis = sPopis.Remove(sPopis.IndexOf(csPost), csPost.Length + 1); dt.Upresneni = csPost; int iRok; if (Int32.TryParse(sPopis.Substring(0, 4), out iRok)) { UrciDataciNaZakladeRoku(dt, iRok); dt.NePoRoce = iRok; } } if (glsCoObsahuje.Contains(csAnte)) { sPopis = sPopis.Remove(sPopis.IndexOf(csAnte), csAnte.Length + 1); if (!String.IsNullOrEmpty(dt.Upresneni)) { dt.Upresneni += "; " + csAnte; } else { dt.Upresneni = csAnte; } int iRok; if (Int32.TryParse(sPopis.Substring(0, 4), out iRok)) { UrciDataciNaZakladeRoku(dt, iRok); dt.NePoRoce = iRok; } } if (glsCoObsahuje.Count == 1 && glsCoObsahuje.Contains(csA)) { asRozhrani = sPopis.Split(new string[] { csA }, StringSplitOptions.RemoveEmptyEntries); if (asRozhrani != null) { string zacatek = asRozhrani[0].Trim(); if (asRozhrani[1].Contains(csLeta) && !asRozhrani[0].Contains(csLeta)) { zacatek = zacatek + asRozhrani[1].Substring(asRozhrani[1].IndexOf(csLeta, StringComparison.Ordinal) + 1); } Datace dtZacatek = new Datace(zacatek.Trim(), CultureInfo); Datace dtKonec = new Datace(asRozhrani[1].Trim(), CultureInfo); dt = dtKonec; dt.NePredRokem = dtZacatek.NePredRokem; if (dtZacatek.Upresneni != null) { if (dtKonec.Upresneni != null) { dt.Upresneni = String.Format("{0}; {1}", dtZacatek.Upresneni, dtKonec.Upresneni); } else { dt.Upresneni = dtZacatek.Upresneni; } } return(dt); } } //jde pouze o rok if (glsCoObsahuje.Count == 0) { int iRok; DateTime date; if (DateTime.TryParse(sPopis, CultureInfo, DateTimeStyles.None, out date)) { iRok = date.Year; UrciDataciNaZakladeRoku(dt, iRok); } else if (Int32.TryParse(sPopis, out iRok)) { UrciDataciNaZakladeRoku(dt, iRok); } // TODO: upozorňovat na neplatné údaje pomocí výjimek, které se na vhodné úrovni zachytí a vytvoří se popis, co je v dataci špatné nebo neznámé } return(dt); }