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

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

?? span.java

?? 基于java語言的分詞系統
?? JAVA
?? 第 1 頁 / 共 2 頁
字號:
package org.ictclas4j.bean;

import java.util.ArrayList;

import org.ictclas4j.utility.Utility;
import org.ictclas4j.utility.Utility.TAG_TYPE;


public class Span {

	public ContextStat context;

	TAG_TYPE tagType;

	private int[][] m_nTags;

	int[][] m_nBestPrev;

	int m_nStartPos;

	int[] m_nBestTag;

	int m_nCurLength;

	String[] m_sWords;

	double[][] m_dFrequency;

	public int[][] m_nUnknownWords;

	public int m_nUnknownIndex;

	public int[] m_nWordPosition;

	public double[] m_dWordsPossibility;

	public Span() {
		m_nTags = new int[Utility.MAX_WORDS_PER_SENTENCE][Utility.MAX_POS_PER_WORD];
		if (tagType != Utility.TAG_TYPE.TT_NORMAL)
			m_nTags[0][0] = 100;// Begin tag
		else
			m_nTags[0][0] = 0;// Begin tag
		m_nTags[0][1] = -1;
		m_nBestPrev = new int[Utility.MAX_WORDS_PER_SENTENCE][Utility.MAX_POS_PER_WORD];
		m_nBestTag = new int[Utility.MAX_WORDS_PER_SENTENCE];
		m_sWords = new String[Utility.MAX_WORDS_PER_SENTENCE];
		m_nUnknownWords = new int[Utility.MAX_UNKNOWN_PER_SENTENCE][2];
		m_nWordPosition = new int[Utility.MAX_WORDS_PER_SENTENCE];
		m_dWordsPossibility = new double[Utility.MAX_UNKNOWN_PER_SENTENCE];
		m_dFrequency = new double[Utility.MAX_WORDS_PER_SENTENCE][Utility.MAX_POS_PER_WORD];

		tagType = Utility.TAG_TYPE.TT_NORMAL;
	}

	public boolean loadContext(String fileName) {
		if (fileName != null) {
			context = new ContextStat();
			return context.load(fileName);
		}
		return false;
	}

	public void setType(TAG_TYPE type) {
		tagType = type;
	}

	public boolean posTagging(ArrayList<WordResult> wrList, Dictionary coreDict, Dictionary unknownDict) {
		int i = 0;
		int j, nStartPos;
		reset(false);
		while (i > -1 && i < wrList.size()) {
			nStartPos = i;// Start Position
			i = getFrom(wrList, nStartPos, coreDict, unknownDict);
			getBestPOS();
			switch (tagType) {
			case TT_NORMAL:// normal POS tagging
				j = 1;
				// Store the best POS tagging
				while (m_nBestTag[j] != -1 && j < m_nCurLength) {
					WordResult wr = wrList.get(j + nStartPos - 1);
					wr.setHandle(m_nBestTag[j]);
					// Let 。be 0
					// Exist and update its frequncy as a POS value
					if (wr.getValue() > 0 && coreDict.isExist(wr.getWord(), -1))
						wr.setValue(coreDict.getFreq(wr.getWord(), m_nBestTag[j]));
					j += 1;
				}
				break;
			case TT_PERSON:// Person recognition
				PersonRecognize(unknownDict);
				break;
			case TT_PLACE:// Place name recognition
			case TT_TRANS_PERSON:// Transliteration Person
				PlaceRecognize(coreDict, unknownDict);
				break;
			default:
				break;
			}
			reset();
		}
		return true;
	}

	public boolean reset(boolean isContinue) {
		if (!isContinue) {
			if (tagType != Utility.TAG_TYPE.TT_NORMAL)
				m_nTags[0][0] = 100;// Begin tag
			else
				m_nTags[0][0] = 0;// Begin tag
			m_nUnknownIndex = 0;
			m_dFrequency[0][0] = 0;
			m_nStartPos = 0;
		} else {
			// Get the last POS in the last sentence
			m_nTags[0][0] = m_nTags[m_nCurLength - 1][0];
			m_dFrequency[0][0] = m_dFrequency[m_nCurLength - 1][0];
		}

		// Get the last POS in the last sentence,set the -1 as end flag
		m_nTags[0][1] = -1;
		m_nCurLength = 1;
		m_nWordPosition[1] = m_nStartPos;
		m_sWords[0] = null;
		return true;
	}

	public boolean reset() {
		return reset(true);
	}

