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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? freqcounter.cpp

?? 漢字字頻統(tǒng)計工具。功能很簡單。
?? CPP
字號:
// FreqCounter.cpp: implementation of the CFreqCounter class.
//
//////////////////////////////////////////////////////////////////////

#include "stdafx.h"
#include "CPT.h"
#include "FreqCounter.h"
#include <math.h>

#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif

//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////

ChChar CFreqCounter::chars[MAXNUMCHINESECHAR];

UINT CFreqCounter::retvalue=CFreqCounter::InitChineseChars();

CFreqCounter::CFreqCounter(UINT nDepth)
{
	m_nSizeArray = 0;
	m_aucArray = NULL;
	m_tucRoot=NULL;
	InitCounterTree(&m_tucRoot, nDepth, 0, MAXNUMCHINESECHAR-1);
}

CFreqCounter::~CFreqCounter()
{
	if (m_tucRoot)
		ReleaseCounterTree(m_tucRoot);
	for (UINT i=0; i<m_nSizeArray; i++)
		if (m_aucArray[i].next)
			delete m_aucArray[i].next;
	if (m_nSizeArray)
		delete m_aucArray;
}

// Construct the lookup table for Chinese Chars
UINT CFreqCounter::InitChineseChars()
{
	unsigned char i, j;
	int k=0;

	for (i=0xb0; i<=0xf7; i++)
		for (j=0xa1; j<=0xfe; j++)
		{
			ASSERT(k<MAXNUMCHINESECHAR);
			chars[k][0]=i;
			chars[k++][1]=j;
		}
	return 0;
}

void CFreqCounter::InitCounterTree(TUCounter ** tucTree, UINT nDepth, int nLeft, int nRight)
{
	TUCounter *p;
	int i=(nLeft+nRight)/2;

	if (nLeft>nRight || nDepth==0)
		return;
	p=new TUCounter;
	*tucTree = p;
	(p->ch)[0]=chars[i][0];
	(p->ch)[1]=chars[i][1];
	p->counter=0;
	p->left=p->right=NULL;
	InitCounterTree(&(p->left), nDepth-1, nLeft, i-1);
	InitCounterTree(&(p->right), nDepth-1, i+1, nRight);
}

void CFreqCounter::ReleaseCounterTree(TUCounter *root)
{
	if (root==NULL)
		return;
	ReleaseCounterTree(root->left);
	ReleaseCounterTree(root->right);
	delete root;
}

void CFreqCounter::AddGram(ChChar first)
{
	TUCounter * p=m_tucRoot;
	TUCounter **q=&m_tucRoot;

	while (p)
	{
		register int i = CompareChineseChar(first, p->ch);
		if (i==0)
		{
			(p->counter)++;
			return;
		}
		else if (i<0)
		{
			q=&(p->left);
			p=p->left;
		}
		else
		{
			q=&(p->right);
			p=p->right;
		}
	}
	p=new TUCounter;
	p->ch[0]=first[0];
	p->ch[1]=first[1];
	p->counter=1;
	p->left=p->right=NULL;
	*q=p;
}

void CFreqCounter::AddGram(ChChar first, ChChar second)
{
	int l=0, r=m_nSizeArray-1, j, k;

	do 
	{
		k=(l+r)/2;
		j=CompareChineseChar(first, m_aucArray[k].ch);
		if (j<0)
			r=k-1;
		else if (j>0)
			l=k+1;
		else
			break;
	}
	while (1);
	// must found
	
	if (CFreqCounter * p=m_aucArray[k].next)
		p->AddGram(second);
}

void CFreqCounter::AddGram(ChChar first, ChChar second, ChChar third)
{
	int l=0, r=m_nSizeArray-1, j, k;

	do 
	{
		k=(l+r)/2;
		j=CompareChineseChar(first, m_aucArray[k].ch);
		if (j<0)
			r=k-1;
		else if (j>0)
			l=k+1;
		else
			break;
	}
	while (1);
	// must found
	
	if (CFreqCounter * p=m_aucArray[k].next)
		p->AddGram(second, third);
}

