Revision: 7175
          
http://languagetool.svn.sourceforge.net/languagetool/?rev=7175&view=rev
Author:   dnaber
Date:     2012-06-02 17:59:09 +0000 (Sat, 02 Jun 2012)
Log Message:
-----------
don't sort by relevance; provide information whether query was relaxed (i.e. 
unsupported)

Modified Paths:
--------------
    trunk/JLanguageTool/src/dev/org/languagetool/dev/index/Searcher.java
    trunk/JLanguageTool/src/dev/org/languagetool/dev/index/SearcherResult.java
    
trunk/JLanguageTool/src/test/org/languagetool/dev/index/IndexerSearcherTest.java

Modified: trunk/JLanguageTool/src/dev/org/languagetool/dev/index/Searcher.java
===================================================================
--- trunk/JLanguageTool/src/dev/org/languagetool/dev/index/Searcher.java        
2012-06-02 16:14:15 UTC (rev 7174)
+++ trunk/JLanguageTool/src/dev/org/languagetool/dev/index/Searcher.java        
2012-06-02 17:59:09 UTC (rev 7175)
@@ -23,15 +23,12 @@
 import java.util.ArrayList;
 import java.util.List;
 
+import org.apache.lucene.search.*;
 import org.languagetool.JLanguageTool;
 import org.languagetool.Language;
 import org.languagetool.rules.Rule;
 import org.languagetool.rules.RuleMatch;
 import org.apache.lucene.document.Document;
-import org.apache.lucene.search.IndexSearcher;
-import org.apache.lucene.search.Query;
-import org.apache.lucene.search.ScoreDoc;
-import org.apache.lucene.search.TopDocs;
 import org.apache.lucene.store.FSDirectory;
 
 import org.languagetool.rules.patterns.PatternRule;
