目录

实验目的:

实验要求:

参考代码:

实验结果:


实验目的:

加深对汉语文本信息处理基础理论及方法的认识和了解,锻炼和提高分析问题、解决问题的能力。通过对具体项目的任务分析、数据准备、算法设计和编码实现以及测试评价几个环节的练习,基本掌握实现一个自然语言处理系统的基本过程。

实验要求:

1.基于第一次实验得到的词表,编写一个正向最大匹配分词程序。

2.编写一个评价程序,自动计算分词结果的准确率、召回率、F测度。

3.使用结巴、ICTCLAS分词系统、哈工大的LTP平台等分词功能,对人民日报语分词,然后对比自己的分词结果

参考代码:

print("任务1——分词系统:")
s1=input("请输入文本:")        #小刚刚刚刚来过
s=""
Maxlen=5
if s1=="":#空print(s)
else:with open("词表.txt",'r',encoding='utf-8') as f2:s3=f2.read().strip('\n')while len(s1)!=0:w=s1[:Maxlen]while w not in s3:if len(w)>1:#不在词表里,则去掉最后一个字w = w[:-1]else:breaks = s + w + '/'s1 = s1[len(w):]print(s)
s1=input("请输入文本:")        #小刚刚刚刚来过
s=""
Maxlen=5
if s1=="":#空print(s)
else:with open("词表.txt",'r',encoding='utf-8') as f2:s3=f2.read().strip('\n')while len(s1)!=0:w=s1[:Maxlen]while w not in s3:if len(w)>1:#不在词表里,则去掉最后一个字w = w[:-1]else:breaks = s + w + '/'s1 = s1[len(w):]print(s)print("***************************************")
print("任务2——评价系统:")
#给每个字编号并分割
def sign(str):l=[]n=0 #n标记当前字的编号,从第0个开始for w in str.split("/"):if w!="":x=n+len(w)l.append((n,x-1))n=xreturn set(l)#返回集合,便于按位与
# s1="山西/大学/的/学生/毕业/后/留/在/了/山西大学/"  #正确输出情况
# s2="山西大学/的/学生/毕业/后/留/在/了/山西/大学/" #系统实际输出
s1=s
s2=input("请输入正确输出:")
N1=s1.count("/")      #测试集中的总词数4
N2=s2.count("/")      #系统输出的总词数5
N3=len(sign(s1)&sign(s2))            #系统输出正确的词数3
def estimate(N1,N2,N3):R=N3/N1P=N3/N2F=2*P*R/(P+R)print("召回率为",R,"\n精确率为",P,"\nF测度为",F)
estimate(N1,N2,N3)
print("任务1——分词系统:")
s1=input("请输入文本:")        #小刚刚刚刚来过
s=""
Maxlen=5
if s1=="":print(s)
else:with open("词表.txt",'r',encoding='utf-8') as f2:s3=f2.read().strip('\n')# if s3.__contains__("\n"):#     print(True)while len(s1)!=0:w=s1[:Maxlen]while w not in s3:if len(w)>1:w = w[:-1]else:break# if w in s3 or len(w)==1:s = s + w + '/'s1 = s1[len(w):]print(s)print("***************************************")
print("任务2——评价系统:")
#给每个字编号并分割
def sign(str):l=[]n=0 #n标记当前字的编号,从第0个开始for w in str.split("/"):if w!="":x=n+len(w)l.append((n,x-1))n=xreturn set(l)#返回集合,便于按位与
# s1="山西/大学/的/学生/毕业/后/留/在/了/山西大学/"  #正确输出情况
# s2="山西大学/的/学生/毕业/后/留/在/了/山西/大学/" #系统实际输出
s1=s
s2=input("请输入正确输出:")
N1=s1.count("/")      #测试集中的总词数4
N2=s2.count("/")      #系统输出的总词数5
N3=len(sign(s1)&sign(s2))            #系统输出正确的词数3
def estimate(N1,N2,N3):R=N3/N1P=N3/N2F=2*P*R/(P+R)print("召回率为",R,"\n精确率为",P,"\nF测度为",F)
estimate(N1,N2,N3)
print("***************************************")
print("任务3——结巴系统")
#全模式:把句子中所有的可以成词的词语都扫描出来, 速度非常快,但是不能解决歧义;
#搜索引擎:在精确模式的基础上,对长词再次切分,提高召回率,适合用于搜索引擎分词。---介于全模式和精确模式之间
#精确模式:试图将句子最精确地切开,适合文本分析;#搜索引擎更注重召回率因为要保证的是不遗漏正确的分词,精确率可以差一点,比如说搜索一页得不到想要的结果,可以多搜几页
def sign2(list):l=[]n=0 #n标记当前字的编号,从第0个开始for w in list:if w!="":x=n+len(w)l.append((n,x-1))n=xreturn set(l)#返回集合,便于按位与
import jiebaif __name__ == '__main__':str1 = '我去北京天安门广场跳舞'a = jieba.lcut(str1, cut_all=True)  # 全模式print('全模式:{}'.format(a))b = jieba.lcut(str1, cut_all=False)  # 精简模式print('精简模式:{}'.format(b))c = jieba.lcut_for_search(str1)  # 搜索引擎模式print('搜索引擎模式:{}'.format(c))
s1=input("输入正确输出:")
N1=s1.count('/')
N2=len(b)
N3=len(sign(s1)&sign2(b))
print("结巴分词系统的评价:")
estimate(N1,N2,N3)