	private boolean disamb() {
		int i, j, k, nMinCandidate;
		double dMinFee = 0;
		double dTmp = 0;

		for (i = 1; i < m_nCurLength; i++)// For every word
		{
			for (j = 0; m_nTags[i][j] >= 0; j++)// For every word
			{
				nMinCandidate = Utility.MAX_POS_PER_WORD + 1;
				for (k = 0; m_nTags[i - 1][k] >= 0; k++) {
					// ConvertPOS(m_nTags[i-1][k],&nKey,&nPrevPOS);
					// ConvertPOS(m_nTags[i][j],&nKey,&nCurPOS);
					// dTmp=m_context.GetContextPossibility(nKey,nPrevPOS,nCurPOS);
					dTmp = -Math.log(context.getPossibility(0, m_nTags[i - 1][k], m_nTags[i][j]));
					dTmp += m_dFrequency[i - 1][k];// Add the fees
					if (nMinCandidate > 10 || dTmp < dMinFee)// Get the
					// minimum fee
					{
						nMinCandidate = k;
						dMinFee = dTmp;
					}
				}
				m_nBestPrev[i][j] = nMinCandidate;// The best previous for j
				m_dFrequency[i][j] = m_dFrequency[i][j] + dMinFee;
			}
		}

		return true;
	}

	public boolean getBestPOS() {
		disamb();
		for (int i = m_nCurLength - 1, j = 0; i > 0; i--)// ,j>=0
		{
			if (m_sWords[i] != null) {// Not virtual ending
				m_nBestTag[i] = m_nTags[i][j];// Record the best POS and its
				// possibility
			}
			j = m_nBestPrev[i][j];
		}
		int nEnd = m_nCurLength;// Set the end of POS tagging
		if (m_sWords[m_nCurLength - 1] == null)
			nEnd = m_nCurLength - 1;
		m_nBestTag[nEnd] = -1;
		return true;
	}

	/**
	 * 取得沒有在dictUnknown中出現過的詞的下一個位置
	 * @param wrList
	 * @param index
	 * @param coreDict
	 * @param unknownDict
	 * @return
	 */
	public int getFrom(ArrayList<WordResult> wrList, int index, Dictionary coreDict, Dictionary unknownDict) {

		int[] aPOS = new int[Utility.MAX_POS_PER_WORD];
		int[] aFreq = new int[Utility.MAX_POS_PER_WORD];
		int nFreq = 0, j, nRetPos = 0, nWordsIndex = 0;
		boolean bSplit = false;// Need to split in Transliteration recognition
		int i = 1, nPOSCount;
		String sCurWord;// Current word
		nWordsIndex = index ;

		for (; i < Utility.MAX_WORDS_PER_SENTENCE && nWordsIndex < wrList.size(); i++) {
			WordResult wr = wrList.get(nWordsIndex);
			String word = wr.getWord();
			if (tagType == Utility.TAG_TYPE.TT_NORMAL || !unknownDict.isExist(word, 44)) {
				// current word
				m_sWords[i] = word;// store
				m_nWordPosition[i + 1] = m_nWordPosition[i] + m_sWords[i].getBytes().length;
			}  
			
			// Record the position of current word
			m_nStartPos = m_nWordPosition[i + 1];
			// Move the Start POS to the ending
			if (tagType != Utility.TAG_TYPE.TT_NORMAL) {
				// Get the POSs from the unknown recognition dictionary
				sCurWord = m_sWords[i];
				if (tagType == Utility.TAG_TYPE.TT_TRANS_PERSON && i > 0
						&& Utility.charType(m_sWords[i - 1]) == Utility.CT_CHINESE) {
					if (".".equals(m_sWords[i]))
						sCurWord = ".";
					else if ("-".equals(m_sWords))
						sCurWord = "-";
				}
				ArrayList<WordItem> wis = unknownDict.getHandle(sCurWord);
				nPOSCount = wis.size() + 1;
				for (j = 0; j < wis.size(); j++) {
					aPOS[j] = wis.get(j).getHandle();
					aFreq[j] = wis.get(j).getFreq();
					m_nTags[i][j] = aPOS[j];
					m_dFrequency[i][j] = -Math.log((1 + aFreq[j]));
					m_dFrequency[i][j] += Math.log((context.getFreq(0, aPOS[j]) + nPOSCount));
				}

				if ("始##始".equals(m_sWords[i])) {
					m_nTags[i][j] = 100;
					m_dFrequency[i][j] = 0;
					j++;
				} else if ("末##末".equals(m_sWords[i])) {
					m_nTags[i][j] = 101;
					m_dFrequency[i][j] = 0;
					j++;
				} else {
					wis = coreDict.getHandle(m_sWords[i]);
					nFreq = 0;
					for (int k = 0; k < wis.size(); k++) {
						aFreq[k] = wis.get(k).getFreq();
						nFreq += aFreq[k];
					}
					if (wis.size() > 0) {
						m_nTags[i][j] = 0;
						m_dFrequency[i][j] = -Math.log((double) (1 + nFreq));
						m_dFrequency[i][j] += Math.log((double) (context.getFreq(0, 0) + nPOSCount));
						j++;
					}
				}
			} else// For normal POS tagging
			{
				j = 0;
				// Get the POSs from the unknown recognition dictionary
				if (wr.getHandle() > 0) {// The word has is only one POS
					// value
					// We have record its POS and nFrequncy in the items.
					m_nTags[i][j] = wr.getHandle();
					m_dFrequency[i][j] = -Math.log(wr.getValue())
							+ Math.log((double) (context.getFreq(0, m_nTags[i][j]) + 1));

					// Not permit the value less than 0
					if (m_dFrequency[i][j] < 0)
						m_dFrequency[i][j] = 0;
					j++;
				}

				// The word has multiple POSs, we should retrieve the
				// information from Core Dictionary
				else {
					if (wr.getHandle() < 0) {// The word has is only one POS
						m_nTags[i][j] = -wr.getHandle();
						m_dFrequency[i][j++] = wr.getValue();

					}
					ArrayList<WordItem> wis = coreDict.getHandle(m_sWords[i]);
					nPOSCount = wis.size();
					for (; j < wis.size(); j++) {
						// in the unknown dictionary
						aPOS[j] = wis.get(j).getHandle();
						aFreq[j] = wis.get(j).getFreq();
						m_nTags[i][j] = aPOS[j];
						m_dFrequency[i][j] = -Math.log(1 + aFreq[j])
								+ Math.log(context.getFreq(0, m_nTags[i][j]) + nPOSCount);
					}
				}
			}

			// We donot know the POS, so we have to guess them according lexical
			// knowledge
			if (j == 0) {
				j = guessPOS(i);// Guess the POS of current word
			}
			m_nTags[i][j] = -1;// Set the ending POS

			// No ambuguity, so we can break from the loop
			if (j == 1 && m_nTags[i][j] != Utility.CT_SENTENCE_BEGIN) {
				i++;
				m_sWords[i] = null;
				break;
			}
			if (!bSplit)
				nWordsIndex++;
		}
		if (nWordsIndex == wrList.size())
			nRetPos = -1;// Reaching ending

		if (m_nTags[i - 1][1] != -1)// ||m_sWords[i][0]==0
		{// Set end for words like "張/華/平"
			if (tagType != Utility.TAG_TYPE.TT_NORMAL)
				m_nTags[i][0] = 101;
			else
				m_nTags[i][0] = 1;

			m_dFrequency[i][0] = 0;
			m_sWords[i] = null;// Set virtual ending
			m_nTags[i++][1] = -1;
		}
		m_nCurLength = i;// The current word count
		if (nRetPos != -1)
			return nWordsIndex + 1;// Next start position
		return -1;// Reaching ending

	}

