- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
自然语言理解实验报告
词频统计与简单中文分词
工程报告
姓 名
学 号
所在学院 计算机与信息学院
专业年级 计算机10-4班
报告提交时间 2013年11月17日
实验一:中文分词
一、研究背景
? 所谓汉语分词,就是将中文语句中的词汇切分出来的过程。由于汉语的书写习惯,汉语语句中词与词之间的标志是隐含的,英文的单词与单词之间有空格,所以不存在分词问题。而中文的每一句中,词与词之问是没有空格的,因而必须采用某种技术将其分开。?
雅虎中文网页搜索技术部总监张勤认为:中文分词是中文搜索技术的基础,只有做好了分词,才能有好的搜索。可见,掌握了优秀的分词技术就可以在中文搜索中占有一席之地。?
分词技术作为自然语言处理的基础环节,同时也是关键环节之一,它的质量好坏直接影响到后续处理步骤的效果。汉语分词工作看似细微,但作为计算机自然语言处理的第一步,它的关键作用是不容忽视的。如今汉语分词己成为自然语言处理的研究热点与难点。?
互联网绝大部分需要分词,其中典型的实例有:?
内容分析。这方面主要包括了机器翻译、广告推荐、内容监控等。?现在的翻译技术,无论是在线的还是单机的,在翻译句子或段落的时候总会让我们不知所措,语法错误明显,词不达意等等。究其根本原因就是因为中文分词技术的滞后和一些多义词汇选义的把握。?
中文分词的其中一个重要功能就是为词语的计量分析,词频的统计提供可靠的依据,比如汉语中最常用的词是哪个。这使我们可以做一些广告推荐(哪些广告被更多次的提起)等。
说明本工程所涉及的研究背景,包括主要涉及领域,主要研究方法,主要存在问题,现有解决方案等等,可以自行补充其他内容
二、模型方法
本工程采用正向最大匹配算法:从左到右将待分词文本中的几个连续字符与词表匹配,如果匹配上,则切分出一个词。
三、系统设计
假设句子:,某一词,m 为词典中最长词的字数。
(1) 令 i=0,当前指针cutbegin指向输入字串的初始位置,执行下面的操作:
(2) 计算当前指针cutbegin到字串末端的字数(即未被切分字串的长度)len,如果n=1,转(4),结束算法。否则,令 m=词典中最长单词的字数,如果lenm, 令 m=n;
(3)从当前cutbegin起取m个汉字作为词 temp,判断:
(a) 如果temp确实是词典中的词,则在temp后添加一个切分标志,转(c);
(b) 如果temp不是词典中的词且temp的长度大于1,将wi 从右端去掉一个字,转(a)步;否则(temp的长度等于1),则在temp后添加一个切分标志,将temp作为单字词添加到词典中,执行 (c)步;
(c) 根据 wi 的长度修改指针cutbegin的位置,如果cutbegin指向字串末端,转(4),否则, i=i+1,返回 (2);
(4) 输出切分结果,结束分词程序。
源程序代码如下:
#includeiostream
#includestring
#includefstream
#includecstdlib
using namespace std;
const int maxlen=8*2; //定义最大词长为8个汉字
void error(const char * p,const char * p2=)
{
std::cerrp p2\n;
exit(-1);
}
int main(int argc,char*argv[])
{
std::ifstream dic(dictionary.txt,ios_base::in);
if(!dic)
error(不能打开dic文件);
std::ifstream from(from.txt,ios_base::in);
if(!from)
error(不能打开from文件);
std::ofstream to(to.txt,ios_base::out);
if(!to)
error(不能打开to文件);
char ch;
string s_dic;
string s_from;
string s1,s2;
while(getline(dic,s1))
{
s_dic+=s1;
s_dic+=\n;
}
while(getline(from,s2))
{
s_from+=s2;
// s_from+=\n;
}
int len=maxlen;
int cutbegin=0;
string temp;
int s_from_length=s_from.length();
//couts_from;
while(cutbegins_from_length)
{
文档评论(0)