自然语言处理实验报告材料.docx

上传人:b****6 文档编号:6047968 上传时间:2023-01-03 格式:DOCX 页数:29 大小:29.90KB
下载 相关 举报
自然语言处理实验报告材料.docx_第1页
第1页 / 共29页
自然语言处理实验报告材料.docx_第2页
第2页 / 共29页
自然语言处理实验报告材料.docx_第3页
第3页 / 共29页
自然语言处理实验报告材料.docx_第4页
第4页 / 共29页
自然语言处理实验报告材料.docx_第5页
第5页 / 共29页
点击查看更多>>
下载资源
资源描述

自然语言处理实验报告材料.docx

《自然语言处理实验报告材料.docx》由会员分享,可在线阅读,更多相关《自然语言处理实验报告材料.docx(29页珍藏版)》请在冰豆网上搜索。

自然语言处理实验报告材料.docx

自然语言处理实验报告材料

"自然语言处理〞实验报告

专业:

智能科学与技术

__1501

__0918150102

某某:

宋晓婷

日期:

2018/4/16

实验1

1、实验目的:

本实验学习如何在利用NLTK进展分词\词性分析与句法分析,.通过次实验项目的练习,增强学生对课堂理论知识的理解,帮助学生以知识获取与自主实践相结合,学习对英文自然语言信息的处理的实践.

2、实验原理和内容:

NLTK自然语言处理工具包,里面包含了许多处理自然语言的库可以直接调用,本实验利用NLTK对obama.txt语料库进展对应的分词和词频统计,再对布朗语料库进展词性和句法分析.

3、实验环境和编程语言:

windows下anaconda3spyder

4、主要功能与实现:

4.1怎样载入自己的英文语料库〔obama.txt〕,在自己的语料库中找出responsibility,education和working出现的频率与其他们词干出现的频率.〔使用nltk的英文分词函数tokenize和stem〕.

①使用open以与read函数读取obama.txt文档,调用nltk里面的word_tokenize<>函数,先把文档进展分词,再调用nltk中的FreDist<>函数进展词频统计.统计responsibility,education和working出现的频率.结果见表一.

②提取词干的时候,NLTK中提供了三种最常用的词干提取器接口,即Porterstemmer,LancasterStemmer和SnowballStemmer.统计词干频率时,先对全文提取词干,然后在提取的词干中统计三者词干出现的频率,结果见表二.

表一原词以与对应词干频率统计

responsibility〔respons〕

education

working

原词出现频率

8

11

2

词干出现频率

9

11

12

〔全文总词数:

3066全文总词干数:

3066〕

表二三种词干提取器提取结果

Porterstemmer

LancasterStemmer

SnowballStemmer

responsibility

respons

respons

respons

education

educ

educ

educ

working

work

work

work

4.2写程序处理布朗语料库,找到以下答案:

4.2.1哪些名词常以他们复数形式而不是它们的单数形式出现?

〔只考虑常规的复数形式,-s后缀形式的〕.

①先查看布朗语料库里面包含的类别〔如图一〕

图一布朗语料库包含类别

②选取其中一个类别的语料库adventure,提取里面的所有NNS标注的复数词放入word_double;提取NN标注而非NNS标注的单数词放入word_single;然后对这两个词表提取词干,比拟两个词干表里面一样的词干,同时去除里面重复出现的词干,然后再在复数词表里面找出这些词.

可得常以复数不以单数出现的词有:

handseyesclothesfoolskidsnightshorsesmountainshillsfenceswingsbuildingsriflesfriendswarsEyesridershopesspringssnakeshousestimeslightsRiderstroubleskeysrocksLooksbootslookscigarettesstreetscountiesauthoritiesmeansdeputiesmurdersHousesSpringssaloonsbarsattackersholesZerospowerselbowsLightsofficersfeelingswatersthroatslifeboatsislandsunclesmothershairsvalleysHillsmanderskillsofficescentersfarmershornsproductstalksmarinesmurderersstorespersons

4.2.2选择布朗语料库的不同局部〔其他目录〕,计数包含wh的词:

此处我查找新闻〔news〕类别里面包含wh的词,结果如图二

图二布朗语料库新闻类别中包含wh的词

wheat:

1wherever:

1whip:

2whipped:

2wholesale:

1whichever:

1

whisking:

1why:

14wheeled:

2wholly-owned:

1whims:

1where:

59

