ChineseFilter.java
上传用户:cctqzzy
上传日期:2022-03-14
资源大小:12198k
文件大小:3k
源码类别:

搜索引擎

开发平台:

Java

  1. //package org.apache.lucene.analysis.cn;
  2. /**
  3.  * Licensed to the Apache Software Foundation (ASF) under one or more
  4.  * contributor license agreements.  See the NOTICE file distributed with
  5.  * this work for additional information regarding copyright ownership.
  6.  * The ASF licenses this file to You under the Apache License, Version 2.0
  7.  * (the "License"); you may not use this file except in compliance with
  8.  * the License.  You may obtain a copy of the License at
  9.  *
  10.  *     http://www.apache.org/licenses/LICENSE-2.0
  11.  *
  12.  * Unless required by applicable law or agreed to in writing, software
  13.  * distributed under the License is distributed on an "AS IS" BASIS,
  14.  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  15.  * See the License for the specific language governing permissions and
  16.  * limitations under the License.
  17.  */
  18. package chapter8;
  19. import java.util.Hashtable;
  20. import org.apache.lucene.analysis.*;
  21. /**
  22.  * Title: ChineseFilter
  23.  * Description: Filter with a stop word table
  24.  *              Rule: No digital is allowed.
  25.  *                    English word/token should larger than 1 character.
  26.  *                    One Chinese character as one Chinese word.
  27.  * TO DO:
  28.  *   1. Add Chinese stop words, such as ue400
  29.  *   2. Dictionary based Chinese word extraction
  30.  *   3. Intelligent Chinese word extraction
  31.  *
  32.  * Copyright:    Copyright (c) 2001
  33.  * Company:
  34.  * @author Yiyi Sun
  35.  * @version 1.0
  36.  *
  37.  */
  38. public final class ChineseFilter extends TokenFilter {
  39.     // Only English now, Chinese to be added later.
  40.     public static final String[] STOP_WORDS = {
  41.     "and", "are", "as", "at", "be", "but", "by",
  42.     "for", "if", "in", "into", "is", "it",
  43.     "no", "not", "of", "on", "or", "such",
  44.     "that", "the", "their", "then", "there", "these",
  45.     "they", "this", "to", "was", "will", "with"
  46.     };
  47.     private Hashtable stopTable;
  48.     public ChineseFilter(TokenStream in) {
  49.         super(in);
  50.         stopTable = new Hashtable(STOP_WORDS.length);
  51.         for (int i = 0; i < STOP_WORDS.length; i++)
  52.             stopTable.put(STOP_WORDS[i], STOP_WORDS[i]);
  53.     }
  54.     public final Token next() throws java.io.IOException {
  55.         for (Token token = input.next(); token != null; token = input.next()) {
  56.             String text = token.termText();
  57.           // why not key off token type here assuming ChineseTokenizer comes first?
  58.             if (stopTable.get(text) == null) {
  59.                 switch (Character.getType(text.charAt(0))) {
  60.                 case Character.LOWERCASE_LETTER:
  61.                 case Character.UPPERCASE_LETTER:
  62.                     // English word/token should larger than 1 character.
  63.                     if (text.length()>1) {
  64.                         return token;
  65.                     }
  66.                     break;
  67.                 case Character.OTHER_LETTER:
  68.                     // One Chinese character as one Chinese word.
  69.                     // Chinese word extraction to be added later here.
  70.                     return token;
  71.                 }
  72.             }
  73.         }
  74.         return null;
  75.     }
  76. }