1 package org.daisy.pipeline.nlp.impl.matchrules;
2
3 import java.util.ArrayList;
4 import java.util.Arrays;
5 import java.util.Collection;
6 import java.util.Locale;
7
8 import org.daisy.pipeline.nlp.TextCategorizer.Category;
9 import org.daisy.pipeline.nlp.TextCategorizer.MatchMode;
10 import org.daisy.pipeline.nlp.impl.FullMatchStringFinder;
11 import org.daisy.pipeline.nlp.impl.IStringFinder;
12 import org.daisy.pipeline.nlp.impl.MatchRule;
13 import org.daisy.pipeline.nlp.impl.PrefixMatchStringFinder;
14
15
16
17
18 public class WordListMatchRule extends MatchRule {
19 private boolean mCapitalSensitive;
20 private IStringFinder mStringFinder;
21 private Locale mLocale;
22
23
24
25
26 public WordListMatchRule(Category category, int priority, boolean caseSensitive,
27 MatchMode matchMode, boolean capitalSensitive, Locale locale) {
28 super(category, priority, caseSensitive, matchMode);
29 mLocale = locale;
30 mCapitalSensitive = capitalSensitive;
31 switch (matchMode) {
32 case FULL_MATCH:
33 mStringFinder = new FullMatchStringFinder();
34 default:
35 mStringFinder = new PrefixMatchStringFinder();
36 }
37 }
38
39 public void init(Collection<String> prefixes) {
40 Collection<String> tocompile;
41 if (mCaseSensitive) {
42 if (!mCapitalSensitive) {
43 tocompile = new ArrayList<String>();
44 tocompile.addAll(prefixes);
45 for (String prefix : prefixes) {
46 String lw = prefix.toLowerCase(mLocale);
47 tocompile.add(lw.substring(0, 1) + prefix.substring(1));
48 }
49 } else
50 tocompile = prefixes;
51 } else {
52 String[] lowerCasePrefixes = new String[prefixes.size()];
53 int k = 0;
54 for (String prefix : prefixes) {
55 lowerCasePrefixes[k++] = prefix.toLowerCase(mLocale);
56 }
57 tocompile = Arrays.asList(lowerCasePrefixes);
58 }
59 mStringFinder.compile(tocompile);
60 }
61
62 @Override
63 protected String match(String input) {
64 return mStringFinder.find(input);
65 }
66
67 @Override
68 public boolean threadsafe() {
69 return mStringFinder.threadsafe();
70 }
71
72 }