	/**
	 * <pre>
	 *          
	 *          BBCD 343 0.003606 
	 *          BBC 2 0.000021 

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日韩精品电影一区亚洲| 91美女片黄在线| 五月天国产精品| 亚洲一区中文日韩| 一区二区三国产精华液| 亚洲精品欧美专区| 亚洲影视在线播放| 午夜精品久久久久久久99水蜜桃| 亚洲va韩国va欧美va| 婷婷综合久久一区二区三区| 日日骚欧美日韩| 日韩和欧美一区二区| 美女视频黄a大片欧美| 另类专区欧美蜜桃臀第一页| 极品少妇一区二区三区精品视频| 精品一区二区三区香蕉蜜桃| 国产精品资源站在线| 成人av网站在线| 在线观看一区不卡| 日韩精品最新网址| 亚洲不卡av一区二区三区| 亚洲欧美日韩国产综合在线 | 亚洲成人高清在线| 777午夜精品视频在线播放| 欧美日韩中文字幕一区| 91色九色蝌蚪| 欧美精品日韩综合在线| 久久女同性恋中文字幕| 国产精品福利电影一区二区三区四区 | 国产制服丝袜一区| 波多野洁衣一区| 欧美日韩专区在线| 精品日韩一区二区三区免费视频| 国产亚洲综合在线| 一区二区三区中文在线观看| 五月天一区二区三区| 经典三级视频一区| 91在线观看地址| 日韩一区二区三区电影| 欧美国产亚洲另类动漫| 亚洲成av人片| 国产成人午夜片在线观看高清观看| 欧美tk—视频vk| 亚洲欧洲国产日本综合| 婷婷开心激情综合| 国产久卡久卡久卡久卡视频精品| 91精彩视频在线观看| 欧美精品一级二级| 日韩一区二区三区视频| 国产精品视频一二三| 天天免费综合色| 9i在线看片成人免费| av在线综合网| 国产精品一品视频| 日韩精品一区二区在线| 欧美亚洲国产怡红院影院| 欧美一级精品大片| 国产精品的网站| 日日夜夜免费精品| 97se狠狠狠综合亚洲狠狠| 欧美丰满嫩嫩电影| 国产精品成人免费| 奇米影视7777精品一区二区| 色综合久久天天综合网| 久久久国产一区二区三区四区小说| 亚洲一区二区精品久久av| 国产一区二区三区蝌蚪| 色婷婷av一区二区三区软件| 26uuu另类欧美| 午夜私人影院久久久久| 972aa.com艺术欧美| 久久色在线观看| 天堂精品中文字幕在线| 91麻豆精品一区二区三区| www国产亚洲精品久久麻豆| 亚洲高清免费在线| 91美女在线观看| 国产午夜精品在线观看| 九九精品视频在线看| 欧美日韩激情在线| 亚洲精品视频一区二区| 不卡在线观看av| 国产日韩欧美精品一区| 精品一区二区三区蜜桃| 欧美精品乱人伦久久久久久| 亚洲综合另类小说| www.一区二区| 国产欧美va欧美不卡在线| 韩国视频一区二区| 欧美一级一级性生活免费录像| 夜色激情一区二区| 92国产精品观看| 中文一区在线播放| 国产成人亚洲综合色影视| 精品欧美乱码久久久久久1区2区| 天天影视网天天综合色在线播放| 在线一区二区三区四区五区| 亚洲欧美在线另类| eeuss影院一区二区三区| 国产日韩精品视频一区| 国产成人精品午夜视频免费| 久久精品夜色噜噜亚洲a∨| 午夜久久电影网| 欧美三级韩国三级日本一级| 亚洲男同1069视频| 国产精品丝袜在线| 精品美女一区二区三区| 99国产欧美另类久久久精品| 在线不卡一区二区| 国产欧美日韩综合精品一区二区| 肉丝袜脚交视频一区二区| 亚洲综合丝袜美腿| 国产精品污污网站在线观看| 欧美巨大另类极品videosbest | 久久久无码精品亚洲日韩按摩| 欧美午夜一区二区| 欧洲亚洲精品在线| 色综合视频在线观看| 成人国产精品免费| 九九九精品视频| 国产精品18久久久久久久久久久久| 亚洲bt欧美bt精品| 一区二区三区**美女毛片| 亚洲最大成人网4388xx| 亚洲精品美腿丝袜| 亚洲电影中文字幕在线观看| 亚洲综合免费观看高清完整版| 一区二区欧美精品| 日韩国产在线观看一区| 久久爱另类一区二区小说| 亚洲国产美女搞黄色| 日本成人在线一区| 成人一区二区视频| 极品尤物av久久免费看| 丝袜脚交一区二区| 免费在线视频一区| 成人免费毛片片v| 日本高清不卡视频| 欧美一级片在线| 亚洲欧美在线观看| 日韩一区精品视频| 91在线观看成人| 精品剧情在线观看| 亚洲综合免费观看高清完整版| 毛片一区二区三区| 亚洲国产成人tv| 亚洲国产欧美在线| 丰满亚洲少妇av| 欧美日韩色综合| 亚洲国产成人在线| 麻豆精品一区二区av白丝在线| 91猫先生在线| 久久午夜国产精品| 一区二区三区久久| 成人爱爱电影网址| 久久综合资源网| 无吗不卡中文字幕| 国产日韩欧美a| 男人的j进女人的j一区| 欧美午夜精品一区二区三区 | 6080国产精品一区二区| 在线免费av一区| 欧美国产一区视频在线观看| 日韩精品国产欧美| 91欧美一区二区| 欧美日免费三级在线| 日本乱码高清不卡字幕| 日本一区二区三区四区| 欧美aaaaa成人免费观看视频| 国产毛片精品视频| 日韩视频中午一区| 日韩在线一二三区| 欧美午夜免费电影| 日本在线播放一区二区三区| 成人av动漫网站| 久久久综合九色合综国产精品| 午夜伦理一区二区| 欧美日韩国产综合一区二区三区| 日本一区二区不卡视频| 亚洲美女视频一区| 不卡欧美aaaaa| 亚洲综合在线五月| 91色porny蝌蚪| 亚洲第一狼人社区| 欧美一区二区三区影视| 日韩高清一级片| 欧美一级二级在线观看| 国产精品一区二区你懂的| 久久精品欧美一区二区三区不卡| 国产精品一品二品| 亚洲欧洲制服丝袜| 3atv在线一区二区三区| 亚洲欧洲日韩一区二区三区| 亚洲精品国产无天堂网2021| 99在线热播精品免费| 亚洲国产精品久久久男人的天堂| 4438x成人网最大色成网站| 蜜乳av一区二区| 中文字幕五月欧美| 欧美伊人久久大香线蕉综合69|