void CFreqCounter::PostFirstScan()
{
	m_nSizeArray=CountUniqueGrams(m_tucRoot);
	if (m_nSizeArray)
	{
		m_aucArray = new AUCounter[m_nSizeArray];
		UINT i=OutputTreeToArray(0, m_tucRoot);
	}
	ReleaseCounterTree(m_tucRoot);
	m_tucRoot=NULL;
}

void CFreqCounter::InitSecondScan()
{
	for (UINT i=0; i<m_nSizeArray; i++)
		m_aucArray[i].next=new CFreqCounter((UINT)(log((double)m_aucArray[i].counter)/2));
}

void CFreqCounter::PostSecondScan()
{
	for (UINT i=0; i<m_nSizeArray; i++)
		m_aucArray[i].next->PostFirstScan();
}

void CFreqCounter::InitThirdScan()
{
	for (UINT i=0; i<m_nSizeArray; i++)
		m_aucArray[i].next->InitSecondScan();
}

void CFreqCounter::PostThirdScan()
{
	for (UINT i=0; i<m_nSizeArray; i++)
		m_aucArray[i].next->PostSecondScan();
}

UINT CFreqCounter::CountUniqueGrams(TUCounter * tucTree)
{
	if (tucTree == NULL)
		return 0;
	UINT l=CountUniqueGrams(tucTree->left), \
		r=CountUniqueGrams(tucTree->right);

	if (tucTree->counter)
		return l+r+1;
	else return l+r;
}

UINT CFreqCounter::OutputTreeToArray(UINT left, TUCounter * tuc)
{
	if (tuc == NULL)
		return 0;
	UINT i=OutputTreeToArray(left, tuc->left);
	if (tuc->counter)
	{
		m_aucArray[left+i].ch[0]=tuc->ch[0];
		m_aucArray[left+i].ch[1]=tuc->ch[1];
		m_aucArray[left+i].counter=tuc->counter;
		m_aucArray[left+i].next= NULL; 
		i++;
	}
	i += OutputTreeToArray(left+i, tuc->right);
	return i;
}

void CFreqCounter::OutputUnigramFrequency(CFile &fout, const void * buf, size_t len)
{
	AUCounter *p=new AUCounter[m_nSizeArray];

	memmove(p, m_aucArray, m_nSizeArray*sizeof(AUCounter));
	qsort(p, m_nSizeArray, sizeof(AUCounter), AUCounter::CompareCounterUnit);
	for (UINT i=0; i<m_nSizeArray; i++)
	{
		char buf1[50];
		if (buf)
			fout.Write(buf, len);
		fout.Write(&(p[i].ch), sizeof(ChChar));
		sprintf(buf1, " %u\n", p[i].counter);
		fout.Write(buf1, strlen(buf1));
	}
	delete p;
}


void CFreqCounter::OutputBigramFrequency(CFile &fout, const void * buf, size_t len)
{
	char* buf1=new char[len+sizeof(ChChar)];
	if (buf)
		memmove(buf1, buf, len);

	for (UINT i=0; i<m_nSizeArray; i++)
	{
		memmove(buf1+len, &(m_aucArray[i].ch), sizeof(ChChar));
		m_aucArray[i].next->OutputUnigramFrequency(fout, buf1, len+2);
	}
	delete buf1;
}

void CFreqCounter::OutputTrigramFrequency(CFile &fout, const void * buf, size_t len)
{
	char* buf1=new char[len+sizeof(ChChar)];
	if (buf)
		memmove(buf1, buf, len);

	for (UINT i=0; i<m_nSizeArray; i++)
	{
		memmove(buf1+len, &(m_aucArray[i].ch), sizeof(ChChar));
		m_aucArray[i].next->OutputBigramFrequency(fout, buf1, len+2);
	}
	delete buf1;
}

double AUMutual::moffset=0;

