MatchRule16.java
01 package gate.creole.orthomatcher;
02 
03 import gate.Annotation;
04 
05 /**
06  * RULE #15: Does every token in the shorter name appear in the longer name?
07  */
08 public class MatchRule16 implements OrthoMatcherRule {
09 
10     OrthoMatcher orthmatcher;
11   
12   public MatchRule16(OrthoMatcher orthomatcher){
13       this.orthmatcher=orthomatcher;
14   }
15   
16   @Override
17   public boolean value(String s1, String s2) {
18   
19     boolean result =true;
20     
21     //do a token-by-token test
22       Annotation token1, token2;
23       // catch (ExecutionException e) {}
24       for (int i=0; i < orthmatcher.tokensShortAnnot.size(); i++) {
25         token1 = orthmatcher.tokensShortAnnot.get(i);
26         //first check if not punctuation, because we need to skip it
27         if (token1.getFeatures().get(OrthoMatcher.TOKEN_KIND_FEATURE_NAME).equals(OrthoMatcher.PUNCTUATION_VALUE))
28           continue;
29 
30         String ts1 = (String)token1.getFeatures().get(OrthoMatcher.TOKEN_STRING_FEATURE_NAME);
31         boolean foundMatch = false;
32         for (int j=0; j<orthmatcher.tokensLongAnnot.size(); j++) {
33           // Out.prln("i = " + i);
34           token2 = orthmatcher.tokensLongAnnot.get(j);
35           if (token2.getFeatures().get(OrthoMatcher.TOKEN_KIND_FEATURE_NAME).equals(OrthoMatcher.PUNCTUATION_VALUE))
36             continue;
37 
38           String ts2 = (String)token2.getFeatures().get(OrthoMatcher.TOKEN_STRING_FEATURE_NAME);
39 
40           if (i == && j == 0) {
41             foundMatch = orthmatcher.getOrthography().fuzzyMatch(ts1, ts2);
42           }
43           else {
44             if (orthmatcher.caseSensitive) {
45               if (ts2.equals(ts1)) {
46                 foundMatch = true;
47                 break;
48               }
49             }
50             else {
51               if (ts2.equalsIgnoreCase(ts1)) {
52                 foundMatch = true;
53                 break;
54               }
55             }
56           }
57         }//for
58         //if no match for the current tokenShortAnnot, then it is not a coref of the
59         //longer annot
60         if (!foundMatch)
61           result = false;
62       // for
63 
64       //only get to here if all word tokens in the short annot were found in
65       //the long annot, so there is a coref relation
66       if (OrthoMatcher.log.isDebugEnabled())
67         OrthoMatcher.log.debug("rule 16 matched " + s1 + " to " + s2);
68       
69       if(resultOrthoMatcherHelper.usedRule(16);
70       return result;
71   }
72   
73   @Override
74   public String getId(){
75     return "MatchRule16";
76   }
77 }