whiplash:

1which:

245whereby:

3white:

57wheels:

1who:

268wheel:

4

whites:

2when:

169whatever:

2whose:

22white-clad:

1while:

55wholly:

1

whether:

18what:

95whopping:

1whole:

11whom:

8whirling:

1whiz:

2

4.3、输出brown文本集名词后面接的词性,结果如图三

图三brown文本集名词后面接的词性

由统计可知:

名词后面出现频率最高的是ADP〔介词和后置词〕第二是标点第三是动词依次是名词、连接词、副词、限定词、PRT、形容词、数量词、代名词、以与其他.

使用nltk的句法分析器parser〔自底向上〕

nltk.app.srparser<>后打开以下窗口,运行step会逐步演示对mydogsawamanintheparkwithastatue这句话进展文法分析.结果见图四、图五

图四parser句法分析器

nltk.app.rdparser<>使用递归下降解析器〔自顶向下〕,进展文法分析文法=词法+句法

图五rdparser递归下降解析器

nltk里面一共有5个对话框系统,我选择1,情绪分析.结果如图六、图七

图六

图七

5、实验结论

掌握了对语料库的根本操作,分词分句、统计词频以与对词性分析.句法分析的自顶向上以与自底向下思路简单但是实现起来比拟麻烦,回溯会出现屡次.实验中掌握了两种不同的句法分析的流程.nltk的对话框经测试后觉得有点根底,分析以与人机对话的可用性不是很强.

实验2中文分词

1、实验目的和内容

a.用最大匹配算法设计分词程序实现对文档分词,并计算该程序分词召回率.

b.可以输入任意句子,显示分词结果.

实验数据:

〔1〕word_freq_list.txt分词词典

〔2〕pku_test.txt未经过分词的文档文件

〔3〕pku_test_gold.txt经过分词的文档文件

2、实验原理

核心思想:

最大匹配算法

算法描述:

正向最大匹配法算法如下所示:

逆向匹配法思想与正向一样,只是从右向左切分,这里举一个例子:

输入例句:

S1="计算语言学课程有意思";

定义:

最大词长MaxLen=5;S2="";分隔符="/〞;

假设存在词表:

…,计算语言学,课程,意思,…;

最大逆向匹配分词算法过程如下:

〔1〕S2="";S1不为空,从S1右边取出候选子串W="课程有意思";

〔2〕查词表,W不在词表中,将W最左边一个字去掉,得到W="程有意思";

〔3〕查词表,W不在词表中,将W最左边一个字去掉,得到W="有意思";

〔4〕查词表,W不在词表中,将W最左边一个字去掉,得到W="意思"

〔5〕查词表,"意思〞在词表中,将W参加到S2中,S2="意思/",并将W从S1中去掉,此时S1="计算语言学课程有";

〔6〕S1不为空,于是从S1左边取出候选子串W="言学课程有";

〔7〕查词表,W不在词表中,将W最左边一个字去掉,得到W="学课程有";

〔8〕查词表,W不在词表中,将W最左边一个字去掉,得到W="课程有";

〔9〕查词表,W不在词表中,将W最左边一个字去掉,得到W="程有";

〔10〕查词表,W不在词表中,将W最左边一个字去掉,得到W="有",这W是单字,将W参加到S2中,S2="/有/意思〞,并将W从S1中去掉,此时S1="计算语言学课程";

〔11〕S1不为空,于是从S1左边取出候选子串W="语言学课程";

〔12〕查词表,W不在词表中,将W最左边一个字去掉,得到W="言学课程";

〔13〕查词表,W不在词表中,将W最左边一个字去掉,得到W="学课程";

〔14〕查词表,W不在词表中,将W最左边一个字去掉,得到W="课程";

〔15〕查词表,"意思〞在词表中,将W参加到S2中,S2="课程/有/意思/〞,并将W从S1中去掉,此时S1="计算语言学";

〔16〕S1不为空,于是从S1左边取出候选子串W="计算语言学";

〔17〕查词表,"计算语言学〞在词表中,将W参加到S2中,S2="计算语言学/课程/有/意思/〞,并将W从S1中去掉,此时S1="";

〔18〕S1为空,输出S2作为分词结果,分词过程完毕.

3、实验平台与语言

windowsanconda3spyder

4、主要功能与实现

图八正向最大匹配算法实验流程图

