Revision: 7272
http://languagetool.svn.sourceforge.net/languagetool/?rev=7272&view=rev
Author: milek_pl
Date: 2012-06-06 21:31:22 +0000 (Wed, 06 Jun 2012)
Log Message:
-----------
add JavaDoc to explain why unification works
Modified Paths:
--------------
trunk/JLanguageTool/src/java/org/languagetool/rules/patterns/Unifier.java
trunk/JLanguageTool/src/test/org/languagetool/rules/patterns/UnifierTest.java
Modified:
trunk/JLanguageTool/src/java/org/languagetool/rules/patterns/Unifier.java
===================================================================
--- trunk/JLanguageTool/src/java/org/languagetool/rules/patterns/Unifier.java
2012-06-06 21:03:18 UTC (rev 7271)
+++ trunk/JLanguageTool/src/java/org/languagetool/rules/patterns/Unifier.java
2012-06-06 21:31:22 UTC (rev 7272)
@@ -316,11 +316,24 @@
/**
* Tests if the token sequence is unified.
*
+ * Usage note: to test if the sequence of tokens is unified (i.e.,
+ * shares a group of features, such as the same gender, number,
+ * grammatical case etc.), you need to test all tokens but the last one
+ * in the following way: call {@link #isUnified} for every reading of a
token,
+ * and set lastreading to <code>true</code>. For the last token, check the
+ * truth value returned by this method. In previous cases, it may actually be
+ * discarded before the final check. See {@link AbstractPatternRule} for
+ * an example. <p/>
+ *
+ * To make it work in XML rules, the Elements built based on
<code><token></code>s inside
+ * the unify block, have to be processed in a special way: namely the last
Element has to be
+ * marked as the last one (by using {@link Element#setLastInUnification}).
+ *
* @param matchToken
- * AnalyzedToken token to unify
+ * {@link AnalyzedToken} token to unify
* @param lastReading
* true when the matchToken is the last reading in the
- * AnalyzedReadings
+ * {@link AnalyzedTokenReadings}
* @return True if the tokens in the sequence are unified.
*/
public final boolean isUnified(final AnalyzedToken matchToken,
Modified:
trunk/JLanguageTool/src/test/org/languagetool/rules/patterns/UnifierTest.java
===================================================================
---
trunk/JLanguageTool/src/test/org/languagetool/rules/patterns/UnifierTest.java
2012-06-06 21:03:18 UTC (rev 7271)
+++
trunk/JLanguageTool/src/test/org/languagetool/rules/patterns/UnifierTest.java
2012-06-06 21:31:22 UTC (rev 7272)
@@ -244,25 +244,21 @@
assertEquals(false, satisfied);
uni.reset();
- //now test the simplified interface
- satisfied = true; //this must be true to start with...
- 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);
+ //now test the simplified interface
+ uni.isUnified(sing1, equiv, false);
+ uni.isUnified(sing1a, equiv, false);
+ uni.isUnified(sing1b, equiv, true);
+ uni.isUnified(sing2, equiv, true);
+ assertEquals(false, uni.isUnified(sing3, equiv, true));
uni.reset();
sing1a = new AnalyzedToken("osobiste",
"adj:pl:nom.acc.voc:f.n.m2.m3:pos:aff", "osobisty");
sing1b = new AnalyzedToken("osobiste", "adj:sg:nom.acc.voc:n:pos:aff",
"osobisty");
sing2 = new AnalyzedToken("godło", "subst:sg:nom.acc.voc:n", "godło");
-
- satisfied = true;
- satisfied &= uni.isUnified(sing1a, equiv, false);
- satisfied &= uni.isUnified(sing1b, equiv, true);
- satisfied &= uni.isUnified(sing2, equiv, true);
- assertEquals(true, satisfied);
+
+ uni.isUnified(sing1a, equiv, false);
+ uni.isUnified(sing1b, equiv, true);
+ assertEquals(true, uni.isUnified(sing2, equiv, true));
assertEquals("[osobisty/adj:sg:nom.acc.voc:n:pos:aff,
godło/subst:sg:nom.acc.voc:n]", Arrays.toString(uni.getFinalUnified()));
uni.reset();
@@ -272,13 +268,11 @@
sing1b = new AnalyzedToken("osobiste", "adj:sg:nom.acc.voc:n:pos:aff",
"osobisty");
final AnalyzedToken sing2a = new AnalyzedToken("godło",
"subst:sg:nom.acc.voc:n", "godło");
final AnalyzedToken sing2b = new AnalyzedToken("godło", "indecl", "godło");
-
- satisfied = 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);
+
+ uni.isUnified(sing1a, equiv, false);
+ uni.isUnified(sing1b, equiv, true);
+ uni.isUnified(sing2a, equiv, false);
+ assertEquals(true, uni.isUnified(sing2b, equiv, true));
assertEquals("[osobisty/adj:sg:nom.acc.voc:n:pos:aff,
godło/subst:sg:nom.acc.voc:n]", Arrays.toString(uni.getFinalUnified()));
uni.reset();
}
@@ -332,11 +326,9 @@
uni.reset();
//now test the simplified interface
- satisfied = true; //this must be true to start with...
- 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.isUnified(det_sing_masc, equiv, true);
+ uni.isUnified(sing_masc, equiv, true);
+ assertEquals(true, uni.isUnified(subst_sing_masc, equiv, true));
uni.reset();
//now let's negate this
@@ -351,84 +343,64 @@
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);
- satisfied &= uni.isUnified(sing_masc, equiv, true);
- satisfied &= uni.isUnified(subst_sing_masc, equiv, true);
- assertEquals(false, !satisfied);
+ //now test the simplified interface
+ uni.isUnified(det_sing_masc, equiv, true);
+ uni.isUnified(sing_masc, equiv, true);
+ assertEquals(false, !uni.isUnified(subst_sing_masc, equiv, true));
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);
- satisfied &= uni.isUnified(sing_masc, equiv, true);
- satisfied &= uni.isUnified(subst_sing_masc, equiv, true);
- assertEquals(true, !satisfied);
+ uni.isUnified(det_sing_fem, equiv, true);
+ uni.isUnified(sing_masc, equiv, true);
+ assertEquals(true, !uni.isUnified(subst_sing_masc, equiv, true));
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);
- satisfied &= uni.isUnified(sing_fem, equiv, true);
- satisfied &= uni.isUnified(subst_sing_masc, equiv, true);
- assertEquals(true, !satisfied);
+ uni.isUnified(det_sing_masc, equiv, true);
+ uni.isUnified(sing_fem, equiv, true);
+ assertEquals(true, !uni.isUnified(subst_sing_masc, equiv, true));
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(sing_masc, equiv, true);
- satisfied &= uni.isUnified(subst_sing_fem, equiv, true);
- assertEquals(true, !satisfied);
+ uni.isUnified(det_sing_masc, equiv, true);
+ uni.isUnified(sing_masc, equiv, true);
+ assertEquals(true, !uni.isUnified(subst_sing_fem, equiv, true));
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.isUnified(det_sing_masc, equiv, true);
+ uni.isUnified(plur_masc, equiv, true);
+ assertEquals(true, !uni.isUnified(subst_sing_fem, equiv, true));
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.isUnified(det_sing_masc, equiv, true);
+ uni.isUnified(plur_fem, equiv, true);
+ assertEquals(true, !uni.isUnified(subst_sing_fem, equiv, true));
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.isUnified(det_plur_fem, equiv, true);
+ uni.isUnified(plur_fem, equiv, true);
+ assertEquals(true, !uni.isUnified(subst_sing_fem, equiv, true));
uni.reset();
//and another one
- satisfied = true; //this must be true to start with...
- satisfied &= uni.isUnified(det_sing_fem, equiv, true);
- satisfied &= uni.isUnified(plur_fem, equiv, true);
- satisfied &= uni.isUnified(subst_plur_fem, equiv, true);
- assertEquals(true, !satisfied);
+ uni.isUnified(det_sing_fem, equiv, true);
+ uni.isUnified(plur_fem, equiv, true);
+ assertEquals(true, !uni.isUnified(subst_plur_fem, equiv, true));
uni.reset();
//and another one
- satisfied = true; //this must be true to start with...
- satisfied &= uni.isUnified(det_sing_fem, equiv, true);
- satisfied &= uni.isUnified(plur_fem, equiv, true);
- satisfied &= uni.isUnified(subst_plur_masc, equiv, true);
- assertEquals(true, !satisfied);
+ uni.isUnified(det_sing_fem, equiv, true);
+ uni.isUnified(plur_fem, equiv, true);
+ assertEquals(true, !uni.isUnified(subst_plur_masc, equiv, true));
uni.reset();
//and another one
- satisfied = true; //this must be true to start with...
- satisfied &= uni.isUnified(det_plur_masc, equiv, true);
- satisfied &= uni.isUnified(plur_fem, equiv, true);
- satisfied &= uni.isUnified(subst_plur_masc, equiv, true);
- assertEquals(true, !satisfied);
+ uni.isUnified(det_plur_masc, equiv, true);
+ uni.isUnified(plur_fem, equiv, true);
+ assertEquals(true, !uni.isUnified(subst_plur_masc, equiv, true));
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