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