实验结果:

1.正向最大匹配分词程序

2.评价程序

3.结巴分词

中文信息处理实验2——基于词表的分词相关推荐

  1. 中文信息处理实验7——基于Word2Vec的文本表示

    目录 实验目的: 实验要求: 实验内容及原理: 参考代码: 实验结果: 实验目的: 加深对汉语文本信息处理基础理论及方法的认识和了解,锻炼和提高分析问题.解决问题的能力.通过对具体项目的任务分析.数据 ...

  2. 基于词表和N-gram算法的新词识别实验

    摘  要  目前未登录词问题仍然很大程度上影响着自动标引和信息检索的效率.本文提出了一种选择期刊论文的题名和摘要作为训练语料,利用N-gram算法切分和停用词典等过滤筛选非专名的新词识别方法.该方法主 ...

  3. 中文信息处理(二)—— 分词

    文章目录 中文信息处理核心技术 中文分词 NLP任务层次 一.为什么分词? 二.分词为什么难? 三.常见的分词系统 四.几种分词方法 1. 基于词表的分词 1.1 主要思想 1.2 最大匹配分词法关键 ...

  4. 基于词表的中文分词算法

    基于词表的中文分词算法 正向最大匹配法 对于输入的一段文本从左至右,以贪心的方式切分出当前位置上长度最大的词.正向最大匹配法是基于词典的分词方法,其分词原理是:单词的颗粒度越大,所能表示的含义越确切. ...

  5. 中文分词算法——基于统计的分词

    1.基于统计的分词(无字典分词) 主要思想:上下文中,相邻的字同时出现的次数越多,就越可能构成一个词.因此字与字相邻出现的概率或频率能较好的反映词的可信度. 主要统计模型为:N元文法模型(N-gram ...

  6. 中文信息处理的主流技术是什么?

    中文信息处理的主流技术是什么? 从20世纪50年代初机器翻译课题被提出算起,自然语言处理(NLP)的研发历史至少也有50年了.90年代初,NLP的研究目标开始从小规模受限语言处理走向大规模真实文本处理 ...

  7. 基于.NET的分词软件设计与实现V1.0--总体思路及算法实现

    首先介绍一下这个分词软件的总体思路. 查阅了网上的一些相关资料,普遍采用的都是"正向最大匹配算法"和"逆向最大匹配算法",不了解的朋友先来这里看下两个算法的基本 ...

  8. 常见的分词方法接口+ jieba自定义领域内的词表然后加载词表进行分词

    中文分词常见方法_mandagod的博客-CSDN博客_中文分词 另外,我们收集了如下部分分词工具,供参考: 中科院计算所NLPIR http://ictclas.nlpir.org/nlpir/ a ...

  9. 中文信息处理——纵览与建议

    中文信息处理--纵览与建议 (2007-04-11 22:25:49) 转载▼ 分类: 技术视野 2004年10月写的一个材料. ----------------------------------- ...

最新文章

  1. 出现运行时间错误_Excel VBA 运行错误,你知道为何突然出现错误的原因吗
  2. 数据预处理|关于标准化和归一化的一切
  3. tcp协议与粘包现象【转http://www.cnblogs.com/wzd24/archive/2007/12/24/1011932.html】
  4. linux yum自动挂载_LINUX6安装YUM仓库和实现开机自动挂载
  5. 为什么SpringBoot如此受欢迎,以及如何有效地学习SpringBoot?
  6. java中的多线程有什么意义_Java多线程与并发面试题(小结)
  7. [深度学习]生成对抗网络的实践例子
  8. 模块(module)
  9. IDEA for Mac 常用快捷键
  10. ArcGIS 道路线数据处理与拓扑操作
  11. PAT-A1020:Tree Traversal(二叉树的重建及其中序、后序遍历)
  12. Pycharm设置一种好看的皮肤/主题
  13. 文件打包下载 (ZipArchive)
  14. trilateration三边测距算法及C语言实现(适用stm32)
  15. duilib入门教程
  16. 一个简单的时间片轮转多道程序内核代码
  17. 一个草根程序员如何进入BAT
  18. python制作折线图_python 生成折线图
  19. 颠覆性创始人Tony Delgado在波多黎各启动编码训练营
  20. 秋招面试!30K成功入职美团,忙里偷闲分享一波【面试经历+面试真题】

热门文章

  1. java基于ssm的校园教学评价系统设计与实现 aspnet python springboot
  2. 【用户行为分析】 用wiki百科中文语料训练word2vec模型
  3. 课余或者业余学习python,可以嘛?
  4. 谷歌浏览器自定义快捷搜索引擎
  5. 练手/翻译软件/有道翻译API/XML解析/正则/Java
  6. win7 引导 ubuntu
  7. Thrill: 基于C++的高性能分布式批处理算法
  8. linux--Flex and Bison
  9. 2022 年度作品优秀大赏 | 开发者说·DTalk
  10. nginx alias php,Nginx设置alias实现虚拟目录 alias与root的用法区别