亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? germanstemmer.java

?? Lucene a java open-source SearchEngine Framework
?? JAVA
字號:
package org.apache.lucene.analysis.de;// This file is encoded in UTF-8/** * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements.  See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License.  You may obtain a copy of the License at * *     http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. *//** * A stemmer for German words. The algorithm is based on the report * "A Fast and Simple Stemming Algorithm for German Words" by J&ouml;rg * Caumanns (joerg.caumanns at isst.fhg.de). * * * @version   $Id: GermanStemmer.java 564236 2007-08-09 15:21:19Z gsingers $ */public class GermanStemmer{    /**     * Buffer for the terms while stemming them.     */    private StringBuffer sb = new StringBuffer();    /**     * Amount of characters that are removed with <tt>substitute()</tt> while stemming.     */    private int substCount = 0;    /**     * Stemms the given term to an unique <tt>discriminator</tt>.     *     * @param term  The term that should be stemmed.     * @return      Discriminator for <tt>term</tt>     */    protected String stem( String term )    {      // Use lowercase for medium stemming.      term = term.toLowerCase();      if ( !isStemmable( term ) )        return term;      // Reset the StringBuffer.      sb.delete( 0, sb.length() );      sb.insert( 0, term );      // Stemming starts here...      substitute( sb );      strip( sb );      optimize( sb );      resubstitute( sb );      removeParticleDenotion( sb );      return sb.toString();    }    /**     * Checks if a term could be stemmed.     *     * @return  true if, and only if, the given term consists in letters.     */    private boolean isStemmable( String term )    {      for ( int c = 0; c < term.length(); c++ ) {        if ( !Character.isLetter( term.charAt( c ) ) )          return false;      }      return true;    }    /**     * suffix stripping (stemming) on the current term. The stripping is reduced     * to the seven "base" suffixes "e", "s", "n", "t", "em", "er" and * "nd",     * from which all regular suffixes are build of. The simplification causes     * some overstemming, and way more irregular stems, but still provides unique.     * discriminators in the most of those cases.     * The algorithm is context free, except of the length restrictions.     */    private void strip( StringBuffer buffer )    {      boolean doMore = true;      while ( doMore && buffer.length() > 3 ) {        if ( ( buffer.length() + substCount > 5 ) &&          buffer.substring( buffer.length() - 2, buffer.length() ).equals( "nd" ) )        {          buffer.delete( buffer.length() - 2, buffer.length() );        }        else if ( ( buffer.length() + substCount > 4 ) &&          buffer.substring( buffer.length() - 2, buffer.length() ).equals( "em" ) ) {            buffer.delete( buffer.length() - 2, buffer.length() );        }        else if ( ( buffer.length() + substCount > 4 ) &&          buffer.substring( buffer.length() - 2, buffer.length() ).equals( "er" ) ) {            buffer.delete( buffer.length() - 2, buffer.length() );        }        else if ( buffer.charAt( buffer.length() - 1 ) == 'e' ) {          buffer.deleteCharAt( buffer.length() - 1 );        }        else if ( buffer.charAt( buffer.length() - 1 ) == 's' ) {          buffer.deleteCharAt( buffer.length() - 1 );        }        else if ( buffer.charAt( buffer.length() - 1 ) == 'n' ) {          buffer.deleteCharAt( buffer.length() - 1 );        }        // "t" occurs only as suffix of verbs.        else if ( buffer.charAt( buffer.length() - 1 ) == 't' ) {          buffer.deleteCharAt( buffer.length() - 1 );        }        else {          doMore = false;        }      }    }    /**     * Does some optimizations on the term. This optimisations are     * contextual.     */    private void optimize( StringBuffer buffer )    {      // Additional step for female plurals of professions and inhabitants.      if ( buffer.length() > 5 && buffer.substring( buffer.length() - 5, buffer.length() ).equals( "erin*" ) ) {        buffer.deleteCharAt( buffer.length() -1 );        strip( buffer );      }      // Additional step for irregular plural nouns like "Matrizen -> Matrix".      if ( buffer.charAt( buffer.length() - 1 ) == ( 'z' ) ) {        buffer.setCharAt( buffer.length() - 1, 'x' );      }    }    /**     * Removes a particle denotion ("ge") from a term.     */    private void removeParticleDenotion( StringBuffer buffer )    {      if ( buffer.length() > 4 ) {        for ( int c = 0; c < buffer.length() - 3; c++ ) {          if ( buffer.substring( c, c + 4 ).equals( "gege" ) ) {            buffer.delete( c, c + 2 );            return;          }        }      }    }    /**     * Do some substitutions for the term to reduce overstemming:     *     * - Substitute Umlauts with their corresponding vowel: ??ü -> aou,     *   "?" is substituted by "ss"     * - Substitute a second char of a pair of equal characters with     *   an asterisk: ?? -> ?*     * - Substitute some common character combinations with a token:     *   sch/ch/ei/ie/ig/st -> $/§/%/&/#/!     */    private void substitute( StringBuffer buffer )    {      substCount = 0;      for ( int c = 0; c < buffer.length(); c++ ) {        // Replace the second char of a pair of the equal characters with an asterisk        if ( c > 0 && buffer.charAt( c ) == buffer.charAt ( c - 1 )  ) {          buffer.setCharAt( c, '*' );        }        // Substitute Umlauts.        else if ( buffer.charAt( c ) == '?' ) {          buffer.setCharAt( c, 'a' );        }        else if ( buffer.charAt( c ) == '?' ) {          buffer.setCharAt( c, 'o' );        }        else if ( buffer.charAt( c ) == 'ü' ) {          buffer.setCharAt( c, 'u' );        }        // Fix bug so that '?' at the end of a word is replaced.        else if ( buffer.charAt( c ) == '?' ) {            buffer.setCharAt( c, 's' );            buffer.insert( c + 1, 's' );            substCount++;        }        // Take care that at least one character is left left side from the current one        if ( c < buffer.length() - 1 ) {          // Masking several common character combinations with an token          if ( ( c < buffer.length() - 2 ) && buffer.charAt( c ) == 's' &&            buffer.charAt( c + 1 ) == 'c' && buffer.charAt( c + 2 ) == 'h' )          {            buffer.setCharAt( c, '$' );            buffer.delete( c + 1, c + 3 );            substCount =+ 2;          }          else if ( buffer.charAt( c ) == 'c' && buffer.charAt( c + 1 ) == 'h' ) {            buffer.setCharAt( c, '§' );            buffer.deleteCharAt( c + 1 );            substCount++;          }          else if ( buffer.charAt( c ) == 'e' && buffer.charAt( c + 1 ) == 'i' ) {            buffer.setCharAt( c, '%' );            buffer.deleteCharAt( c + 1 );            substCount++;          }          else if ( buffer.charAt( c ) == 'i' && buffer.charAt( c + 1 ) == 'e' ) {            buffer.setCharAt( c, '&' );            buffer.deleteCharAt( c + 1 );            substCount++;          }          else if ( buffer.charAt( c ) == 'i' && buffer.charAt( c + 1 ) == 'g' ) {            buffer.setCharAt( c, '#' );            buffer.deleteCharAt( c + 1 );            substCount++;          }          else if ( buffer.charAt( c ) == 's' && buffer.charAt( c + 1 ) == 't' ) {            buffer.setCharAt( c, '!' );            buffer.deleteCharAt( c + 1 );            substCount++;          }        }      }    }    /**     * Undoes the changes made by substitute(). That are character pairs and     * character combinations. Umlauts will remain as their corresponding vowel,     * as "?" remains as "ss".     */    private void resubstitute( StringBuffer buffer )    {      for ( int c = 0; c < buffer.length(); c++ ) {        if ( buffer.charAt( c ) == '*' ) {          char x = buffer.charAt( c - 1 );          buffer.setCharAt( c, x );        }        else if ( buffer.charAt( c ) == '$' ) {          buffer.setCharAt( c, 's' );          buffer.insert( c + 1, new char[]{'c', 'h'}, 0, 2 );        }        else if ( buffer.charAt( c ) == '§' ) {          buffer.setCharAt( c, 'c' );          buffer.insert( c + 1, 'h' );        }        else if ( buffer.charAt( c ) == '%' ) {          buffer.setCharAt( c, 'e' );          buffer.insert( c + 1, 'i' );        }        else if ( buffer.charAt( c ) == '&' ) {          buffer.setCharAt( c, 'i' );          buffer.insert( c + 1, 'e' );        }        else if ( buffer.charAt( c ) == '#' ) {          buffer.setCharAt( c, 'i' );          buffer.insert( c + 1, 'g' );        }        else if ( buffer.charAt( c ) == '!' ) {          buffer.setCharAt( c, 's' );          buffer.insert( c + 1, 't' );        }      }    }    }

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产91精品免费| 国产成人无遮挡在线视频| 欧美国产禁国产网站cc| 精品久久国产字幕高潮| 日韩三级伦理片妻子的秘密按摩| 在线观看一区日韩| 欧美午夜视频网站| 欧美一级理论片| 久久久欧美精品sm网站| 国产日本亚洲高清| 亚洲三级在线看| 午夜电影网一区| 久久精品国产亚洲高清剧情介绍 | 国产婷婷色一区二区三区在线| 日韩三级中文字幕| 欧美国产丝袜视频| 亚洲黄色小说网站| 日韩激情一二三区| 国产麻豆午夜三级精品| 成人h动漫精品一区二区 | 日韩久久一区二区| 美女www一区二区| 国产精品一区不卡| 91啪亚洲精品| 日韩女优av电影在线观看| 国产女人aaa级久久久级 | 91网站在线观看视频| 一本色道久久综合亚洲aⅴ蜜桃| 在线免费观看一区| 日韩欧美卡一卡二| 亚洲男女一区二区三区| 奇米色一区二区| 99免费精品在线观看| 欧美日韩黄色一区二区| 精品欧美一区二区三区精品久久| 日本一区二区不卡视频| 日本在线播放一区二区三区| 国产美女av一区二区三区| 91久久香蕉国产日韩欧美9色| 56国语精品自产拍在线观看| 国产精品久久久久一区二区三区| 丝袜美腿一区二区三区| 成人午夜免费视频| 精品国产免费久久| 亚洲成人先锋电影| 91视频在线观看| 久久人人超碰精品| 日本不卡免费在线视频| 91网站在线观看视频| 亚洲精品一区二区三区影院 | 8v天堂国产在线一区二区| 久久久三级国产网站| 天天免费综合色| 99久久99久久免费精品蜜臀| 欧美一级高清大全免费观看| 亚洲精品国产精华液| 国产成人一级电影| 精品国产污网站| 午夜伦欧美伦电影理论片| 91日韩一区二区三区| 国产精品久久久久久久久免费丝袜| 男男成人高潮片免费网站| 欧美成人bangbros| 日本aⅴ免费视频一区二区三区| 色噜噜夜夜夜综合网| 亚洲欧美综合另类在线卡通| 国产精品香蕉一区二区三区| 精品少妇一区二区三区视频免付费| 亚洲第一二三四区| 欧美写真视频网站| 亚洲男帅同性gay1069| 暴力调教一区二区三区| 国产精品网友自拍| 99re视频精品| 亚洲欧美色图小说| 91一区一区三区| 亚洲综合视频在线观看| 色网综合在线观看| 一区二区三区精品视频| 99精品欧美一区二区三区综合在线| 国产精品天美传媒| av在线不卡免费看| 亚洲精品国产无套在线观| 在线观看日韩精品| 日韩av在线发布| 精品国产乱码久久久久久夜甘婷婷 | 婷婷成人激情在线网| 91麻豆精品国产91久久久使用方法| 日韩成人dvd| 337p日本欧洲亚洲大胆精品| 国产成人在线电影| 一区二区三区日韩精品| 91精品国产综合久久国产大片| 免费精品视频在线| 欧美国产日本韩| 91成人国产精品| 另类小说色综合网站| 久久综合九色欧美综合狠狠| 成人激情小说乱人伦| 亚洲国产一区二区三区青草影视| 日韩一区二区三区视频| 成人性色生活片| 一区二区三区.www| 精品国产伦理网| 欧洲一区在线观看| 黄色小说综合网站| 亚洲精品一二三| 欧美电影免费观看高清完整版在线 | 国产99久久精品| 一区二区成人在线观看| 2024国产精品| 在线观看日韩电影| 国产不卡在线视频| 五月婷婷综合网| 国产精品国产自产拍在线| 欧美高清视频www夜色资源网| 国产成人综合精品三级| 天堂在线一区二区| 亚洲欧洲成人自拍| 久久免费国产精品| 欧美色窝79yyyycom| 国产999精品久久久久久绿帽| 亚洲综合一区二区三区| 国产欧美一区二区三区鸳鸯浴| 欧美日韩免费高清一区色橹橹 | 国产xxx精品视频大全| 亚洲国产中文字幕在线视频综合 | 在线一区二区三区做爰视频网站| 久久精品国产亚洲a| 亚洲一区二区三区四区在线| 中文文精品字幕一区二区| 欧美一区二区在线免费观看| 一本到高清视频免费精品| 国产成人综合亚洲91猫咪| 久久精品国内一区二区三区| 性感美女久久精品| 伊人一区二区三区| 椎名由奈av一区二区三区| 久久女同性恋中文字幕| 欧美不卡一区二区三区四区| 欧美精品777| 欧美日韩一区二区欧美激情| 色吊一区二区三区| 99精品黄色片免费大全| 成人福利视频网站| 成人av在线观| 不卡的电影网站| www.成人在线| 99精品视频在线免费观看| 不卡av免费在线观看| 成人av在线影院| 99视频超级精品| 色婷婷激情久久| 欧美三级在线播放| 欧美肥妇毛茸茸| 精品理论电影在线| 2020国产精品久久精品美国| www激情久久| 国产精品天天看| 一区二区三区免费网站| 五月天网站亚洲| 蜜臀av一级做a爰片久久| 精品写真视频在线观看| 国产激情视频一区二区三区欧美 | 国产亚洲成年网址在线观看| 久久精子c满五个校花| 国产精品久久久久一区二区三区| 国产精品亲子乱子伦xxxx裸| 亚洲区小说区图片区qvod| 亚洲一区二区四区蜜桃| 日韩主播视频在线| 久久99热这里只有精品| 粉嫩一区二区三区性色av| 91亚洲国产成人精品一区二区三| 在线看一区二区| 2021中文字幕一区亚洲| 综合久久久久久| 日韩国产精品久久| 夫妻av一区二区| 7777女厕盗摄久久久| 国产亚洲一本大道中文在线| 亚洲欧美另类小说| 久久精品国产99| 日本久久一区二区| 久久一区二区三区四区| 亚洲欧美日韩中文字幕一区二区三区 | 国产亚洲精品7777| 亚洲高清久久久| 成人免费黄色大片| 欧美一区二区三区日韩| 欧美国产一区视频在线观看| 亚洲小说欧美激情另类| 国产精品中文字幕欧美| 欧美日韩日日骚| 欧美国产1区2区| 久久成人免费电影| 在线观看视频91| 中文字幕在线视频一区| 日本中文字幕一区| 在线观看精品一区|