⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 segmentation.cpp

📁 此代码运行于visual c++ 6.0的环境下
💻 CPP
字号:
// Segmentation.cpp: implementation of the Segmentation class.
//
//////////////////////////////////////////////////////////////////////
#include "stdafx.h"
#include "Segmentation.h"

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


string Segmentation::Segment (ifstream & fin)
{
	string cResult;//存储分词结果
	char cStr[500];//存储从原文件中读取的字符串
	char cWord[22];//存储从cStr中切取下来的一段字符串,最长定义为10个汉字长
	int nLength = 0;//记录从cStr中切取下来的字符串的长度
	int nTotalLen = 0;//记录从cStr中切取下来的字符串在cStr中的末尾位置

	//读取网页URL
	fin.getline (cStr,sizeof(cStr),'\n');
	cResult = cResult + cStr + "\n";

    //从要切分的文件中读出一个字符串,对该字符串进行切词
	while(!fin.eof ()){//非文件结束
		fin >> cStr; 

		nTotalLen = 0;
		while(1){
			nLength = 0;
			//如果nTotalLen位置存储的不是汉字,则从下一个字母开始
			while(cStr[nTotalLen] > 0)
				nTotalLen ++;
			//从cStr中截取最大长度为10个字的字符串
			for(int i = nTotalLen;cStr[i] != '\0' && (i - nTotalLen) < 20;i ++){
				cWord[i - nTotalLen] = cStr[i];
				nLength ++;
			}
			cWord[nLength] = '\0';
			nTotalLen = nTotalLen + nLength; 
			while(nLength > 2){
				//找到匹配的词则跳出
				if(SearchInHash(cWord))
					break;
	
				//如果没有找到匹配的词,则将该词的最后一个字切去然后进行匹配
				else{
					//词长度减一
					nLength = nLength - 2;
					cWord[nLength] = '\0';
					nTotalLen = nTotalLen - 2;
				}
			}
			//如果词有匹配的或者是单字,则将其接到cResult后面并加上空格
			if(nLength >= 2)
				cResult = cResult + cWord + " \0";
			else break;
		}
	}
	//返回切词结果
	return cResult;
}

string Segmentation::Segment (string & cString)
{
	string cResult;//存储分词结果
	string cStr;//存储从原字符串中切取的字符串
	char cWord[22];//存储从cStr中切取下来的一段字符串,最长定义为10个汉字长
	int nLength = 0;//记录从cStr中切取下来的字符串的长度
	int nTotalLen = 0;//记录从cStr中切取下来的字符串在cStr中的末尾位置

    //从要处理的字符串中切取一段字符串,对该字符串进行切词
	while(cString.size () > 0){
		int nPos;
		nPos = cString.find (" ");
		cStr = cString.substr (0,nPos);
		cStr = cStr + "\0";
		cString = cString.substr (nPos+1,cString.length ());
		if(cStr.length () == 0)
			continue;

		nTotalLen = 0;
		while(1){
			nLength = 0;
			//如果nTotalLen位置存储的不是汉字,则从下一个字母开始
			while(cStr[nTotalLen] > 0)
				nTotalLen ++;
			//从cStr中截取最大长度为10个字的字符串
			for(int i = nTotalLen;cStr[i] != '\0' && (i - nTotalLen) < 20;i ++){
				cWord[i - nTotalLen] = cStr[i];
				nLength ++;
			}
			cWord[nLength] = '\0';
			nTotalLen = nTotalLen + nLength; 
			while(nLength > 2){
				//找到匹配的词则跳出
				if(SearchInHash(cWord))
					break;
	
				//如果没有找到匹配的词,则将该词的最后一个字切去然后进行匹配
				else{
					//词长度减一
					nLength = nLength - 2;
					cWord[nLength] = '\0';
					nTotalLen = nTotalLen - 2;
				}
			}
			//如果词有匹配的或者是单字,则将其接到cResult后面并加上空格
			if(nLength >= 2)
				cResult = cResult + cWord + " \0";
			else break;
		}
	}
	//返回切词结果
	return cResult;
}

void Segmentation::Segment (const string & cStr,CDeque<string> & Deque)
{
	char cWord[22];//存储从cStr中切取下来的一段字符串,最长定义为10个汉字长
	int nLength = 0;//记录从cStr中切取下来的字符串的长度
	int nTotalLen = 0;//记录从cStr中切取下来的字符串在cStr中的末尾位置

	nTotalLen = 0;
	while(1){
		nLength = 0;
		//如果nTotalLen位置存储的不是汉字,则从下一个字母开始
		while(cStr[nTotalLen] > 0)
			nTotalLen ++;
		//从cStr中截取最大长度为10个字的字符串
		for(int i = nTotalLen;cStr[i] != '\0' && (i - nTotalLen) < 20;i ++){
			cWord[i - nTotalLen] = cStr[i];
			nLength ++;
		}
		cWord[nLength] = '\0';
		nTotalLen = nTotalLen + nLength; 
		while(nLength > 2){
			//找到匹配的词则跳出
			if(SearchInHash(cWord))
				break;
	
			//如果没有找到匹配的词,则将该词的最后一个字切去然后进行匹配
			else{
				nLength = nLength - 2;
				cWord[nLength] = '\0';
				nTotalLen = nTotalLen - 2;
			}
		}
		//如果词有匹配的或者是单字,则将其载入队列
		if(nLength >= 2){
			if(nLength > 2)
				Deque.push_back(cWord);
		}
		else break;
	}
}

void Segmentation::BuildHash (ifstream & fin){
	char Word[50];//存储从字典中读出的词
	while(1){
		if(fin.eof ())
			break;
		fin >> Word;
		//插入散列表中
		m_DictWords.Insert (Word); 
	}
}

bool Segmentation::SearchInHash (const char * Word){
	if(m_DictWords.Find (Word))
		return true;
	else return false;
}

⌨️ 快捷键说明

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