1
22 package org.crosswire.jsword.index.lucene.analysis;
23
24 import java.io.IOException;
25 import java.io.Reader;
26
27 import org.apache.lucene.analysis.LowerCaseFilter;
28 import org.apache.lucene.analysis.StopFilter;
29 import org.apache.lucene.analysis.TokenStream;
30 import org.apache.lucene.analysis.ar.ArabicAnalyzer;
31 import org.apache.lucene.analysis.ar.ArabicLetterTokenizer;
32 import org.apache.lucene.analysis.ar.ArabicNormalizationFilter;
33 import org.apache.lucene.analysis.ar.ArabicStemFilter;
34 import org.apache.lucene.util.Version;
35
36
46 public class ArabicLuceneAnalyzer extends AbstractBookAnalyzer {
47 public ArabicLuceneAnalyzer() throws IOException {
48 stopSet = ArabicAnalyzer.getDefaultStopSet();
49 }
50
51
54 @Override
55 public final TokenStream tokenStream(String fieldName, Reader reader) {
56 TokenStream result = new ArabicLetterTokenizer(reader);
57 result = new LowerCaseFilter(result);
58 result = new ArabicNormalizationFilter(result);
59 if (doStopWords && stopSet != null) {
60 result = new StopFilter(false, result, stopSet);
61 }
62
63 if (doStemming) {
64 result = new ArabicStemFilter(result);
65 }
66
67 return result;
68 }
69
70
73 @Override
74 public TokenStream reusableTokenStream(String fieldName, Reader reader) throws IOException {
75 SavedStreams streams = (SavedStreams) getPreviousTokenStream();
76 if (streams == null) {
77 streams = new SavedStreams(new ArabicLetterTokenizer(reader));
78 streams.setResult(new LowerCaseFilter(streams.getResult()));
79 streams.setResult(new ArabicNormalizationFilter(streams.getResult()));
80
81 if (doStopWords && stopSet != null) {
82 streams.setResult(new StopFilter(StopFilter.getEnablePositionIncrementsVersionDefault(matchVersion), streams.getResult(), stopSet));
83 }
84
85 if (doStemming) {
86 streams.setResult(new ArabicStemFilter(streams.getResult()));
87 }
88
89 setPreviousTokenStream(streams);
90 } else {
91 streams.getSource().reset(reader);
92 }
93 return streams.getResult();
94 }
95
96 private final Version matchVersion = Version.LUCENE_29;
97 }
98