Revision: 7837
          
http://languagetool.svn.sourceforge.net/languagetool/?rev=7837&view=rev
Author:   dnaber
Date:     2012-08-12 00:00:34 +0000 (Sun, 12 Aug 2012)
Log Message:
-----------
wikipedia indexing: fix negation matching

Modified Paths:
--------------
    
trunk/JLanguageTool/src/dev/org/languagetool/dev/index/PatternRuleQueryBuilder.java
    
trunk/JLanguageTool/src/test/org/languagetool/dev/index/PatternRuleQueryBuilderTest.java

Modified: 
trunk/JLanguageTool/src/dev/org/languagetool/dev/index/PatternRuleQueryBuilder.java
===================================================================
--- 
trunk/JLanguageTool/src/dev/org/languagetool/dev/index/PatternRuleQueryBuilder.java
 2012-08-11 23:48:16 UTC (rev 7836)
+++ 
trunk/JLanguageTool/src/dev/org/languagetool/dev/index/PatternRuleQueryBuilder.java
 2012-08-12 00:00:34 UTC (rev 7837)
@@ -89,18 +89,21 @@
           query = spanQuery;
         }
       } else {
+        final int skip = getSkip(prevElement);
+        if (skip == 0) {
+          // we need to increase the skip because counting start from the 
beginning of a span query match:
+          skipCount++;
+        } else {
+          skipCount = 0;
+        }
         // attach the new query to the existing query - only this way
         // we can have per-query skips:
         if (element.getNegation()) {
-          query = new SpanNotQuery(query, spanQuery);
+          // SpanNotQuery(A,B) means: match spans A that don't overlap with 
spans B, thus for negation
+          // construct an "overlap" match of the previous and current span and 
keep only the previous matches:
+          final SpanNearQuery excludeQuery = new SpanNearQuery(new SpanQuery[] 
{ query, spanQuery }, getSkip(prevElement) + skipCount, true);
+          query = new SpanNotQuery(query, excludeQuery);
         } else {
-          final int skip = getSkip(prevElement);
-          if (skip == 0) {
-            // we need to increase the skip because counting start from the 
beginning of a span query match:
-            skipCount++;
-          } else {
-            skipCount = 0;
-          }
           query = new SpanNearQuery(new SpanQuery[] { query, spanQuery }, 
getSkip(prevElement) + skipCount, true);
         }
       }

Modified: 
trunk/JLanguageTool/src/test/org/languagetool/dev/index/PatternRuleQueryBuilderTest.java
===================================================================
--- 
trunk/JLanguageTool/src/test/org/languagetool/dev/index/PatternRuleQueryBuilderTest.java
    2012-08-11 23:48:16 UTC (rev 7836)
+++ 
trunk/JLanguageTool/src/test/org/languagetool/dev/index/PatternRuleQueryBuilderTest.java
    2012-08-12 00:00:34 UTC (rev 7837)
@@ -264,8 +264,12 @@
 
     // negation:
     assertMatches(makeRule("<token>How</token> <token 
negate=\"yes\">foo</token>"), 1);
-    // TODO: add tests
-    //assertMatches(makeRule("<token>How</token> <token 
negate=\"yes\">do</token>"), 0);
+    assertMatches(makeRule("<token>How</token> <token 
negate=\"yes\">do</token>"), 0);
+    assertMatches(makeRule("<token>How</token> <token>do</token> <token 
negate=\"yes\">foo</token>"), 1);
+    assertMatches(makeRule("<token>How</token> <token 
negate=\"yes\">foo</token> <token>you</token>"), 1);
+    assertMatches(makeRule("<token>How</token> <token>do</token> <token 
negate=\"yes\">you</token>"), 0);
+    assertMatches(makeRule("<token>How</token> <token 
negate=\"yes\">do</token> <token>you</token>"), 0);
+    assertMatches(makeRule("<token>How</token> <token 
negate=\"yes\">do</token> <token negate=\"yes\">you</token>"), 0);
   }
 
   private void assertMatches(PatternRule patternRule, int expectedMatches) 
throws Exception {

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
Languagetool-cvs@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/languagetool-cvs

Reply via email to