freqcounter.h

来自「汉字字频统计工具。功能很简单。」· C头文件 代码 · 共 96 行

H
96
字号
// FreqCounter.h: interface for the CFreqCounter class.
//
//////////////////////////////////////////////////////////////////////

#if !defined(AFX_FREQCOUNTER_H__7FD0386C_7781_4758_9372_445ACEBBC476__INCLUDED_)
#define AFX_FREQCOUNTER_H__7FD0386C_7781_4758_9372_445ACEBBC476__INCLUDED_

#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000

#include "SentSeg.h"
#include <math.h>

class CFreqCounter;

// Array unit for counter
struct AUCounter
{
	ChChar ch;
	UINT counter;
	CFreqCounter * next;
public:
	static int CompareCounterUnit(const void * auc1, const void * auc2)
	{ return (((AUCounter *)auc2)->counter - ((AUCounter *)auc1)->counter); };
};

// Tree unit for counter
struct TUCounter
{
	ChChar ch;
	UINT counter;
	TUCounter * left;
	TUCounter * right;
};

// Array Unit for mutual info
struct AUMutual
{
	ChChar ch[2];
	UINT c[2];
	UINT counter;
	double mutual;
	static double moffset;
public:
	static int CompareMutual(const void * aum1, const void * aum2)
	{
		double d=((AUMutual *)aum1)->mutual - ((AUMutual *)aum2)->mutual;
		if (d>0)
			return 1;
		else if (d<0)
			return -1;
		else
			return 0;
	};
	static void SetOffsetForMutual(double offset){ moffset=offset;};
	void CalculateMutual()
	{
		mutual=log((double)(c[0]*c[1]/counter))+moffset;
	};
};


class CFreqCounter  
{
public:
	void OutputAllMutual(CFile&);
	void InitThirdScan();
	void InitSecondScan();
	void OutputTrigramFrequency(CFile &, const void *, size_t);
	void OutputBigramFrequency(CFile &, const void *, size_t);
	void OutputUnigramFrequency(CFile &, const void *, size_t);
	void PostThirdScan();
	void PostSecondScan();
	void PostFirstScan();
	void AddGram(ChChar, ChChar, ChChar);
	void AddGram(ChChar, ChChar);
	void AddGram(ChChar);
	CFreqCounter(UINT);
	virtual ~CFreqCounter();
	static ChChar chars[MAXNUMCHINESECHAR];

private:
	UINT OutputTreeToArray(UINT, TUCounter *);
	UINT CountUniqueGrams(TUCounter *);
	UINT m_nSizeArray;
	void ReleaseCounterTree(TUCounter *);
	void InitCounterTree(TUCounter **, UINT, int, int);
	static UINT InitChineseChars();
	AUCounter * m_aucArray;
	TUCounter * m_tucRoot;
	static UINT retvalue;
};

#endif // !defined(AFX_FREQCOUNTER_H__7FD0386C_7781_4758_9372_445ACEBBC476__INCLUDED_)

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?