From: Martin F. <mar...@us...> - 2008-01-05 23:00:44
|
Update of /cvsroot/arianne/stendhal/src/games/stendhal/server/entity/npc/parser In directory sc8-pr-cvs11.sourceforge.net:/tmp/cvs-serv32746/src/games/stendhal/server/entity/npc/parser Modified Files: Sentence.java Expression.java ExpressionType.java Log Message: fix sentence type detection by skipping ignorable words in evaluateSentenceType() Index: Expression.java =================================================================== RCS file: /cvsroot/arianne/stendhal/src/games/stendhal/server/entity/npc/parser/Expression.java,v retrieving revision 1.8 retrieving revision 1.9 diff -C2 -d -r1.8 -r1.9 *** Expression.java 5 Jan 2008 22:07:05 -0000 1.8 --- Expression.java 5 Jan 2008 23:00:45 -0000 1.9 *************** *** 1,4 **** --- 1,6 ---- package games.stendhal.server.entity.npc.parser; + import java.util.Iterator; + /** * An Expression is part of a Sentence. It encapsulates the original, white space *************** *** 263,266 **** --- 265,286 ---- /** + * Determine Expressions to ignore. + * + * @return + */ + public boolean isIgnore() { + return type != null && type.isIgnore(); + } + + /** + * Determine if the Expression consists of question words. + * + * @return + */ + public boolean isQuestion() { + return type != null && type.isQuestion(); + } + + /** * Merge Expression type with another one while handling null values. * *************** *** 344,347 **** --- 364,385 ---- /** + * Advance the iterator and return the next non-ignorable Expression. + * + * @param it + * @return + */ + public static Expression nextValid(Iterator<Expression> it) { + while (it.hasNext()) { + Expression expr = it.next(); + + if (!expr.isIgnore()) { + return expr; + } + } + + return null; + } + + /** * Check for equality of two Expression objects. */ *************** *** 373,375 **** --- 411,414 ---- } + } Index: Sentence.java =================================================================== RCS file: /cvsroot/arianne/stendhal/src/games/stendhal/server/entity/npc/parser/Sentence.java,v retrieving revision 1.16 retrieving revision 1.17 diff -C2 -d -r1.16 -r1.17 *** Sentence.java 5 Jan 2008 22:19:27 -0000 1.16 --- Sentence.java 5 Jan 2008 23:00:45 -0000 1.17 *************** *** 563,567 **** } } else if (w.getType().isSubject()) { ! if (w.getOriginal().equals("me")) { // If we already found a verb, we prepend "you" as // first subject and mark the sentence as imperative. --- 563,567 ---- } } else if (w.getType().isSubject()) { ! if (w.getOriginal().equalsIgnoreCase("me")) { // If we already found a verb, we prepend "you" as // first subject and mark the sentence as imperative. *************** *** 629,641 **** int type = ST_UNDEFINED; ! if (it.hasNext()) { ! Expression first = it.next(); ! ! while (first.getType() != null && first.getType().isQuestion() && it.hasNext()) { ! first = it.next(); if (type == ST_UNDEFINED) { type = ST_QUESTION; } } --- 629,643 ---- int type = ST_UNDEFINED; ! // As words are not yet merged together at this stage, we have to use Expression.nextValid() ! // in this function to jump over words to ignore. ! Expression first = Expression.nextValid(it); + if (first != null) { + while (first.getType().isQuestion() && it.hasNext()) { if (type == ST_UNDEFINED) { type = ST_QUESTION; } + + first = Expression.nextValid(it); } *************** *** 643,653 **** Expression third = null; ! if (it.hasNext()) { ! second = it.next(); ! ! if (it.hasNext()) { ! third = it.next(); ! } ! } if (second != null) { --- 645,650 ---- Expression third = null; ! second = Expression.nextValid(it); ! third = Expression.nextValid(it); if (second != null) { *************** *** 658,663 **** } } ! // questions beginning with "do" ! else if (first.getNormalized().equals("do")) { if (type == ST_UNDEFINED) { type = ST_QUESTION; --- 655,661 ---- } } ! // questions beginning with "do", but no "do me" sentences ! else if (first.getNormalized().equals("do") && ! (second==null || !second.getOriginal().equalsIgnoreCase("me"))) { if (type == ST_UNDEFINED) { type = ST_QUESTION; Index: ExpressionType.java =================================================================== RCS file: /cvsroot/arianne/stendhal/src/games/stendhal/server/entity/npc/parser/ExpressionType.java,v retrieving revision 1.5 retrieving revision 1.6 diff -C2 -d -r1.5 -r1.6 *** ExpressionType.java 5 Jan 2008 22:19:27 -0000 1.5 --- ExpressionType.java 5 Jan 2008 23:00:46 -0000 1.6 *************** *** 171,175 **** /** ! * Determine Expression to ignore. * * @return --- 171,175 ---- /** ! * Determine Expressions to ignore. * * @return |