Revision: 7261
http://languagetool.svn.sourceforge.net/languagetool/?rev=7261&view=rev
Author: milek_pl
Date: 2012-06-06 11:22:02 +0000 (Wed, 06 Jun 2012)
Log Message:
-----------
fix negated unification bug
Modified Paths:
--------------
trunk/JLanguageTool/src/java/org/languagetool/rules/patterns/AbstractPatternRule.java
trunk/JLanguageTool/src/java/org/languagetool/rules/patterns/PatternRuleHandler.java
trunk/JLanguageTool/src/java/org/languagetool/rules/patterns/Unifier.java
trunk/JLanguageTool/src/java/org/languagetool/rules/patterns/XMLRuleHandler.java
trunk/JLanguageTool/src/java/org/languagetool/tagging/disambiguation/rules/DisambiguationRuleLoader.java
trunk/JLanguageTool/src/test/org/languagetool/rules/patterns/UnifierTest.java
Modified:
trunk/JLanguageTool/src/java/org/languagetool/rules/patterns/AbstractPatternRule.java
===================================================================
---
trunk/JLanguageTool/src/java/org/languagetool/rules/patterns/AbstractPatternRule.java
2012-06-06 08:31:36 UTC (rev 7260)
+++
trunk/JLanguageTool/src/java/org/languagetool/rules/patterns/AbstractPatternRule.java
2012-06-06 11:22:02 UTC (rev 7261)
@@ -197,8 +197,13 @@
boolean thisMatched = matched;
if (testUnification) {
if (matched && elem.isUnified()) {
+ if (elem.isUniNegated()) {
+ thisMatched = !(thisMatched && unifier.isUnified(matchToken,
elem.getUniFeatures(),
+ lastReading));
+ } else {
thisMatched = thisMatched && unifier.isUnified(matchToken,
elem.getUniFeatures(),
- elem.isUniNegated(), lastReading);
+ lastReading);
+ }
}
if (thisMatched && getUnified) {
unifiedTokens = unifier.getFinalUnified();
Modified:
trunk/JLanguageTool/src/java/org/languagetool/rules/patterns/PatternRuleHandler.java
===================================================================
---
trunk/JLanguageTool/src/java/org/languagetool/rules/patterns/PatternRuleHandler.java
2012-06-06 08:31:36 UTC (rev 7260)
+++
trunk/JLanguageTool/src/java/org/languagetool/rules/patterns/PatternRuleHandler.java
2012-06-06 11:22:02 UTC (rev 7261)
@@ -276,6 +276,10 @@
inUnification = false;
//clear the features...
equivalenceFeatures = new HashMap<String, List<String>>();
+ //set negation on the last token only!
+ if (uniNegation) {
+ elementList.get(elementList.size() - 1).setUniNegation();
+ }
}
}
Modified:
trunk/JLanguageTool/src/java/org/languagetool/rules/patterns/Unifier.java
===================================================================
--- trunk/JLanguageTool/src/java/org/languagetool/rules/patterns/Unifier.java
2012-06-06 08:31:36 UTC (rev 7260)
+++ trunk/JLanguageTool/src/java/org/languagetool/rules/patterns/Unifier.java
2012-06-06 11:22:02 UTC (rev 7261)
@@ -194,7 +194,7 @@
}
}
}
- return unified ^ negation;
+ return unified;
}
private boolean checkNext(final AnalyzedToken aToken,
@@ -333,16 +333,13 @@
*
* @param matchToken
* AnalyzedToken token to unify
- * @param isUniNegated
- * if true, then return negated result
- * @param lastReading
+ * @param lastReading
* true when the matchToken is the last reading in the
* AnalyzedReadings
* @return True if the tokens in the sequence are unified.
*/
public final boolean isUnified(final AnalyzedToken matchToken,
- final Map<String, List<String>> uFeatures, final boolean isUniNegated,
- final boolean lastReading) {
+ final Map<String, List<String>> uFeatures, final boolean lastReading) {
if (inUnification) {
uniMatched |= isSatisfied(matchToken, uFeatures);
uniAllMatched = uniMatched;
@@ -353,9 +350,6 @@
}
return uniAllMatched;
}
- if (isUniNegated) {
- setNegation(true);
- }
isSatisfied(matchToken, uFeatures);
if (lastReading) {
inUnification = true;
@@ -367,7 +361,7 @@
/**
* Used for getting a unified sequence in case when simple test method
- * {@link #isUnified(org.languagetool.AnalyzedToken, java.util.Map, boolean,
boolean)}} was used.
+ * {@link #isUnified(org.languagetool.AnalyzedToken, java.util.Map,
boolean)}} was used.
*
* @return An array of {@link AnalyzedTokenReadings}
*/
Modified:
trunk/JLanguageTool/src/java/org/languagetool/rules/patterns/XMLRuleHandler.java
===================================================================
---
trunk/JLanguageTool/src/java/org/languagetool/rules/patterns/XMLRuleHandler.java
2012-06-06 08:31:36 UTC (rev 7260)
+++
trunk/JLanguageTool/src/java/org/languagetool/rules/patterns/XMLRuleHandler.java
2012-06-06 11:22:02 UTC (rev 7261)
@@ -513,9 +513,6 @@
if (inUnification) {
tokenElement.setUnification(equivalenceFeatures);
- if (uniNegation) {
- tokenElement.setUniNegation();
- }
}
if (inUnificationDef) {
Modified:
trunk/JLanguageTool/src/java/org/languagetool/tagging/disambiguation/rules/DisambiguationRuleLoader.java
===================================================================
---
trunk/JLanguageTool/src/java/org/languagetool/tagging/disambiguation/rules/DisambiguationRuleLoader.java
2012-06-06 08:31:36 UTC (rev 7260)
+++
trunk/JLanguageTool/src/java/org/languagetool/tagging/disambiguation/rules/DisambiguationRuleLoader.java
2012-06-06 11:22:02 UTC (rev 7261)
@@ -340,10 +340,7 @@
andGroupCounter++;
}
if (inUnification) {
- tokenElement.setUnification(equivalenceFeatures);
- if (uniNegation) {
- tokenElement.setUniNegation();
- }
+ tokenElement.setUnification(equivalenceFeatures);
uniCounter++;
}
if (inUnificationDef) {
@@ -377,6 +374,10 @@
} else if (qName.equals(UNIFY)) {
inUnification = false;
equivalenceFeatures = new HashMap<String, List<String>>();
+ //set negation on the last token only!
+ if (uniNegation) {
+ elementList.get(elementList.size() - 1).setUniNegation();
+ }
} else if (qName.equals(WD)) {
addNewWord(wd.toString(), wdLemma, wdPos);
inWord = false;
Modified:
trunk/JLanguageTool/src/test/org/languagetool/rules/patterns/UnifierTest.java
===================================================================
---
trunk/JLanguageTool/src/test/org/languagetool/rules/patterns/UnifierTest.java
2012-06-06 08:31:36 UTC (rev 7260)
+++
trunk/JLanguageTool/src/test/org/languagetool/rules/patterns/UnifierTest.java
2012-06-06 11:22:02 UTC (rev 7261)
@@ -247,11 +247,11 @@
//now test the simplified interface
satisfied = true; //this must be true to start with...
- satisfied &= uni.isUnified(sing1, equiv, false, false);
- satisfied &= uni.isUnified(sing1a, equiv, false, false);
- satisfied &= uni.isUnified(sing1b, equiv, false, true);
- satisfied &= uni.isUnified(sing2, equiv, false, true);
- satisfied &= uni.isUnified(sing3, equiv, false, true);
+ satisfied &= uni.isUnified(sing1, equiv, false);
+ satisfied &= uni.isUnified(sing1a, equiv, false);
+ satisfied &= uni.isUnified(sing1b, equiv, true);
+ satisfied &= uni.isUnified(sing2, equiv, true);
+ satisfied &= uni.isUnified(sing3, equiv, true);
assertEquals(false, satisfied);
uni.reset();
@@ -260,9 +260,9 @@
sing2 = new AnalyzedToken("godło", "subst:sg:nom.acc.voc:n", "godło");
satisfied = true;
- satisfied &= uni.isUnified(sing1a, equiv, false, false);
- satisfied &= uni.isUnified(sing1b, equiv, false, true);
- satisfied &= uni.isUnified(sing2, equiv, false, true);
+ satisfied &= uni.isUnified(sing1a, equiv, false);
+ satisfied &= uni.isUnified(sing1b, equiv, true);
+ satisfied &= uni.isUnified(sing2, equiv, true);
assertEquals(true, satisfied);
assertEquals("[osobisty/adj:sg:nom.acc.voc:n:pos:aff,
godło/subst:sg:nom.acc.voc:n]", Arrays.toString(uni.getFinalUnified()));
uni.reset();
@@ -275,10 +275,10 @@
final AnalyzedToken sing2b = new AnalyzedToken("godło", "indecl", "godło");
satisfied = true;
- satisfied &= uni.isUnified(sing1a, equiv, false, false);
- satisfied &= uni.isUnified(sing1b, equiv, false, true);
- satisfied &= uni.isUnified(sing2a, equiv, false, false);
- satisfied &= uni.isUnified(sing2b, equiv, false, true);
+ satisfied &= uni.isUnified(sing1a, equiv, false);
+ satisfied &= uni.isUnified(sing1b, equiv, true);
+ satisfied &= uni.isUnified(sing2a, equiv, false);
+ satisfied &= uni.isUnified(sing2b, equiv, true);
assertEquals(true, satisfied);
assertEquals("[osobisty/adj:sg:nom.acc.voc:n:pos:aff,
godło/subst:sg:nom.acc.voc:n]", Arrays.toString(uni.getFinalUnified()));
uni.reset();
@@ -335,9 +335,9 @@
//now test the simplified interface
satisfied = true; //this must be true to start with...
- satisfied &= uni.isUnified(det_sing_masc, equiv, false, true);
- satisfied &= uni.isUnified(sing_masc, equiv, false, true);
- satisfied &= uni.isUnified(subst_sing_masc, equiv, false, true);
+ satisfied &= uni.isUnified(det_sing_masc, equiv, true);
+ satisfied &= uni.isUnified(sing_masc, equiv, true);
+ satisfied &= uni.isUnified(subst_sing_masc, equiv, true);
assertEquals(true, satisfied);
uni.reset();
@@ -351,42 +351,65 @@
uni.startNextToken();
satisfied &= uni.isSatisfied(subst_sing_masc, equiv);
uni.startNextToken();
- assertEquals(false, satisfied);
+ assertEquals(false, !satisfied);
uni.reset();
//now test the simplified interface
satisfied = true; //this must be true to start with...
- satisfied &= uni.isUnified(det_sing_masc, equiv, true, true);
- satisfied &= uni.isUnified(sing_masc, equiv, true, true);
- satisfied &= uni.isUnified(subst_sing_masc, equiv, true, true);
- assertEquals(false, satisfied);
+ satisfied &= uni.isUnified(det_sing_masc, equiv, true);
+ satisfied &= uni.isUnified(sing_masc, equiv, true);
+ satisfied &= uni.isUnified(subst_sing_masc, equiv, true);
+ assertEquals(false, !satisfied);
uni.reset();
//OK, so let's test it with something that is not correct
satisfied = true; //this must be true to start with...
- satisfied &= uni.isUnified(det_sing_fem, equiv, true, true);
- satisfied &= uni.isUnified(sing_masc, equiv, true, true); //mismatch:
hence satisfied == "true"
- satisfied &= uni.isUnified(subst_sing_masc, equiv, true, true);
- assertEquals(true, satisfied);
+ satisfied &= uni.isUnified(det_sing_fem, equiv, true);
+ satisfied &= uni.isUnified(sing_masc, equiv, true);
+ satisfied &= uni.isUnified(subst_sing_masc, equiv, true);
+ assertEquals(true, !satisfied);
uni.reset();
//OK, so let's test it with something that is not correct
satisfied = true; //this must be true to start with...
- satisfied &= uni.isUnified(det_sing_masc, equiv, true, true);
- satisfied &= uni.isUnified(sing_fem, equiv, true, true); //mismatch:
hence satisfied == "true"
- satisfied &= uni.isUnified(subst_sing_masc, equiv, true, true);
- assertEquals(true, satisfied);
+ satisfied &= uni.isUnified(det_sing_masc, equiv, true);
+ satisfied &= uni.isUnified(sing_fem, equiv, true);
+ satisfied &= uni.isUnified(subst_sing_masc, equiv, true);
+ assertEquals(true, !satisfied);
uni.reset();
- //OK, so let's test it with something that is not correct
- /* I think there's an error here -- the negation is applied too soon...
+ //OK, second token does not match
satisfied = true; //this must be true to start with...
- satisfied &= uni.isUnified(det_sing_masc, equiv, true, true);
- satisfied &= uni.isUnified(sing_masc, equiv, true, true); //match: hence
satisfied == "false"...
- satisfied &= uni.isUnified(subst_sing_fem, equiv, true, true);
- assertEquals(true, satisfied);
+ satisfied &= uni.isUnified(det_sing_masc, equiv, true);
+ satisfied &= uni.isUnified(sing_masc, equiv, true);
+ satisfied &= uni.isUnified(subst_sing_fem, equiv, true);
+ assertEquals(true, !satisfied);
uni.reset();
- */
+
+ //OK, second token does not match
+ satisfied = true; //this must be true to start with...
+ satisfied &= uni.isUnified(det_sing_masc, equiv, true);
+ satisfied &= uni.isUnified(plur_masc, equiv, true);
+ satisfied &= uni.isUnified(subst_sing_fem, equiv, true);
+ assertEquals(true, !satisfied);
+ uni.reset();
+
+ //OK, second token does not match
+ satisfied = true; //this must be true to start with...
+ satisfied &= uni.isUnified(det_sing_masc, equiv, true);
+ satisfied &= uni.isUnified(plur_fem, equiv, true);
+ satisfied &= uni.isUnified(subst_sing_fem, equiv, true);
+ assertEquals(true, !satisfied);
+ uni.reset();
+
+ //and another one
+ satisfied = true; //this must be true to start with...
+ satisfied &= uni.isUnified(det_plur_fem, equiv, true);
+ satisfied &= uni.isUnified(plur_fem, equiv, true);
+ satisfied &= uni.isUnified(subst_sing_fem, equiv, true);
+ assertEquals(true, !satisfied);
+ uni.reset();
+
}
}
This was sent by the SourceForge.net collaborative development platform, the
world's largest Open Source development site.
------------------------------------------------------------------------------
Live Security Virtual Conference
Exclusive live event will cover all the ways today's security and
threat landscape has changed and how IT managers can respond. Discussions
will include endpoint security, mobile security and the latest in malware
threats. http://www.accelacomm.com/jaw/sfrnl04242012/114/50122263/
_______________________________________________
Languagetool-cvs mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/languagetool-cvs