• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    迪恩网络公众号

Java TransitionIterator类代码示例

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

本文整理汇总了Java中cc.mallet.fst.Transducer.TransitionIterator的典型用法代码示例。如果您正苦于以下问题:Java TransitionIterator类的具体用法?Java TransitionIterator怎么用?Java TransitionIterator使用的例子?那么恭喜您, 这里精选的类代码示例或许可以为您提供帮助。



TransitionIterator类属于cc.mallet.fst.Transducer包,在下文中一共展示了TransitionIterator类的3个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于我们的系统推荐出更棒的Java代码示例。

示例1: getCache

import cc.mallet.fst.Transducer.TransitionIterator; //导入依赖的package包/类
private WeightCache getCache(int position) {
		WeightCache cache = caches[position];
		if (cache == null) {            // No cache for this position
//			System.out.println("cache " + numCaches + "/" + maxCaches);
			if (numCaches < maxCaches)  { // Create another cache
				cache = new WeightCache(position);
				if (numCaches++ == 0)
					first = last = cache;
			}
			else {                        // Steal least used cache
				cache = last;
				caches[cache.position] = null;
				cache.init(position);
			}
			for (int i = 0; i < t.numStates(); i++) {
				if (lattice[position][i] == null || lattice[position][i].delta == Transducer.IMPOSSIBLE_WEIGHT)
					continue;
				State s = t.getState(i);
				TransitionIterator iter =
					s.transitionIterator (input, position, providedOutput, position);
				while (iter.hasNext()) {
					State d = iter.next();
					cache.weight[i][d.getIndex()] = iter.getWeight();
				}
			}        
			caches[position] = cache;
		}
		if (cache != first) {           // Move to front
			if (cache == last)
				last = cache.prev;
			if (cache.prev != null)
				cache.prev.next = cache.next;
			cache.next = first;
			cache.prev = null;
			first.prev = cache;
			first = cache;
		}
		return cache;
	}
 
开发者ID:kostagiolasn,项目名称:NucleosomePatternClassifier,代码行数:40,代码来源:MaxLatticeDefault.java


示例2: incrementTransducer

import cc.mallet.fst.Transducer.TransitionIterator; //导入依赖的package包/类
/** Increment states and transitions with a count of 1.0 along the best state sequence.
 *  This provides for a so-called "Viterbi training" approximation. */
public void incrementTransducer (Transducer.Incrementor incrementor)
{
	// We are only going to increment along the single best path ".get(0)" below.
	// We could consider having a version of this method:
	// incrementTransducer(Transducer.Incrementor incrementor, double[] counts)
	// where the number of n-best paths to increment would be determined by counts.length
	SequencePairAlignment<Object,ViterbiNode> viterbiNodeAlignment = this.bestViterbiNodeSequences(1).get(0);
	int sequenceLength = viterbiNodeAlignment.output().size();
	assert (sequenceLength == viterbiNodeAlignment.input().size()); // Not sure this works for unequal input/output lengths
	// Increment the initial state
	incrementor.incrementInitialState(viterbiNodeAlignment.output().get(0).state, 1.0);
	// Increment the final state
	incrementor.incrementFinalState(viterbiNodeAlignment.output().get(sequenceLength-1).state, 1.0);
	for (int ip = 0; ip < viterbiNodeAlignment.input().size()-1; ip++) {
		TransitionIterator iter =
			viterbiNodeAlignment.output().get(ip).state.transitionIterator (input, ip, providedOutput, ip);
		// xxx This assumes that a transition is completely
		// identified, and made unique by its destination state and
		// output.  This may not be true!
		int numIncrements = 0;
		while (iter.hasNext()) {
			if (iter.next().equals (viterbiNodeAlignment.output().get(ip+1).state)
					&& iter.getOutput().equals (viterbiNodeAlignment.output().get(ip).output)) {
				incrementor.incrementTransition(iter, 1.0);
				numIncrements++;
			}
		}
		if (numIncrements > 1)
			throw new IllegalStateException ("More than one satisfying transition found.");
		if (numIncrements == 0)
			throw new IllegalStateException ("No satisfying transition found.");
	}
}
 
