其他分享
首页 > 其他分享> > 实现中文分词、词性标注、关键词提取、句法分析等智能预处理

实现中文分词、词性标注、关键词提取、句法分析等智能预处理

作者:互联网

实现中文分词、词性标注、关键词提取、句法分析等智能预处理的一个简单的小实验作业

实验报告 

一、实验目的 

二、实验环境 

三、 实验内容(内容以txt1分析为例) 

1、文本素材自动分词 

(1)分词初步处理 

(2) jieba精准模式分词 

(3) 部分结果分析 

(4)调整分词结果 

(5)添加自定义词典 

(6)动态调整词典 

(7)调整词频 

(8)导出结果 

2、 文本素材自动词性标注 

(1) 基于jieba词性标注 

(2) 基于jieba词性标注结果分析 

(3) 基于hanlp词性标注结果分析 

3、 文本素材关键词提取 

(1) TF-IDF 

(2) TextRank算法 

(3) 基于hanlp的TextRank算法 

(4) 词云绘制 

4、 文本自动摘要与依存句法分析 

(1)自动摘要 

(2) 依存句法分析 

四、 结果分析 

1. 基于不同方法算法以及各自领域功能中性能、精度各有差异 

2. 对于部分文本的分词、标注等出现格式的错误分析 

(1) 由于格式符号问题代码报错 

(2) 分词以及词性标注后,出现空格太多的问题

3.改进方案思考 

一、实验目的

1、理解文本素材预处理的主要任务;

2、掌握文本素材预处理的主要方法;

3、掌握并实现中文分词、词性标注、关键词提取、句法分析等智能预处理。

二、实验环境

操作系统:window10

软件开发环境:anacoda、jupyterLab、python3.7+

环境变量配置等:anacoda全局变量

三、实验内容内容以txt1分析为例

1、文本素材自动分词

1)分词初步处理

(2)jieba精准模式分词

(3)部分结果分析

主要看到对于俄罗斯报以及阿特里奇的人名,jieba的精准模式分词是存在问题的,为解决这一问题进行以下分析。

4调整分词结果

不难发现,以上运行结果跟我们的预期与想表达的意思是不一致的。

为了使分词结果与预期一致,我们可以采用如下方法:

(5)添加自定义词典

开发者可以指定自己自定义的词典,以便包含jieba词库里没有的词。虽然jieba有新词识别能力,但是自行添加新词可以保证更高的正确率。

词典格式和dict.txt一样,一个词占一行;每一行分三部分:词语、词频(可省略)、词性(可省略),用空格隔开,顺序不可颠倒。

使用 jieba.load_userdict(file_name) 即可载入词典。

 

可以看到,虽然文本分词准确率有了提高,但是俄罗斯报以及阿特里奇的人名还是仍有问题。

6)动态调整词典

使用 add_word(word, freq=None, tag=None) 和 del_word(word) 可在程序中动态修改词典,这是对“添加自定义词典”功能的补充。

 

从结果上看,将阿特里奇的人名加入自定义的词典,并且这个字典可以动态的加入到其中。

7)调整词频

   使用 suggest_freq(segment, tune=True) 可调节单个词语的词频,使其能(或不能)被分出来,这个功能不是基于词典的。

(8)导出结果

最后将相对准确的结果导出。

2.文本素材自动词性标注

(1)基于jieba词性标注

 

(2)基于jieba词性标注结果分析

可以看到,jieba词性标注对数字的分组是尤为敏感的,在这里为进一步找到更好的词性标注方法,我们选择了基于hanlp的词性标注。

(3)基于hanlp词性标注结果分析

pyhanlp实现的分词器有很多,同时pyhanlp获取hanlp中分词器也有两种方式

第一种是直接从封装好的hanlp类中获取,这种获取方式一共可以获取五种分词器,而现在默认的就是第一种维特比分词器

1)NLP分词器

2)维特比分词器

 

3)条件随机场 (crf)分词

4)结果分析

分析结果可以看到条件随机场 (crf)分词对于四机以及人名有着较为良好的词性标注能力。

3.文本素材关键词提取

  1. allowPOS 仅包括指定词性的词,TF-IDF 算法默认为空,不筛选,TextRank 算法默认过滤词性。
  2. "ns", “n”, “vn”, “v”, “nr”,对应 地名、名词、动名词、动词、人名

(1)TF-IDF

期间使用百度的停用词表

 

 

(2)TextRank算法

extract_tags() 将频繁词作为关键词;textrank() 是利用局部词汇之间关系对后续关键词进行排序,其模型一般表示为一个有向有权图,计算过程中要迭代,较为耗时。

(3)基于hanlp的TextRank算法

结果:

(4)词云绘制

4.文本自动摘要与依存句法分析

在文本摘要以及依存句法分析中选用的是基于hanlp的自然语言处理。

1自动摘要

(2)依存句法分析

结果:

四、结果分析

  1. 基于不同方法算法以及各自领域功能中性能、精度各有差异

  1. HMM-Bigram(速度与精度最佳平衡;一百兆内存)
  2. 最短路分词、N-最短路分词
  3. 由字构词(侧重精度,全世界最大语料库,可识别新词;适合NLP任务)
  4. 感知机分词、CRF分词
  5. 词典分词(侧重速度,每秒数千万字符;省内存)
  6. 极速词典分词
  7. 所有分词器都支持:
  8. 索引全切分模式
  9. 用户自定义词典
  10. 兼容繁体中文
  11. 训练用户自己的领域模型
  1. HMM词性标注(速度快)
  2. 感知机词性标注、CRF词性标注(精度高)
  3. 命名实体识别
  4. 基于HMM角色标注的命名实体识别 (速度快)
  5. 中国人名识别、音译人名识别、日本人名识别、地名识别、实体机构名识别
  6. 基于线性模型的命名实体识别(精度高)
  7. 感知机命名实体识别、CRF命名实体识别
  1. TextRank关键词提取
  1. TextRank自动摘要
  1. 基于互信息和左右信息熵的短语提取

2.对于部分文本的分词、标注等出现格式的错误分析

(1)由于格式符号问题代码报错

在进行实验操作:7.txt中,我的代码出现了报错如图所示:

为分析其原因,我进行了回溯,发现jupyter针对文本内容识别报错。对此,有以下几个原因:

  1. 文本格式、编码不识别,我用的是pandas自带的读取read_csv方法,对于此可能是由于UTF-8、或者csv不识别,简单的转换代码编码后,错误仍然出现,问题排除。
  2. 代码版本兼容问题,由于其他文本均不会出现报错,将此问题排除。
  3. 文本部分符号与代码的识别上出现问题。看报错的回溯信息,在文本的第25行,发现,空格以及双引号的问题,简单的对符号进行修改,发现问题解决,代码得以成功跑通,简单分析的是由于文本预处理相关出了问题。由此,可以分析得到,在自然语言处理前,数据信息的采集过程后对于文本的筛选处理格式是非常重要的。

第25行:

(2)分词以及词性标注后,出现空格太多的问题。

如图是科大讯飞语言处理结果,其对于多余的空格以及由于符号的分词效果相当良好,而我们出来的结果相差一些,尤其是词性标注。

txt导读中间的空格会直接被我们的算法识别成两个词,而其他平台中却没有出现这个问题。

3.改进方案思考

实验数据、代码会在后续上传,

本文仅供交流,转载请标明来处,谢谢

标签:词性,文本,句法分析,词典,识别,分词,标注
来源: https://blog.csdn.net/weixin_45284767/article/details/122736502