All Downloads are FREE. Search and download functionalities are using the official Maven repository.

net.paoding.analysis.knife.KnifeBox Maven / Gradle / Ivy

/**
 * Copyright 2007 The Apache Software Foundation
 *
 * Licensed 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.
 */
package net.paoding.analysis.knife;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

/**
 * KnifeBox负责决策当遇到字符串指定位置时应使用的Knife对象.
 * 

* * @author Zhiliang Wang [[email protected]] * * @see Paoding * * @since 1.0 * */ public class KnifeBox implements Knife { private Knife[] knives; private int size; public KnifeBox() { } public KnifeBox(List knives) { this.setKnives(knives); } public KnifeBox(Knife[] knives) { this.setKnives(knives); } /** * 返回配置的所有Knife
* !!!不要去变更返回数组中的元素 * * @return */ public Knife[] getKnives() { return knives; } public void setKnives(List knifeList) { if (knifeList == null) { knifeList = new ArrayList(0); } size = knifeList.size(); this.knives = new Knife[size]; Iterator iter = knifeList.iterator(); for (int i = 0; i < size; i++) { this.knives[i] = iter.next(); } } public void setKnives(Knife[] knives) { if (knives == null) { knives = new Knife[0]; } size = knives.length; this.knives = new Knife[size]; System.arraycopy(knives, 0, this.knives, 0, size); } public int assignable(Beef beef, int offset, int index) { return ASSIGNED; } public int dissect(Collector collector, Beef beef, int offset) { Knife knife; for (int i = 0; i < size; i++) { knife = knives[i]; if (ASSIGNED == knife.assignable(beef, offset, offset)) { int lastLimit = knife.dissect(collector, beef, offset); // 如果返回的下一个分词点发生了变化(可进可退),则直接返回之, // 否则继续让下一个Knife有机会分词 if (lastLimit != offset) { return lastLimit; } } } return ++offset; } }





© 2015 - 2024 Weber Informatics LLC | Privacy Policy