@@ -74,11 +71,12 @@
 
   public SearcherResult findRuleMatchesOnIndex(PatternRule rule, Language 
language, IndexSearcher indexSearcher) throws IOException {
     final PossiblyRelaxedQuery query = createQuery(rule);
-    final TopDocs topDocs = indexSearcher.search(query.query, maxHits);
+    final Sort sort = new Sort(new SortField("docCount", SortField.INT));  // 
do not sort by relevance as this will move the shortest documents to the top
+    final TopDocs topDocs = indexSearcher.search(query.query, maxHits, sort);
     final JLanguageTool languageTool = getLanguageToolWithOneRule(language, 
rule);
     final List<MatchingSentence> matchingSentences = 
findMatchingSentences(indexSearcher, topDocs, languageTool);
     final int sentencesChecked = getSentenceCheckCount(query, topDocs, 
indexSearcher);
-    return new SearcherResult(matchingSentences, sentencesChecked);
+    return new SearcherResult(matchingSentences, sentencesChecked, 
query.isRelaxed);
   }
 
   PatternRule getRuleById(String ruleId, File xmlRuleFile) throws IOException {

Modified: 
trunk/JLanguageTool/src/dev/org/languagetool/dev/index/SearcherResult.java
===================================================================
--- trunk/JLanguageTool/src/dev/org/languagetool/dev/index/SearcherResult.java  
2012-06-02 16:14:15 UTC (rev 7174)
+++ trunk/JLanguageTool/src/dev/org/languagetool/dev/index/SearcherResult.java  
2012-06-02 17:59:09 UTC (rev 7175)
@@ -27,10 +27,12 @@
 
   private final List<MatchingSentence> matchingSentences;
   private final int checkedSentences;
+  private final boolean relaxedQuery;
 
-  public SearcherResult(List<MatchingSentence> matchingSentences, int 
checkedSentences) {
+  public SearcherResult(List<MatchingSentence> matchingSentences, int 
checkedSentences, boolean relaxedQuery) {
     this.matchingSentences = matchingSentences;
     this.checkedSentences = checkedSentences;
+    this.relaxedQuery = relaxedQuery;
   }
 
   public List<MatchingSentence> getMatchingSentences() {
@@ -40,4 +42,8 @@
   public int getCheckedSentences() {
     return checkedSentences;
   }
+
+  public boolean isRelaxedQuery() {
+    return relaxedQuery;
+  }
 }

Modified: 
trunk/JLanguageTool/src/test/org/languagetool/dev/index/IndexerSearcherTest.java
===================================================================
--- 
trunk/JLanguageTool/src/test/org/languagetool/dev/index/IndexerSearcherTest.java
    2012-06-02 16:14:15 UTC (rev 7174)
+++ 
trunk/JLanguageTool/src/test/org/languagetool/dev/index/IndexerSearcherTest.java
    2012-06-02 17:59:09 UTC (rev 7175)
@@ -61,14 +61,17 @@
             errorSearcher.findRuleMatchesOnIndex(getRule("BACK_AND_FOURTH"), 
Language.ENGLISH, searcher);
     assertEquals(2, searcherResult.getCheckedSentences());
     assertEquals(1, searcherResult.getMatchingSentences().size());
+    assertEquals(false, searcherResult.isRelaxedQuery());
 
     searcherResult = errorSearcher.findRuleMatchesOnIndex(getRule("EYE_BROW"), 
Language.ENGLISH, searcher);
     assertEquals(1, searcherResult.getCheckedSentences());
     assertEquals(1, searcherResult.getMatchingSentences().size());
+    assertEquals(true, searcherResult.isRelaxedQuery());
 
     searcherResult = 
errorSearcher.findRuleMatchesOnIndex(getRule("ALL_OVER_THE_WORD"), 
Language.ENGLISH, searcher);
     assertEquals(2, searcherResult.getCheckedSentences());
     assertEquals(0, searcherResult.getMatchingSentences().size());
+    assertEquals(false, searcherResult.isRelaxedQuery());
 
     try {
       errorSearcher.findRuleMatchesOnIndex(getRule("Invalid Rule Id"), 
Language.ENGLISH, searcher);
@@ -93,6 +96,7 @@
       final SearcherResult searcherResult = 
errorSearcher.findRuleMatchesOnIndex(rule1, Language.ENGLISH, indexSearcher);
       assertEquals(1, searcherResult.getCheckedSentences());
       assertEquals(1, searcherResult.getMatchingSentences().size());
+      assertEquals(false, searcherResult.isRelaxedQuery());
       final List<RuleMatch> ruleMatches = 
searcherResult.getMatchingSentences().get(0).getRuleMatches();
       assertEquals(1, ruleMatches.size());
       final Rule rule = ruleMatches.get(0).getRule();
@@ -102,6 +106,29 @@
     }
   }
 
+  public void testIndexerSearcherWithRegexRule() throws Exception {
+    createIndex("How to move back and fourth from linux to xmb?");
+    final Searcher errorSearcher = new Searcher();
+    final List<Element> elements = Arrays.asList(
+            new Element("move", false, false, false),
+            new Element("forth|back", false, true, false)
+    );
+    final PatternRule rule1 = new PatternRule("RULE1", Language.ENGLISH, 
elements, "desc", "msg", "shortMsg");
+    final IndexSearcher indexSearcher = new IndexSearcher(directory);
+    try {
+      final SearcherResult searcherResult = 
errorSearcher.findRuleMatchesOnIndex(rule1, Language.ENGLISH, indexSearcher);
+      assertEquals(1, searcherResult.getCheckedSentences());
+      assertEquals(1, searcherResult.getMatchingSentences().size());
+      assertEquals(false, searcherResult.isRelaxedQuery());
+      final List<RuleMatch> ruleMatches = 
searcherResult.getMatchingSentences().get(0).getRuleMatches();
+      assertEquals(1, ruleMatches.size());
+      final Rule rule = ruleMatches.get(0).getRule();
+      assertEquals("RULE1", rule.getId());
+    } finally {
+      indexSearcher.close();
+    }
+  }
+
   /*public void testFoo() throws Exception {
     createIndex("Daily Bleed's Anarchist Encyclopedia");
     final List<Element> elements = Arrays.asList(

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

Reply via email to