Practice3:分词

作业1:Hanlp

安装hanlp工具

  1. 安装pyhanlp包
    命令行:pip install pyhanlp在这里插入图片描述
  2. from pyhanlp import *
    在python中调用pyhanlp工具会自动安装hanlp.jar包并配置环境
    在这里插入图片描述
  3. 测试语句:“今天开心了吗?”‘
from pyhanlp import *
print(HanLP.segment("今天开心了吗?"))

在这里插入图片描述
安装成功。

2.使用hanlp进行分词

1.默认分词

代码:

paraStr1='中国科学院计算技术研究所的宗成庆教授正在教授自然语言处理课程'
print("="*30+"HanLP分词"+"="*30)
HanLP = JClass('com.hankcs.hanlp.HanLP')
print(HanLP.segment(paraStr1))

在这里插入图片描述

2.标准分词
print("="*30+"标准分词"+"="*30)
StandardTokenizer = JClass('com.hankcs.hanlp.tokenizer.StandardTokenizer')
print(StandardTokenizer.segment(paraStr1))

在这里插入图片描述

3.NLP分词
print("="*30+"NLP分词"+"="*30)
NLPTokenizer = JClass('com.hankcs.hanlp.tokenizer.NLPTokenizer')
print(NLPTokenizer.segment(paraStr1))

在这里插入图片描述

4.索引分词
print("="*30+"索引分词"+"="*30)
IndexTokenizer = JClass('com.hankcs.hanlp.tokenizer.IndexTokenizer')
termList= IndexTokenizer.segment(paraStr1)
for term in termList :
    print(str(term) + " [" + str(term.offset) + ":" + str(term.offset + len(
    term.word)) + "]")

在这里插入图片描述

5.极速词典分词
print("="*30+" 极速词典分词"+"="*30)
SpeedTokenizer = JClass('com.hankcs.hanlp.tokenizer.SpeedTokenizer')
print(NLPTokenizer.segment(paraStr1))

在这里插入图片描述

6.自定义分词
paraStr2 = '中国科学院计算技术研究所的宗成庆教授正在教授自然语言处理课程'
print("="*30+" 自定义分词"+"="*30)
CustomDictionary = JClass('com.hankcs.hanlp.dictionary.CustomDictionary')
CustomDictionary.add('自然语言')
CustomDictionary.add('处理')
HanLP = JClass('com.hankcs.hanlp.HanLP')
print(HanLP.segment(paraStr2))

向词典中添加“自然语言”,“处理”词,分词结果如下:
在这里插入图片描述

3.分词结果

对比发现,默认分词,标准分词,NLP分词,极速分词,自定义分词结果相同。索引分词结果更加细致,可以返回长词,短词,长短词等多种分词结果。

作业2:jieba分词

导入jieba包,采用4中分词方式进行分词,分别是全模式,精确模式,默认模式,网页搜索模式进行分词,代码如下:

import jieba
#jieba_分词
#Python join() 用于将序列中的元素以指定的字符连接生成一个新的字符串。
import jieba
seg = "。。。"
seg_list = jieba.cut(seg, cut_all=True)
print("="*30 + "全模式 " + "="*30)
print( "/ ".join(seg_list))  # 全模式

seg_list = jieba.cut(seg, cut_all=False)
print("="*30 + "精确模式 " + "="*30)
print( "/ ".join(seg_list))  # 精确模式

seg_list = jieba.cut(seg)  # 默认是精确模式
print("="*30 + "默认精确模式 " + "="*30)
print("/ ".join(seg_list))

seg_list = jieba.cut_for_search(seg)  # 搜索引擎模式
print("="*30 + "搜索引擎模式 " + "="*30)
print( "/ ".join(seg_list))

分词结果如下:

  1. 全模式分词:把句子中的所有可以成词的词语都扫描出来。
    在这里插入图片描述

  2. 精确模式/默认精确模式:试图将文本最精确的分开。
    在这里插入图片描述

  3. 搜索引擎模式
    在这里插入图片描述

分析结果,不同模式下,部分相同词项返回的分词结果。
全模式和搜索引擎下计算机技术 返回了 “计算/计算机/计算机技术/算机/技术/” 等多种结果。自然语言处理 返回了 自然/自然语言/语言 处理等多种结果。
而精确模式返回的为 “计算机技术自然语言处理
整体来看,全模式和搜索引擎模式返回的分词结果更详尽;精确模式下返回的分词结果更精准,避免了词项的重复,因此精确模式下的分词更适合文本分析。
不足: 几种模式下,都没有对人名进行正确分词,需要使用新词发现算法或添加自定义词典进行处理。

作业3

  1. 获取文本路径,停用词路径
text_path = "shitouji"#相对路径,文本和工程放在一个目录下
stop_words_path = "哈工大停用词表.txt" #相对路径,文本和工程放在一个目录下

文本是从网络上下载的曹雪芹著作《石头记》,利用简繁体转换工作转换成繁体。
停用词为哈工大停用词表。

  1. 定义词典,按照精确模式分词,获取分词后的停用词
def get_seg_dic(text_path, stop_words_path):
    '''
    :param path: 文本路径
    :return: 文本分词、去除停用词之后的词典
    '''
    f = open(text_path,"r",encoding="utf-8")
    f_text = f.read()
    print(f_text)

    f_seg_list = jieba.cut(f_text,cut_all=False)
    print(f_seg_list)
    f.close()
    stop = open(stop_words_path,"r",encoding="utf-8") #打开停用词文本
    stop_text = stop.read() #获取停用词文本
    stop_words_list = stop_text.split("\n") #split()通过指定分隔符对字符串进行切片

    dic = {}
    for word in f_seg_list:
        if not (word.strip() in stop_words_list):
            dic.setdefault(word, 0)
            dic[word] += 1

    return dic

传入值是文本路径,停用词路径,返回值是去停用词后的词典。

  1. 查看词频词项(仅部分)
    在这里插入图片描述
    按词频降序:
    在这里插入图片描述
    可以看到,因为现今的停用词表都是简体停用词,所以并没有清除掉繁体停用词。所以高频词有:
    [(‘說’, 7847), (‘妳’, 6766), (‘道’, 6216), (‘裏’, 5289), (‘來’, 4764), (‘麽’, 4054), (‘著’, 3337), (‘不’, 3045), (‘壹’, 2894), (‘便’, 2728), (‘人’, 2696)]
    按词频降序排序:
    在这里插入图片描述
    可以看到,高频词中包含了很多人名,宝玉,贾母,凤姐,王夫人,姑娘,宝钗等,还包含了“说”,“道”,“听”,“笑”等动词。可以初步分析这是一篇以人物描写为主的小说。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值