实验一、中文分词
一、实验内容
用正向最大匹配法对文档进行中文分词,其中
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小时内删除。