add --shared
[pylucene.git] / lucene-java-3.4.0 / lucene / contrib / benchmark / src / java / org / apache / lucene / benchmark / byTask / tasks / NewShingleAnalyzerTask.java
1 package org.apache.lucene.benchmark.byTask.tasks;
2
3 /**
4  * Licensed to the Apache Software Foundation (ASF) under one or more
5  * contributor license agreements.  See the NOTICE file distributed with
6  * this work for additional information regarding copyright ownership.
7  * The ASF licenses this file to You under the Apache License, Version 2.0
8  * (the "License"); you may not use this file except in compliance with
9  * the License.  You may obtain a copy of the License at
10  *
11  *     http://www.apache.org/licenses/LICENSE-2.0
12  *
13  * Unless required by applicable law or agreed to in writing, software
14  * distributed under the License is distributed on an "AS IS" BASIS,
15  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16  * See the License for the specific language governing permissions and
17  * limitations under the License.
18  */
19
20 import java.lang.reflect.Constructor;
21 import java.util.StringTokenizer;
22
23 import org.apache.lucene.analysis.Analyzer;
24 import org.apache.lucene.analysis.shingle.ShingleAnalyzerWrapper;
25 import org.apache.lucene.benchmark.byTask.PerfRunData;
26 import org.apache.lucene.util.Version;
27
28 /**
29  * Task to support benchmarking ShingleFilter / ShingleAnalyzerWrapper
30  * <p>
31  * <ul>
32  *  <li> <code>NewShingleAnalyzer</code> (constructs with all defaults)
33  *  <li> <code>NewShingleAnalyzer(analyzer:o.a.l.analysis.StandardAnalyzer,maxShingleSize:2,outputUnigrams:true)</code>
34  * </ul>
35  * </p>
36  */
37 public class NewShingleAnalyzerTask extends PerfTask {
38
39   private String analyzerClassName = "standard.StandardAnalyzer";
40   private int maxShingleSize = 2;
41   private boolean outputUnigrams = true;
42   
43   public NewShingleAnalyzerTask(PerfRunData runData) {
44     super(runData);
45   }
46
47   private void setAnalyzer() throws Exception {
48     Class<? extends Analyzer> clazz = null;
49     Analyzer wrappedAnalyzer;
50     try {
51       if (analyzerClassName == null || analyzerClassName.equals("")) {
52         analyzerClassName 
53           = "org.apache.lucene.analysis.standard.StandardAnalyzer"; 
54       }
55       if (analyzerClassName.indexOf(".") == -1 
56           || analyzerClassName.startsWith("standard.")) {
57         //there is no package name, assume o.a.l.analysis
58         analyzerClassName = "org.apache.lucene.analysis." + analyzerClassName;
59       }
60       clazz = Class.forName(analyzerClassName).asSubclass(Analyzer.class);
61       // first try to use a ctor with version parameter (needed for many new 
62       // Analyzers that have no default one anymore)
63       Constructor<? extends Analyzer> ctor = clazz.getConstructor(Version.class);
64       wrappedAnalyzer = ctor.newInstance(Version.LUCENE_CURRENT);
65     } catch (NoSuchMethodException e) {
66       // otherwise use default ctor
67       wrappedAnalyzer = clazz.newInstance();
68     }
69     ShingleAnalyzerWrapper analyzer 
70       = new ShingleAnalyzerWrapper(wrappedAnalyzer, maxShingleSize);
71     analyzer.setOutputUnigrams(outputUnigrams);
72     getRunData().setAnalyzer(analyzer);
73   }
74   
75   @Override
76   public int doLogic() throws Exception {
77     try {
78       setAnalyzer();
79       System.out.println
80         ("Changed Analyzer to: ShingleAnalyzerWrapper, wrapping ShingleFilter over" 
81          + analyzerClassName);
82     } catch (Exception e) {
83       throw new RuntimeException("Error creating Analyzer", e);
84     }
85     return 1;
86   }
87   
88   @Override
89   public void setParams(String params) {
90     super.setParams(params);
91     StringTokenizer st = new StringTokenizer(params, ",");
92     while (st.hasMoreTokens()) {
93       String param = st.nextToken();
94       StringTokenizer expr = new StringTokenizer(param, ":");
95       String key = expr.nextToken();
96       String value = expr.nextToken();
97       if (key.equalsIgnoreCase("analyzer")) {
98         analyzerClassName = value;
99       } else if (key.equalsIgnoreCase("outputUnigrams")) {
100         outputUnigrams = Boolean.parseBoolean(value);
101       } else if (key.equalsIgnoreCase("maxShingleSize")) {
102         maxShingleSize = (int)Double.parseDouble(value);
103       } else {
104         throw new RuntimeException("Unknown parameter " + param);
105       }
106     }
107   }
108
109   @Override
110   public boolean supportsParams() {
111     return true;
112   }
113 }