Revision: 7259
http://languagetool.svn.sourceforge.net/languagetool/?rev=7259&view=rev
Author: milek_pl
Date: 2012-06-06 08:20:28 +0000 (Wed, 06 Jun 2012)
Log Message:
-----------
some progress on the unifier
Modified Paths:
--------------
trunk/JLanguageTool/.classpath
trunk/JLanguageTool/src/java/org/languagetool/rules/patterns/Unifier.java
trunk/JLanguageTool/src/test/org/languagetool/rules/patterns/UnifierTest.java
Modified: trunk/JLanguageTool/.classpath
===================================================================
--- trunk/JLanguageTool/.classpath 2012-06-06 07:18:42 UTC (rev 7258)
+++ trunk/JLanguageTool/.classpath 2012-06-06 08:20:28 UTC (rev 7259)
@@ -9,7 +9,7 @@
</attributes>
</classpathentry>
<classpathentry kind="src" path="libs/native-lib"/>
- <classpathentry kind="lib" path="libs/build/junit.jar">
+ <classpathentry kind="lib" path="libs/build/junit.jar"
sourcepath="C:/Users/user/.m2/repository/junit/junit/4.8.2/junit-4.8.2-sources.jar">
<attributes>
<attribute
name="org.eclipse.jdt.launching.CLASSPATH_ATTR_LIBRARY_PATH_ENTRY"
value="JLanguageTool/libs/native-lib"/>
</attributes>
Modified:
trunk/JLanguageTool/src/java/org/languagetool/rules/patterns/Unifier.java
===================================================================
--- trunk/JLanguageTool/src/java/org/languagetool/rules/patterns/Unifier.java
2012-06-06 07:18:42 UTC (rev 7258)
+++ trunk/JLanguageTool/src/java/org/languagetool/rules/patterns/Unifier.java
2012-06-06 08:20:28 UTC (rev 7259)
@@ -232,7 +232,10 @@
} else {
if (readingsCounter<tokSequence.size()) {
tokSequence.get(readingsCounter).addReading(aToken);
- } /* else? */
+ } else {
+ unifiedNext = false;
+ }
+ /* else? */
}
tmpFeaturesFound = tokenFeaturesFound;
}
Modified:
trunk/JLanguageTool/src/test/org/languagetool/rules/patterns/UnifierTest.java
===================================================================
---
trunk/JLanguageTool/src/test/org/languagetool/rules/patterns/UnifierTest.java
2012-06-06 07:18:42 UTC (rev 7258)
+++
trunk/JLanguageTool/src/test/org/languagetool/rules/patterns/UnifierTest.java
2012-06-06 08:20:28 UTC (rev 7259)
@@ -26,6 +26,8 @@
import java.util.ArrayList;
import junit.framework.TestCase;
+
+import org.junit.Test;
import org.languagetool.AnalyzedToken;
public class UnifierTest extends TestCase {
@@ -183,8 +185,8 @@
uni.setEquivalence("gender", "masculine", mascElement);
final AnalyzedToken sing1 = new AnalyzedToken("mały", "adj:sg:blahblah:m",
"mały");
- final AnalyzedToken sing1a = new AnalyzedToken("mały",
"adj:sg:blahblah:f", "mały");
- final AnalyzedToken sing1b = new AnalyzedToken("mały",
"adj:pl:blahblah:m", "mały");
+ final AnalyzedToken sing1a = new AnalyzedToken("mała",
"adj:sg:blahblah:f", "mały");
+ final AnalyzedToken sing1b = new AnalyzedToken("małe",
"adj:pl:blahblah:m", "mały");
final AnalyzedToken sing2 = new AnalyzedToken("człowiek",
"subst:sg:blahblah:m", "człowiek");
final Map<String, List<String>> equiv = new HashMap<String,
List<String>>();
@@ -203,6 +205,7 @@
}
// checks if all tokens share the same set of features to be unified
+ @Test
public void testMultipleFeats() {
final Unifier uni = new Unifier();
final Element sgElement = new Element("", false, false, false);
@@ -281,4 +284,109 @@
uni.reset();
}
+ @Test
+ public void testNegation() {
+ final Unifier uni = new Unifier();
+ final Element sgElement = new Element("", false, false, false);
+ sgElement.setPosElement(".*[\\.:]sg:.*", true, false);
+ uni.setEquivalence("number", "singular", sgElement);
+ final Element plElement = new Element("", false, false, false);
+ plElement.setPosElement(".*[\\.:]pl:.*", true, false);
+ uni.setEquivalence("number", "plural", plElement);
+ final Element femElement = new Element("", false, false, false);
+ femElement.setPosElement(".*:f", true, false);
+ uni.setEquivalence("gender", "feminine", femElement);
+ final Element mascElement = new Element("", false, false, false);
+ mascElement.setPosElement(".*:m", true, false);
+ uni.setEquivalence("gender", "masculine", mascElement);
+
+ //Latin adjectives
+ final AnalyzedToken sing_masc = new AnalyzedToken("parvus",
"adj:sg:blahblah:m", "parvus");
+ final AnalyzedToken plur_masc = new AnalyzedToken("parvi",
"adj:sg:blahblah:m", "parvus");
+ final AnalyzedToken plur_fem = new AnalyzedToken("parvae",
"adj:pl:blahblah:f", "parvus");
+ final AnalyzedToken sing_fem = new AnalyzedToken("parva",
"adj:sg:blahblah:f", "parvus");
+
+ //Let's pretend Latin has determiners
+ final AnalyzedToken det_sing_fem = new AnalyzedToken("una",
"det:sg:blahblah:f", "unus");
+ final AnalyzedToken det_plur_fem = new AnalyzedToken("unae",
"det:sg:blahblah:f", "unus");
+ final AnalyzedToken det_sing_masc = new AnalyzedToken("unus",
"det:sg:blahblah:m", "unus");
+ final AnalyzedToken det_plur_masc = new AnalyzedToken("uni",
"det:sg:blahblah:m", "unus");
+
+ //and nouns
+ final AnalyzedToken subst_sing_fem = new AnalyzedToken("discrepatio",
"subst:sg:blahblah:f", "discrepatio");
+ final AnalyzedToken subst_plur_fem = new AnalyzedToken("discrepationes",
"subst:sg:blahblah:f", "discrepatio");
+ final AnalyzedToken subst_sing_masc = new AnalyzedToken("homo",
"sg:sg:blahblah:m", "homo");
+ final AnalyzedToken subst_plur_masc = new AnalyzedToken("homines",
"sg:sg:blahblah:m", "homo");
+
+ //now we should have 4x4x4 combinations...
+
+ final Map<String, List<String>> equiv = new HashMap<String,
List<String>>();
+ equiv.put("number", null);
+ equiv.put("gender", null);
+
+ boolean satisfied = uni.isSatisfied(det_sing_masc, equiv);
+ uni.startUnify();
+ satisfied &= uni.isSatisfied(sing_masc, equiv);
+ uni.startNextToken();
+ satisfied &= uni.isSatisfied(subst_sing_masc, equiv);
+ uni.startNextToken();
+ assertEquals(true, satisfied);
+ uni.reset();
+
+ //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);
+ assertEquals(true, satisfied);
+ uni.reset();
+
+ //now let's negate this
+
+ //traditional way
+ uni.setNegation(true);
+ satisfied = uni.isSatisfied(det_sing_masc, equiv);
+ uni.startUnify();
+ satisfied &= uni.isSatisfied(sing_masc, equiv);
+ uni.startNextToken();
+ satisfied &= uni.isSatisfied(subst_sing_masc, equiv);
+ uni.startNextToken();
+ 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);
+ 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);
+ satisfied &= uni.isUnified(subst_sing_masc, equiv, true, 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);
+ satisfied &= uni.isUnified(subst_sing_masc, equiv, true, 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...
+ 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_fem, equiv, true, 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