a、基于上述算法,写代码实现.实现前对词典中的词的最大长度进展计算,可得词典里面词最大词长为4.于是初始化三个空列表来存放词长为2、3、4的词.把原词典里面的词分成三份,这样匹配时可以加快匹配速度.匹配完之后计算召回率〔R〕、准确率〔P〕、F测度,

准确率:

P=系统输出正确词的个数/系统输出词的个数〔词典词的个数〕*100%

召回率:

R=系统输出正确词的个数/金标词典中词的个数〔词典词的个数〕*100%

F-测度:

F=2*P*R/

以下是实现结果,如图九.

图九最大匹配算法性能值

整理成表之后可得表三

表三正向最大匹配算法评价

正向最大匹配算法

准确率〔P〕

82.7830%

召回率〔R〕

88.7967%

F-测度

85.6844%

b、将文本文件改成外部输入,对输入的词自动分词,以下是测试结果:

图十实验2-b测试

5、实验结论

正向最大匹配算法是汉语分词的一个重要算法,思路简单,实验中我将词顺序存储,但是把词长不同的词分开,比拟的时候在对应词长的列表里面进展比拟,这样大大提高了算法的运行效率.对于逆向匹配算法,虽然思路和正向差不多,但是对我而言实践起来比正向要困难.同时我最后分词的准确率不高,对分词歧义并没有进展消除,这可能是导致歧义的原因之一.

实验三中文文本分类

1、小组成员以与分工

宋晓婷、陈曦

分工:

陈曦数据预处理

宋晓婷数据预处理〔去html标签以与分词〕、特征提取以与分类

2、实验目的和内容

对语料库进展数据预处理,利用朴素贝叶斯算法或SVM完成对测试集的文本进展分类.

语料库主要包括健康、财经、教育三个类别,每个类别里面各有6篇文档以与一篇test.txt待测试的文档.

3、实验原理以与数据处理

自然语言处理文本分类的主要步骤如图十一

图十一实验5流程图

预处理局部:

去除文档中的html标签,删除文档中多余的空格和换行.这里没有去除停用词,因为在后续调用sklearn中的算法的时候可以直接利用其中的算法进展停用词去除.

分词:

这里调用的是结某某文分词系统〔importjieba〕.

结构和表示-构建词向量空间:

对于分好词的文档,利用sklearn里面的bunch数据结构,由于给的test.txt测试集没有标签,在后续对算法测评的时候无法测评,于是把每篇文档中的第五篇5.txt分出来作为测试集.用这三篇文档作为测试集来进展算法测评.Bunch化后训练集以与测试集数据如表四、表五所示.

TF-IDF算权重、提取特征:

去除测试集和训练集中的停用词,计算数据集里面的词频,把词频大于50%的去掉,因为这些高频词对分类的特异性没有多大作用,而后根据词频,计算每个词的权重,得到权重矩阵〔tdm〕,,并把这些词统一到同一个词向量空间里面提取特征.分类:

此处是多分类,调用sklearn中的朴素贝叶斯函数中的伯努利模型和多项式模型,以与svm中的SVC算法,用训练集数据进展训练,利用训练好的算法预测类别.

评价:

计算准确率〔P〕,召回率〔R〕,F-测评值

表四Bunch化后训练集数据

target_name

filenames

label

contents

 

财经

财经

重要财务指标财务指标每股收益...

财经

致命的停滞:

谁在监测京石高速?

杜家...

财经

朱宏任:

上半年工业经济运行总体保持平稳...

财经

利率市场化或推升高风险贷款...

财经

*ST炎黄保壳仍无具体措施...

 

健康

健康

中国每天新增加糖尿病患者约...

健康

重酒石酸间羟胺注射液鲜花...

健康

