/** * create a simplenlg WordElement from a Word node in a lexicon XML file * * @param wordNode * @return * @throws XPathUtilException */ private WordElement convertNodeToWord(XmlNode wordNode) { // if this isn't a Word node, ignore it if (!wordNode.LocalName.equalsIgnoreCase(XML_WORD)) { return(null); } // // if there is no base, flag an error and return null // string base = XPathUtil.extractValue(wordNode, Constants.XML_BASE); // if (base == null) { // Console.WriteLine("Error in loading XML lexicon: Word with no base"); // return null; // } // create word var word = new WordElement(); var inflections = new List <Inflection>(); // now copy features var nodes = wordNode.SelectNodes("*"); for (var i = 0; i < nodes.Count; i++) { var featureNode = nodes[i]; if (featureNode.NodeType == XmlNodeType.Element) { var feature = featureNode.LocalName.trim(); var value = featureNode.InnerText; if (value != null) { value = value.trim(); } if (feature == null) { Debug.WriteLine("Error in XML lexicon node for " + word); break; } if (feature.equalsIgnoreCase(XML_BASE)) { word.setBaseForm(value); } else if (feature.equalsIgnoreCase(XML_CATEGORY)) { var c = LexicalCategoryExtensions.valueOf(value.toUpperCase()); word.setCategory(c); } else if (feature.equalsIgnoreCase(XML_ID)) { word.setId(value); } else if (value == null || value.Equals("")) { // if this is an infl code, add it to inflections Tuple <bool, Inflection> infl = InflectionExtensions.getInflCode(feature); if (infl.Item1) { inflections.Add(infl.Item2); } else { word.setFeature(feature, true); } } else { word.setFeature(feature, value); } } } // if no infl specified, assume regular if (inflections.isEmpty()) { inflections.Add(Inflection.REGULAR); } // default inflection code is "reg" if we have it, else random pick form // infl codes available var defaultInfl = inflections.Contains(Inflection.REGULAR) ? Inflection.REGULAR : inflections[0]; word.setFeature(LexicalFeature.DEFAULT_INFL, defaultInfl); word.setDefaultInflectionalVariant(defaultInfl); foreach (var infl in inflections) { word.addInflectionalVariant(infl); } // done, return word return(word); }