void CFreqCounter::OutputAllMutual(CFile &fout)
{
	UINT n=0, i, j, k;
	int l, r, m, ret;
	ChChar cc;

	for (i=0; i<m_nSizeArray; i++)
		n+=m_aucArray[i].next->m_nSizeArray;
	AUMutual *p=new AUMutual[n];
	for (i=0, k=0; i<m_nSizeArray; i++)
		for (j=0; j<m_aucArray[i].next->m_nSizeArray; j++, k++)
		{
			p[k].ch[0][0]=m_aucArray[i].ch[0];
			p[k].ch[0][1]=m_aucArray[i].ch[1];
			p[k].ch[1][0]=m_aucArray[i].next->m_aucArray[j].ch[0];
			p[k].ch[1][1]=m_aucArray[i].next->m_aucArray[j].ch[1];
			cc[0]=p[k].ch[1][0];
			cc[1]=p[k].ch[1][1];
			p[k].c[0]=m_aucArray[i].counter;
			p[k].counter=m_aucArray[i].next->m_aucArray[j].counter;
			l=0; r=m_nSizeArray-1;
			do 
			{
				m=(l+r)/2;
				ret = CompareChineseChar(cc, m_aucArray[m].ch);
				if (ret < 0)
					r = m-1;
				else if (ret > 0)
					l = m+1;
				else 
					break;
			}
			while (1);
			// must found
			p[k].c[1]=m_aucArray[m].counter;
			p[k].CalculateMutual();
		}
		qsort(p, n, sizeof(AUMutual), AUMutual::CompareMutual);
		for (i=0; i<n; i++)
		{
			char buf[100];
			fout.Write(p[i].ch, 2*sizeof(ChChar));
			sprintf(buf, " %u %u %u %g\n", p[i].c[0], \
				p[i].c[1], p[i].counter, p[i].mutual);
			fout.Write(buf, strlen(buf));
		}
		delete p;
}

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
视频一区二区三区入口| 国产日韩精品一区二区三区在线| 尤物av一区二区| 色老头久久综合| 国产不卡高清在线观看视频| 久久一区二区三区国产精品| 国产成人自拍网| 亚洲视频在线观看一区| 欧美视频一二三区| 精品在线一区二区三区| 国产欧美日韩在线视频| 91美女在线看| 美女尤物国产一区| 国产精品欧美极品| 欧美在线free| 国产最新精品免费| 一区二区中文视频| 91精品综合久久久久久| 国产白丝网站精品污在线入口| 综合久久综合久久| 日韩一二在线观看| 成人国产电影网| 日韩中文字幕区一区有砖一区 | 视频一区在线播放| 精品国产百合女同互慰| 99视频一区二区| 美女视频黄频大全不卡视频在线播放| 国产无遮挡一区二区三区毛片日本| 97久久超碰国产精品电影| 亚洲一区二区三区四区的| 欧美成人乱码一区二区三区| 99久久精品免费精品国产| 天天综合天天综合色| 国产视频一区在线观看| 欧美日韩国产大片| 97精品国产97久久久久久久久久久久| 日本不卡一区二区三区| 国产精品第一页第二页第三页| 欧美人狂配大交3d怪物一区| 成人免费毛片aaaaa**| 久久精品久久综合| 亚洲乱码日产精品bd| 国产亚洲一区二区在线观看| 91麻豆精品国产91久久久更新时间 | 中文字幕第一区综合| 91.com视频| 色婷婷综合中文久久一本| 国产精品一区一区| 日本中文字幕一区| 一区二区三区在线播放| 欧美韩国日本不卡| 欧美成人国产一区二区| 在线播放亚洲一区| 日本高清不卡视频| 99视频超级精品| 国产精品456| 国内精品写真在线观看| 人禽交欧美网站| 婷婷久久综合九色国产成人| 一区二区三区不卡在线观看| 中文字幕一区免费在线观看| 国产三级精品视频| 久久婷婷国产综合国色天香| 日韩一二三四区| 日韩一级二级三级| 日韩免费高清电影| 欧美tk—视频vk| 欧美精品一区二区不卡| 欧美精品一区二| 国产亚洲综合在线| 中文字幕久久午夜不卡| 久久精品免视看| 国产精品视频免费看| 欧美国产日韩在线观看| 国产精品国产精品国产专区不片| 国产亚洲va综合人人澡精品| 国产欧美在线观看一区| 久久久久国产精品人| 久久婷婷成人综合色| 久久久99精品免费观看| 国产精品免费视频一区| 国产精品色眯眯| 自拍偷拍亚洲欧美日韩| 一区二区三区免费看视频| 亚洲高清久久久| 蜜臀va亚洲va欧美va天堂| 国产综合久久久久久鬼色 | 风流少妇一区二区| 成人网在线播放| 色噜噜久久综合| 精品视频123区在线观看| 欧美一区二区大片| 精品国产一区二区三区不卡| 国产日韩欧美精品在线| 亚洲天堂2014| 午夜精品国产更新| 精品一区二区三区在线播放视频| 国产一区免费电影| 91麻豆福利精品推荐| 欧美精品久久久久久久多人混战 | 欧美剧在线免费观看网站| 制服丝袜亚洲色图| 国产亚洲欧美日韩日本| 亚洲日本在线观看| 天堂影院一区二区| 顶级嫩模精品视频在线看| 色久优优欧美色久优优| 欧美一二区视频| 中文字幕在线观看不卡视频| 五月天视频一区| 国产精品一区专区| 欧美日韩成人在线一区| 国产三级久久久| 婷婷开心激情综合| 成人一级片在线观看| 欧美日韩国产片| 国产欧美日韩在线看| 婷婷激情综合网| 成人午夜激情片| 欧美一区二区三区日韩视频| 中文av一区二区| 免费在线观看日韩欧美| 91在线精品一区二区| 欧美一区午夜视频在线观看| 中文字幕亚洲区| 九九久久精品视频| 色天天综合色天天久久| 久久一区二区视频| 日韩中文字幕区一区有砖一区| www.亚洲色图| 久久精品一区二区三区av| 亚洲成人自拍网| 92精品国产成人观看免费| 久久夜色精品国产噜噜av| 亚洲一区二区美女| 成人黄动漫网站免费app| 欧美一区二区三区色| 亚洲在线视频一区| 91在线观看高清| 国产亚洲欧美日韩日本| 久久国产福利国产秒拍| 在线不卡一区二区| 亚洲成a人在线观看| 99久久99精品久久久久久 | 91色在线porny| 国产欧美精品一区二区色综合| 蜜臀av性久久久久av蜜臀妖精| 91国在线观看| 亚洲欧美日韩成人高清在线一区| 国产激情偷乱视频一区二区三区| 欧美一级夜夜爽| 亚洲成av人片| 欧美日韩国产电影| 亚洲www啪成人一区二区麻豆| 色综合网色综合| 最新久久zyz资源站| 成人黄色综合网站| 国产日产精品一区| 国产高清精品网站| 久久欧美一区二区| 国产麻豆午夜三级精品| 日韩欧美视频在线| 六月丁香婷婷色狠狠久久| 91精品国产美女浴室洗澡无遮挡| 亚洲电影一级黄| 在线播放/欧美激情| 日韩精品五月天| 欧美一级国产精品| 精品一区二区三区香蕉蜜桃 | 福利一区福利二区| 国产三区在线成人av| 国产成人aaa| 国产精品毛片大码女人| kk眼镜猥琐国模调教系列一区二区| 国产欧美一区二区三区网站 | 在线视频观看一区| 亚洲一区二区三区中文字幕| 欧美日韩一区二区在线观看视频| 亚洲成人动漫av| 日韩欧美一区二区免费| 国产一区二区视频在线| 中文字幕欧美国产| 在线视频观看一区| 亚洲一区在线视频观看| 91精品在线观看入口| 久久97超碰国产精品超碰| 2017欧美狠狠色| 不卡的av中国片| 亚洲五码中文字幕| 欧美大片在线观看一区二区| 国产精品一区二区在线观看不卡 | 国产成人午夜高潮毛片| 专区另类欧美日韩| 色系网站成人免费| 免费美女久久99| 国产精品蜜臀在线观看| 欧美日韩一级片在线观看| 国产在线精品免费| 中文字幕亚洲欧美在线不卡| 在线播放91灌醉迷j高跟美女 |