首页 > 代码库 > 汉语自动分词

汉语自动分词

调用“海量智能分词”提供的动态链接库,实现汉语自动分词,并且搭建图形界面用于操作和显示。

首先下载“海量智能分词”软件,解压后拷出include文件夹下的HLSegFunc.h、HLPubDef.h和dll&lib文件夹下的HLSSplit.dll、HLSplitWord.dat、HLSSplit.lib。

图形界面使用MFC搭建,新建基于对话框的MFC应用程序,同时要将HLSSplit.lib、HLSegFunc.h、HLPubDef.h拷贝至工程目录下,将HLSSplit.dll、HLSplitWord.dat拷至Debug目录下。

因为下载海量智能分词链接库可能已经过期,故为了正常运行,需要改动一下计算机时间,我们使用的需要将系统时间调制2005年。

搭建界面如下:

技术分享

“分词”按钮的响应函数如下:

void CTest20Dlg::OnBnClickedButton2(){
	CString strText; // 存放要进行分词的字符串
	GetDlgItemText(IDC_EDIT1,strText);

	bool bInitDict = HLSplitInit();
	if(!bInitDict)
	{
	 MessageBox("初始化分词字典失败");
	 return ;
	}
	
	HANDLE hHandle = HLOpenSplit (); //创建分词句柄
	if(hHandle == INVALID_HANDLE_VALUE)
	{//创建分词句柄失败
		MessageBox("创建分词句柄失败");
		HLFreeSplit () ;//卸载分词字典
		return ;
	}
	int iExtraCalcFlag = 0; //附加计算标志,不进行附加计算
	LPCSTR lpText = (LPCSTR)strText ;
	bool bSuccess = HLSplitWord (hHandle, lpText, iExtraCalcFlag);
	CString strResult = "";
	if(bSuccess)
	{//分词成功
		int nResultCnt = HLGetWordCnt (hHandle);//取得分词个数
		for(int i = 0 ; i < nResultCnt ; i++)
		{//取得分词结果
			SHLSegWord* pWord ;//存放分词结果中的一个词
			pWord = HLGetWordAt (hHandle , i) ;//取得一个分词结果
			strResult += pWord->s_szWord;
			strResult +=" "; //以空格分割分词结果中的每个词
		}
		HLCloseSplit (hHandle) ;//关闭分词句柄
	}
	else
	{//分词失败
	 MessageBox("分词失败");
	 HLCloseSplit (hHandle) ;//关闭分词句柄
	 HLFreeSplit () ;//卸载分词字典
	 return ;
	}
	HLFreeSplit () ; //卸载分词词典
	SetDlgItemText(IDC_EDIT2,strResult);
}

“载入文件”按钮响应函数见上篇博客《MFC显示文本文档

效果如下:

技术分享

完整的工程下载:http://download.csdn.net/detail/u010839382/8313415


汉语自动分词