实验一、中文分词
一、实验内容
用正向最大匹配法对文档进行中文分词,其中:
(1) 词表文件
(2) 未经过分词的文档文件
(3while语句怎么用自然语言)pku_ 经过分词的文档文件
二、实验所采用的开发平台及语言工具
Visual C++ 6.0
三、实验的核心思想和算法描述
本实验的核心思想为正向最大匹配法,其算法描述如下
假设句子: , 某一词 ,m 为词典中最长词的字数。
(1) 令 i=0,当前指针 pi 指向输入字串的初始位置,执行下面的操作:
(2) 计算当前指针 pi 到字串末端的字数(即未被切分字串的长度)n,如果n=1,转(4),结束算法。否则,令 m=词典中最长单词的字数,如果n<m, 令 m=n;
(3) 从当前 pi 起取m个汉字作为词 wi,判断:
(a) 如果 wi 确实是词典中的词,则在wi 后添加一个切分标志,转(c);
(b) 如果 wi 不是词典中的词且 wi 的长度大于1,将wi 从右端去掉一个字,转(a)步;否则(wi 的长度等于1),则在wi 后添加一个切分标志,将wi 作为单字词添加到词典中,执行 (c)步;
(c) 根据 wi 的长度修改指针 pi 的位置,如果 pi 指向字串末端,转(4),否则, i=i+1,返回 (2);
(4) 输出切分结果,结束分词程序。
四、系统主要模块流程、源代码
(1) 正向最大匹配算法
(2) 原代码如下
// Dictionary.h
#include <iostream>
#include <string>
#include <fstream>
using namespace std;
class CDictionary
{
public:
CDictionary(); //将词典文件读入并构造为一个哈希词典
~CDictionary();
int FindWord(string w); //在哈希词典中查词
private:
string strtmp; //读取词典的每一行
string word; //保存每个词
string strword[55400];
};
//将词典文件读入并
CDictionary::CDictionary()
{
ifstream infile(""); // 打开词典
if (!infile.is_open()) // 打开词典失败则退出程序
{
cerr << "Unable to open input file: " << ""
<< " -- bailing out!" << endl;
exit(-1);
}
int i=0;
while (getline(infile, strtmp)) // 读入词典的每一行并将其添加入哈 希中
{
strword[i++]=strtmp;
}
infile.close();
}
CDictionary::~CDictionary(){}
//在哈希词典中查词,若到,则返回,否则返回
int CDictionary::FindWord(string w)
{
int i=0;
while ((strword[i]!=w) && (i<55400))
i++;
if(i<55400)
return 1;
else
return 0;
}
// 主程序main.cpp
#include "Dictionary.h"
#define MaxWordLength 14 // 最大词长为个字节(即个汉字)
# define Separator " " // 词界标记
CDictionary WordDic; //初始化一个词典
//对字符串用最大匹配法(正向)处理
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论