private vortoStruKt VortoStrukt(XmlNode nodedrv, string radiko) { // <kap><ofc>*</ofc><tld/>i</kap> // <kap><tld/>iĝi, <var><kap>sin <tld/>i</kap></var></kap> vortoStruKt aktuaVorto = new vortoStruKt(); var veravorto = string.Empty; var kap = nodedrv.SelectSingleNode("kap"); if (kap.FirstChild.NodeType == XmlNodeType.Text) { aktuaVorto.prefikso = kap.FirstChild.Value; } aktuaVorto.radiko = radiko; bool sekvantoEstosSufikso = false; foreach (XmlNode infanode in kap.ChildNodes) { if (sekvantoEstosSufikso && infanode.NodeType == XmlNodeType.Text) { aktuaVorto.sufikso = infanode.Value.Replace(",", "").Trim(); break; } if (infanode.Name == "tld") { sekvantoEstosSufikso = true; } } return(aktuaVorto); }
private void aldonuEnDifinoj(List <Difino> dicospec, vortoStruKt vorto, string traduk, string fichier, int difno, bool test = true) { traduk = traduk.TrimEnd(':', ' ', ',', '.', ';'); traduk = traduk.Replace(System.Environment.NewLine, " ").Replace('"', '\'').Trim(); traduk = traduk.Replace(" ", " ").Replace(" )", ")").Replace("( ", "("); if (traduk.Length > 0) { string ekzemploKleo = difno > 0 ? string.Format("{0}{1}", vorto.vorto, difno) : string.Empty; Difino novavortaro = new Difino { vorto = vorto.vorto, frazo = traduk, ekzemploKleo = ekzemploKleo, retavortaro = fichier }; if (!test || !dicospec.Contains(novavortaro)) { dicospec.Add(novavortaro); } } }
private void AnalizuNodojn(XmlDocument document, string radiko, List <vortaro> dicospec, List <Leksemoj> leksemoj, string l, Func <List <vortaro>, vortoStruKt, List <Leksemoj>, string, XmlNode, bool> serĉuTradukojnEnNodo) { var nodedrvList = document.SelectNodes("vortaro/art/drv"); foreach (XmlNode nodedrv in nodedrvList) { vortoStruKt vorto = VortoStrukt(nodedrv, radiko); serĉuTradukojnEnNodo(dicospec, vorto, leksemoj, l, nodedrv); var snc = nodedrv.SelectNodes("snc"); foreach (XmlNode sncs in snc) { serĉuTradukojnEnNodo(dicospec, vorto, leksemoj, l, sncs); } var subsnc = nodedrv.SelectNodes("snc/subsnc"); foreach (XmlNode subsncs in subsnc) { serĉuTradukojnEnNodo(dicospec, vorto, leksemoj, l, subsncs); } } }
private bool serĉuTradukojnEnNodo(List <vortaro> dicospec, vortoStruKt vorto, List <Leksemoj> leksemoj, string l, XmlNode node) { var trd = node.SelectNodes("trd[@lng=\"" + l + "\"]"); foreach (XmlNode trdu in trd) { aldonuNodoEnVortaro(dicospec, leksemoj, vorto, trdu.InnerText); } var trdgrp = node.SelectNodes("trdgrp[@lng=\"" + l + "\"]"); foreach (XmlNode trdgrpu in trdgrp) { var trdv = trdgrpu.SelectNodes("trd"); foreach (XmlNode trvdgrpu in trdv) { aldonuNodoEnVortaro(dicospec, leksemoj, vorto, trvdgrpu.InnerText); } } return(true); }
private List <Difino> AnalizuXMLPaĝonjKajTrovuDifinojnKajEkzemplojn(List <Ekzemplo> ekzemploj) { string[] dosieroj = Directory.GetFiles(xmlDosierujo, "*.xml"); if (dosieroj == null || dosieroj.Length < 500) { skribuMesaĝon(); return(null); } List <Difino> dicospec = new List <Difino>(55000); foreach (string dosiero in dosieroj) { string retafile = Path.GetFileName(dosiero); XmlDocument document = new XmlDocument(); document.Load(dosiero); var radiko = document.SelectSingleNode("vortaro/art/kap/rad").InnerText; if (radiko != null) { var nodedrvList = document.SelectNodes("vortaro/art/drv"); foreach (XmlNode nodedrv in nodedrvList) { int difno = 1; vortoStruKt vorto = VortoStrukt(nodedrv, radiko); serĉuDifinojnEnNodo(dicospec, ekzemploj, vorto, nodedrv, retafile, ref difno); var snc = nodedrv.SelectNodes("snc"); foreach (XmlNode sncs in snc) { serĉuDifinojnEnNodo(dicospec, ekzemploj, vorto, sncs, retafile, ref difno); } var subsnc = nodedrv.SelectNodes("snc/subsnc"); foreach (XmlNode subsncs in subsnc) { serĉuDifinojnEnNodo(dicospec, ekzemploj, vorto, subsncs, retafile, ref difno); } } } } return(dicospec); }
private void serĉuDifinojnKajEkzemplojnEnNodo(vortoStruKt vorto, XmlNode infanode, StringBuilder difi, ref bool spacoPost, string dosiero) { if (balizoj.Contains(infanode.Name)) { difi.Append(FFF(infanode.InnerText, ref spacoPost)); } else if (infanode.Name == "tld") { string rara = vorto.radiko; if (infanode.Attributes["lit"] != null) { if (vorto.radiko.Length == 0) { rara = rara.ToUpper(); } else { rara = char.ToUpper(rara[0]) + rara.Substring(1); } } bool prefiksita = vorto.prefikso?.Length > 0; if (!string.IsNullOrWhiteSpace(vorto.prefikso)) { var difinoPeco = difi.ToString(); if (difinoPeco.Length > vorto.prefikso.Length) { var lastaPeco = difinoPeco.Substring(difinoPeco.Length - vorto.prefikso.Length); if (!lastaPeco.Contains(vorto.prefikso)) { prefiksita = false; } } } if (!prefiksita) { difi.AppendFormat(" {0}", rara); } else { difi.Append(rara); } spacoPost = false; } else if (infanode.Name == "lok") { difi.AppendFormat(" ({0})", infanode.InnerText); } else if (infanode.Name == "em") { difi.AppendFormat(" {0} ", infanode.InnerText); } else if (infanode.Name == "sub" || infanode.Name == "sup") { spacoPost = false; //Est-ce un nombre en indice? string indice = infanode.InnerText.Trim(); bool estasSub = infanode.Name == "sub"; int unicodeBase = estasSub ? 0X2080 : 0X2070; foreach (char c in indice) { int unicode = 0; if (int.TryParse(c.ToString(), out unicode)) { if (!estasSub && unicode > 0 && unicode < 4) { if (unicode == 1) { unicode = 0X00B9; } else if (unicode == 2) { unicode = 0X00B2; } else if (unicode == 3) { unicode = 0X00B3; } } else { unicode += unicodeBase; } } else if (c == '+') { unicode = unicodeBase + 0XA; } else if (c == '-') { unicode = unicodeBase + 0XB; } else if (c == '=') { unicode = unicodeBase + 0XC; } else if (c == '(') { unicode = unicodeBase + 0XD; } else if (c == ')') { unicode = unicodeBase + 0XE; } //else // listeBalises.Add(string.Format("!!!!!UNICODE : Fichier {0}, Balise {1}, innerText={2}", fichier, infanode.Name, infanode.InnerText)); if (unicode != 0) { difi.Append(char.ConvertFromUtf32(unicode)); } else { difi.Append(c); } } } else { difi.Append(FFF(infanode.InnerText, ref spacoPost)); } }
private void AnalisuNodojnPorTroviDifinojKajEkzemploj(List <Ekzemplo> ekzemploj, vortoStruKt vorto, XmlNode difNode, StringBuilder difi, ref bool spacoPost, string dosiero, int difno) { if (difNode.ChildNodes.Count > 1 || (difNode.ChildNodes.Count == 1 && difNode.ChildNodes[0].Name != "#text")) { foreach (XmlNode infanode in difNode) { if (!eksbalizoj.Contains(infanode.Name)) { AnalisuNodojnPorTroviDifinojKajEkzemploj(ekzemploj, vorto, infanode, difi, ref spacoPost, dosiero, difno); } else if (infanode.Name == "ekz") { StringBuilder defstring = new StringBuilder(); AnalisuNodojnPorTroviDifinojKajEkzemploj(ekzemploj, vorto, infanode, defstring, ref spacoPost, dosiero, difno); aldonuEnEkzemploj(ekzemploj, vorto.vorto, defstring.ToString(), difno, dosiero); } } } else { serĉuDifinojnKajEkzemplojnEnNodo(vorto, difNode, difi, ref spacoPost, dosiero); } }
private void serĉuDifinojnEnNodo(List <Difino> dicospec, List <Ekzemplo> ekzemploj, vortoStruKt vorto, XmlNode node, string dosiero, ref int difno) { var dif = node.SelectNodes("dif"); foreach (XmlNode difNode in dif) { int difdif = 0; string diftekst = difNode.InnerText.Trim(); if (difNode.HasChildNodes) { StringBuilder difi = new StringBuilder(); bool spacoPost = true; //post tld, ne aldonu spaco int antaŭaKompto = ekzemploj.Count; AnalisuNodojnPorTroviDifinojKajEkzemploj(ekzemploj, vorto, difNode, difi, ref spacoPost, dosiero, difno); if (ekzemploj.Count == antaŭaKompto) { difdif = 0; } else { difdif = difno; difno++; } diftekst = difi.ToString(); } aldonuEnDifinoj(dicospec, vorto, diftekst, dosiero, difdif, false); } }
private void aldonuNodoEnVortaro(List <vortaro> dicospec, List <Leksemoj> leksemoj, vortoStruKt vorto, string traduk) { traduk = traduk.Replace(System.Environment.NewLine, " ").Replace('"', '\''); traduk = traduk.Replace(" ", " ").Trim(); if (traduk.Length > 0) { vortaro novavortaro = new vortaro { vorto = vorto.vorto, traduko = traduk, leksemo = vorto.radiko, homografo = "1" }; if (!dicospec.Contains(novavortaro)) { dicospec.Add(novavortaro); } Leksemoj leks = new Leksemoj { leksemo = vorto.radiko, vorto = vorto.vorto }; if (!leksemoj.Contains(leks)) { leksemoj.Add(leks); } } }