pylucene 3.5.0-3
[pylucene.git] / lucene-java-3.5.0 / lucene / contrib / analyzers / common / src / test / org / apache / lucene / analysis / id / TestIndonesianStemmer.java
1 package org.apache.lucene.analysis.id;
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.io.IOException;
21 import java.io.Reader;
22
23 import org.apache.lucene.analysis.Analyzer;
24 import org.apache.lucene.analysis.BaseTokenStreamTestCase;
25 import org.apache.lucene.analysis.KeywordTokenizer;
26 import org.apache.lucene.analysis.ReusableAnalyzerBase;
27 import org.apache.lucene.analysis.Tokenizer;
28
29 /**
30  * Tests {@link IndonesianStemmer}
31  */
32 public class TestIndonesianStemmer extends BaseTokenStreamTestCase {
33   /* full stemming, no stopwords */
34   Analyzer a = new ReusableAnalyzerBase() {
35     @Override
36     public TokenStreamComponents createComponents(String fieldName, Reader reader) {
37       Tokenizer tokenizer = new KeywordTokenizer(reader);
38       return new TokenStreamComponents(tokenizer, new IndonesianStemFilter(tokenizer));
39     }
40   };
41   
42   /** Some examples from the paper */
43   public void testExamples() throws IOException {
44     checkOneTerm(a, "bukukah", "buku");
45     checkOneTermReuse(a, "adalah", "ada");
46     checkOneTermReuse(a, "bukupun", "buku");
47     checkOneTermReuse(a, "bukuku", "buku");
48     checkOneTermReuse(a, "bukumu", "buku");
49     checkOneTermReuse(a, "bukunya", "buku");
50     checkOneTermReuse(a, "mengukur", "ukur");
51     checkOneTermReuse(a, "menyapu", "sapu");
52     checkOneTermReuse(a, "menduga", "duga");
53     checkOneTermReuse(a, "menuduh", "uduh");
54     checkOneTermReuse(a, "membaca", "baca");
55     checkOneTermReuse(a, "merusak", "rusak");
56     checkOneTermReuse(a, "pengukur", "ukur");
57     checkOneTermReuse(a, "penyapu", "sapu");
58     checkOneTermReuse(a, "penduga", "duga");
59     checkOneTermReuse(a, "pembaca", "baca");
60     checkOneTermReuse(a, "diukur", "ukur");
61     checkOneTermReuse(a, "tersapu", "sapu");
62     checkOneTermReuse(a, "kekasih", "kasih");
63     checkOneTermReuse(a, "berlari", "lari");
64     checkOneTermReuse(a, "belajar", "ajar");
65     checkOneTermReuse(a, "bekerja", "kerja");
66     checkOneTermReuse(a, "perjelas", "jelas");
67     checkOneTermReuse(a, "pelajar", "ajar");
68     checkOneTermReuse(a, "pekerja", "kerja");
69     checkOneTermReuse(a, "tarikkan", "tarik");
70     checkOneTermReuse(a, "ambilkan", "ambil");
71     checkOneTermReuse(a, "mengambilkan", "ambil");
72     checkOneTermReuse(a, "makanan", "makan");
73     checkOneTermReuse(a, "janjian", "janji");
74     checkOneTermReuse(a, "perjanjian", "janji");
75     checkOneTermReuse(a, "tandai", "tanda");
76     checkOneTermReuse(a, "dapati", "dapat");
77     checkOneTermReuse(a, "mendapati", "dapat");
78     checkOneTermReuse(a, "pantai", "panta");
79   }
80   
81   /** Some detailed analysis examples (that might not be the best) */
82   public void testIRExamples() throws IOException {
83     checkOneTerm(a, "penyalahgunaan", "salahguna");
84     checkOneTermReuse(a, "menyalahgunakan", "salahguna");
85     checkOneTermReuse(a, "disalahgunakan", "salahguna");
86        
87     checkOneTermReuse(a, "pertanggungjawaban", "tanggungjawab");
88     checkOneTermReuse(a, "mempertanggungjawabkan", "tanggungjawab");
89     checkOneTermReuse(a, "dipertanggungjawabkan", "tanggungjawab");
90     
91     checkOneTermReuse(a, "pelaksanaan", "laksana");
92     checkOneTermReuse(a, "pelaksana", "laksana");
93     checkOneTermReuse(a, "melaksanakan", "laksana");
94     checkOneTermReuse(a, "dilaksanakan", "laksana");
95     
96     checkOneTermReuse(a, "melibatkan", "libat");
97     checkOneTermReuse(a, "terlibat", "libat");
98     
99     checkOneTermReuse(a, "penculikan", "culik");
100     checkOneTermReuse(a, "menculik", "culik");
101     checkOneTermReuse(a, "diculik", "culik");
102     checkOneTermReuse(a, "penculik", "culik");
103     
104     checkOneTermReuse(a, "perubahan", "ubah");
105     checkOneTermReuse(a, "peledakan", "ledak");
106     checkOneTermReuse(a, "penanganan", "tangan");
107     checkOneTermReuse(a, "kepolisian", "polisi");
108     checkOneTermReuse(a, "kenaikan", "naik");
109     checkOneTermReuse(a, "bersenjata", "senjata");
110     checkOneTermReuse(a, "penyelewengan", "seleweng");
111     checkOneTermReuse(a, "kecelakaan", "celaka");
112   }
113   
114   /* inflectional-only stemming */
115   Analyzer b = new ReusableAnalyzerBase() {
116     @Override
117     public TokenStreamComponents createComponents(String fieldName, Reader reader) {
118       Tokenizer tokenizer = new KeywordTokenizer(reader);
119       return new TokenStreamComponents(tokenizer, new IndonesianStemFilter(tokenizer, false));
120     }
121   };
122   
123   /** Test stemming only inflectional suffixes */
124   public void testInflectionalOnly() throws IOException {
125     checkOneTerm(b, "bukunya", "buku");
126     checkOneTermReuse(b, "bukukah", "buku");
127     checkOneTermReuse(b, "bukunyakah", "buku");
128     checkOneTermReuse(b, "dibukukannya", "dibukukan");
129   }
130   
131   public void testShouldntStem() throws IOException {
132     checkOneTerm(a, "bersenjata", "senjata");
133     checkOneTermReuse(a, "bukukah", "buku");
134     checkOneTermReuse(a, "gigi", "gigi");
135   }
136 }