脂肪乳注射液〔C14-24〕[主要...

健康

马来酸麦角新碱注射液...

健康

盐酸可乐定片[须知事项]...

 

教育

教育

《杜拉拉升职记》开播的时候...

教育

中学拟用平板电脑代替纸质教材...

教育

2013考研数学备考指导...

教育

高考后学生纷纷去看心理医生...

教育

2012政法干警行测数学运算指南...

表五bunch化后测试集数据

target_name

filenames

label

contents

财经

财经

中俄专家谈东盟:

三方...

健康

健康

水杨酸软膏[主要成分]水杨酸....

教育

教育

学生课程生活日记显示:

本市...

4、实验平台和语言

windowsanaconda3spyder

5、实验结果

测评

总结

准确率〔P〕

召回率〔R〕

F-测评

效果最好的是朴素贝叶斯中的多项式模型,该模式适合多分类问题.

朴素贝叶斯

多项式〔alpha=0.001〕

94.4%

93.3%

93.3%

伯努利〔alpha=0.001〕

50.0%

66.7%

68.3%

 

线性核〔C=0.1〕

85.2%

73.3%

68.3%

多项式核〔C=0.1〕

93.9%

92.8%

92.9%

6、实验结论

对于中文文本分类,初次动手尝试,拿到数据集之后也是不知道该如何下手.参考网上一篇博客.里面博主对于中文文本分类说的很清楚,让我受益颇多.

对于分本分类采用bunch结构也是一个非常巧妙地结构化表示方法.

四、实验1-3代码

实验一

#-*-coding:

utf-8-*-

"""

CreatedonThuApr509:

39:

092018

author:

sxt

"""

#NatrualLanguage

#experiment_1

fromnltkimport*

importnltk

file=open<'obama.txt'>

raw_file=file.read<>

#读取文件

sens=nltk.sent_tokenize

#将文本拆分成句子列表

words=nltk.word_tokenize

#geteverywordofthetxt,分词

#print<'obama中的总词数:

'>#总词数

#print>

fdist=nltk.FreqDist

sdist=nltk.FreqDist

'''

print<'responsibility出现次数:

'>

print

print<'education出现次数:

'>

print

print<'working出现次数:

'>

print

'''

#提取三个词的词干

fromnltk.stem.lancasterimportLancasterStemmer

lancaster_stemmer=LancasterStemmer<>

#print<'responsibility的词干:

'>

#print>

#print

#print<'education的词干:

'>

#print>

#print<'working的词干:

'>

#print>

'''

fromnltk.stem.porterimportPorterStemmer

porter_stemmer=PorterStemmer<>

print<'responsibility的词干:

'>

print>

print<'education的词干:

'>

print>

print<'working的词干:

'>

print>

fromnltk.stemimportSnowballStemmer

snowball_stemmer=SnowballStemmer<'english'>

print<'responsibility的词干:

'>

print>

print<'education的词干:

'>

print>

print<'working的词干:

'>

print>

'''

'''

#统计词干出现的频率,先对全文提取词干

whole_stems=[lancaster_stemmer.stemfortinwords]#提取全文的词干

print<'全文词干总数:

'>

print>

wdist=nltk.FreqDist

print<'responsibility的词干出现频率:

'>

print

print<'education的词干出现频率:

'>

print

print<'working的词干出现频率:

'>

print

'''

fromnltk.corpusimportbrown

importnltk

importre

'''

#包含wh的词计数

c=brown.categories<>#布朗语料库包含的目录类别

news_text=brown.words#新闻

#romance_text=brown.words#浪漫

ndist=nltk.FreqDist<[w.lower<>forwinnews_text]>

modals=set<[wforwinnews_textifre.search<'^wh',w>]>

forminmodals:

print

',ndist[m]>

'''

#名词后面词性统计

#brown_Irnd_tagged=brown.tagged_words

#tags=[b[1]forinnltk.bigramsifa[1]=='NOUN']

#tags=[b[1]forinnltk.bigramsifa[0]=='often']

#nd=nltk.FreqDist#统计频率

#nd.tabulate<>

#统计常以复数形式出现的词

#wsj=nltk.corpus.treebank.tagged_words

#word_tag_fd=nltk.FreqDist

#fromnltk.corpusimportbrown

fromnltk.stem.porterimportPorterStemmer

porter_stemmer=PorterStemmer<>

#print>#打出布朗语料库里面的类别

brown_news_tagged=brown.tagged_words

#print

word_double=nltk.FreqDistinbrown_news_taggediftag.startswith<'NNS'>>#提取词性标注为复数的词

word_single=nltk.FreqDistinbrown_news_taggediftag.startswith<'N'>andnottag.startswith<'NNS'>>

#word_single=nltk.FreqDistinbrown_news_taggediftag.startswith<'NNS'>>#提取词性标注为复数的词

#word_double=nltk.FreqDistinbrown_news_taggediftag.startswith<'N'>andnottag.startswith<'NNS'>>

#提取词性标注为单数的词

double_keys=list>

single_keys=list

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高等教育 > 文学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1