开发者ID:kostagiolasn,项目名称:NucleosomePatternClassifier,代码行数:36,代码来源:MaxLatticeDefault.java


示例3: MaxLatticeDefault

import cc.mallet.fst.Transducer.TransitionIterator; //导入依赖的package包/类
/** Initiate Viterbi decoding of the inputSequence, contrained to match non-null parts of the outputSequence.
 * maxCaches indicates how much state information to memoize in n-best decoding. */
public MaxLatticeDefault (Transducer t, Sequence inputSequence, Sequence outputSequence, int maxCaches) 
{
	// This method initializes the forward path, but does not yet do the backward pass.
	this.t = t;
	if (maxCaches < 1)
		maxCaches = 1;
	this.maxCaches = maxCaches;
	assert (inputSequence != null);
	if (logger.isLoggable (Level.FINE)) {
		logger.fine ("Starting ViterbiLattice");
		logger.fine ("Input: ");
		for (int ip = 0; ip < inputSequence.size(); ip++)
			logger.fine (" " + inputSequence.get(ip));
		logger.fine ("\nOutput: ");
		if (outputSequence == null)
			logger.fine ("null");
		else
			for (int op = 0; op < outputSequence.size(); op++)
				logger.fine (" " + outputSequence.get(op));
		logger.fine ("\n");
	}

	this.input = inputSequence;
	this.providedOutput = outputSequence;
	latticeLength = input.size()+1;
	int numStates = t.numStates();
	lattice = new ViterbiNode[latticeLength][numStates];
	caches = new WeightCache[latticeLength-1];

	// Viterbi Forward
	logger.fine ("Starting Viterbi");
	boolean anyInitialState = false;
	for (int i = 0; i < numStates; i++) {
		double initialWeight = t.getState(i).getInitialWeight();
		if (initialWeight > Transducer.IMPOSSIBLE_WEIGHT) {
			ViterbiNode n = getViterbiNode (0, i);
			n.delta = initialWeight;
			anyInitialState = true;
		}
	}

	if (!anyInitialState) {
		logger.warning ("Viterbi: No initial states!");
	}

	for (int ip = 0; ip < latticeLength-1; ip++)
		for (int i = 0; i < numStates; i++) {
			if (lattice[ip][i] == null || lattice[ip][i].delta == Transducer.IMPOSSIBLE_WEIGHT)
				continue;
			State s = t.getState(i);
			TransitionIterator iter = s.transitionIterator (input, ip, providedOutput, ip);
			if (logger.isLoggable (Level.FINE))
				logger.fine (" Starting Viterbi transition iteration from state "
						+ s.getName() + " on input " + input.get(ip));
			while (iter.hasNext()) {
				State destination = iter.next();
				if (logger.isLoggable (Level.FINE))
					logger.fine ("Viterbi[inputPos="+ip
							+"][source="+s.getName()
							+"][dest="+destination.getName()+"]");
				ViterbiNode destinationNode = getViterbiNode (ip+1, destination.getIndex());
				destinationNode.output = iter.getOutput();
				double weight = lattice[ip][i].delta + iter.getWeight();
				if (ip == latticeLength-2) {
					weight += destination.getFinalWeight();
				}
				if (weight > destinationNode.delta) {
					if (logger.isLoggable (Level.FINE))
						logger.fine ("Viterbi[inputPos="+ip
								+"][source][dest="+destination.getName()
								+"] weight increased to "+weight+" by source="+
								s.getName());
					destinationNode.delta = weight;
					destinationNode.maxWeightPredecessor = lattice[ip][i];
				}
			}
		}
}
 
开发者ID:kostagiolasn,项目名称:NucleosomePatternClassifier,代码行数:81,代码来源:MaxLatticeDefault.java



注:本文中的cc.mallet.fst.Transducer.TransitionIterator类示例整理自Github/MSDocs等源码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
Java Required类代码示例发布时间:2022-05-22
下一篇:
Java SolrDispatchFilter类代码示例发布时间:2022-05-22
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap