# 自然语言处理作业
## 实验内容:
实现基于词典的分词方法和统计分词方法:两类方法中各实现一种即可;
对分词结果进行词性标注,也可以在分词的同时进行词性标注;
对分词及词性标注结果进行评价,包括 4 个指标:正确率、召回率、F1 值和效率。
## 实现平台
MacBook Air M1,全部使用 Python 进行实验
## 实验过程
基于词典的分词方法中,我们使用了四种分词方法,即完全切分式,正向最长匹配,逆向最长匹配,双向最长匹配。此处代码见附录 1。
这里的词典我选择使用了北京大学统计好的词典作为词典参考来进行实验。
![](https://www.writebug.com/myres/static/uploads/2021/11/27/7180972a3ff57319c7ba901d9dbf3c95.writebug)
![](https://www.writebug.com/myres/static/uploads/2021/11/27/be7b72c283c42fb4b9dc4f34f302babe.writebug)
![](https://www.writebug.com/myres/static/uploads/2021/11/27/6892b1c51a3f5d588d2506037516fd02.writebug)
我们随意输入几个句子并输出结果,根据结果来看,各个方法分词的效果还算不错。接下来我们使用人民日报的分好的语料库进行一个全篇的预测。
![](https://www.writebug.com/myres/static/uploads/2021/11/27/c1014cf540c2bcd4f88e002554864441.writebug)
首先我们使用前向切分的方法,可以看到 P,R,F1 三个值,以及用时 26.92s。
![](https://www.writebug.com/myres/static/uploads/2021/11/27/84336c1ce7fb5993c3425ab0342164b7.writebug)
接下来使用后向切分的分法,正确率微微提升,同时用时 27.51s。
![](https://www.writebug.com/myres/static/uploads/2021/11/27/ca10ad6a436a653cba8f5e01ebcf20b2.writebug)
最后使用双向切分的方法,正确率几乎不变,用时 52s,几乎翻倍的时间。
| | P | R | F1 | Time |
| ---- | ------ | ------ | ------ | ----- |
| 前向 | 0.8413 | 0.8864 | 0.8864 | 26.91 |
| 后向 | 0.8482 | 0.8934 | 0.8934 | 27.51 |
| 双向 | 0.8489 | 0.8939 | 0.8708 | 52.73 |
可见,基于词典的分词方式,不论哪种方法,正确率基本稳定在这个范围上。效果还算可以。
基于语料的统计分词,使用二元语法模型来构建词库,然后将句子生成词网,在使用 viterbi 算法来计算最优解,在这当中使用 +1 法来处理前后之间概率。代码放在附录 2
首先我们处理原始文件,将人民日报语料库的带空格的文件处理成 CSV 的表格形式方便我们进行分词的整理。
![](https://www.writebug.com/myres/static/uploads/2021/11/27/2a2ea819472ef2c9090432df17d5e5c8.writebug)
![](https://www.writebug.com/myres/static/uploads/2021/11/27/1a85dcaf8e8003142aeca15ca6704d19.writebug)
![](https://www.writebug.com/myres/static/uploads/2021/11/27/d15891304a0910fafb0968559de2ea13.writebug)
这里是二元语法模型的核心代码:
![](https://www.writebug.com/myres/static/uploads/2021/11/27/e4d2a10ee716887c1e4210dd9d68501c.writebug)
这里是生成句子词网的核心代码:
![](https://www.writebug.com/myres/static/uploads/2021/11/27/b5d12a055eea7cfdf5877c24c8d705ca.writebug)
这里是 +1 平滑处理的核心代码:
![](https://www.writebug.com/myres/static/uploads/2021/11/27/0e9a2f64c0286317aa119c92ff0fb7d0.writebug)
这里是 viterbi 算法的核心代码:
![](https://www.writebug.com/myres/static/uploads/2021/11/27/9583639fd01e229c1153aa028366231f.writebug)
- 测试集和训练集均为人民日报语料库,接下来是最终训练出来的效果。
- 展示了 P,R,F1 的值
- 可以看到还是达到了一个近乎 99% 的正确率,同时训练 + 预测共耗时 307。
```c++
= 0.9905
= 0.9843
= 0.9873
```
![](https://www.writebug.com/myres/static/uploads/2021/11/27/7fc72216db73125d0c123fd7ffb0a516.writebug)
- 对分词的结果进行词性标注。使用了统计的方法。此处代码同附录 2.
我们先对人民日报带词性标注的 txt 文件进行一个转换,转换成便于我操作的 CSV 文件。
![](https://www.writebug.com/myres/static/uploads/2021/11/27/108b8171ac59284d9698220967f5c38d.writebug)
![](https://www.writebug.com/myres/static/uploads/2021/11/27/f7f716a91172207f5e2972b48d0b2c63.writebug)
![](https://www.writebug.com/myres/static/uploads/2021/11/27/4399e577547906164b93afa99b8ebe56.writebug)
下面是我们词性标注的训练核心代码,统计所有词性和他们的个数,获得相应的词性转移矩阵,在统计每个词语的词性概率。
![](https://www.writebug.com/myres/static/uploads/2021/11/27/688efaec0a8d8ae0885bf79eeadf6ed3.writebug)
这里是推测词性的核心代码:
![](https://www.writebug.com/myres/static/uploads/2021/11/27/27d4e2115394ddf6f19ccc66f4bbd105.writebug)
下面是对分词结果的正确性评估,这里我使用了书中使用的方法,仅计算一个 Accuracy 作为正确率评估标准,同时我只对之前分词正确的结果结果进行词性评估,这样可以避免其它的错误。
![](https://www.writebug.com/myres/static/uploads/2021/11/27/912b9e919d235be99947e9c6a3072429.writebug)
通过检测结果来看,词性标注的正确率大概在 95% 左右,同时共计耗时 315s。还算一个相对不错的效果。
![](https://www.writebug.com/myres/static/uploads/2021/11/27/0691fdb9e932f6a87484e0255363e9bd.writebug)
**实验遇到的问题与麻烦**
首先就遇到的难题是处理人民日报那个 txt,一开始没有想到很方便的办法把它处理为 list 数据,最后通过转换为 CSV 格式,在直接导入到 list 当中确实简化了不少步骤。
处理二元语法模型的时候,这个“#始始#”,“#末末#”的处理确实费了不少功夫,总是在这里缺少一些项目,debug 了很长时间。
Viterbi 算法中存在的字典中缺少的值如何去补充,不存在的转化概率该如何去补充。
这个也是尚未处理的问题,我做预测的时候仍然采用原人民日报的换行格式,即一行就为一个句子,但这个很明显并不是我们日常意义上所理解的句子,我们通常理解的句子中,是以“。”,“!”,“?”作为句子结尾的。我重新刷洗了数据,并让句子按照这三个标点符号作为结尾来预测数据。
![](https://www.writebug.com/myres/static/uploads/2021/11/27/9711b080d9ab1fc2c0bb6723afc1ee8f.writebug)
最终得出的训练结果中,正确率不变,说明我们能很好的将标点符号分开,但是时间却缩小了一些,说明缩短句子确实有助于减少大规模词网的运算量。
附录
附录一:基于词典的分词方法:
```c++
import csv
import time
start_time = time.time()
# 读入字典
def load_dictionary():
word_list = set()
csvFile = open("test.csv", "r")
reader = csv.reader(csvFile)
for item in reader:
word_list.add(item[0])
return word_list
# 完全切分式中文分词
# 如果在词典中则认为是一个词
def fully_segment(text, dic):
word_list = []
for i in range(len(text)):
for j in range(i + 1, len(text) + 1):
word = text[i:j]
if word in dic:
word_list.append(word)
return word_list
# 正向最长匹配
# 从当前扫描位置的单字所有可能的结尾,我们找最长的
def forward_segment(text, dic):
word_list = []
i = 0
while i < len(text):
longest_word = text[i]
for j in range(i + 1, len(text) + 1):
word = text[i:j]
if word in dic:
if len(word) > len(longest_word):
longest_word = word
word_list.append(longest_word)
i += len(longest_word)
return word_list
# 逆向最长匹配
def back_segment(text, dic):
word_list = []
i = len(text) - 1
while i >= 0:
longest_word = text[i]
for j in range(0, i):
word = text[j:i + 1]
if word in di
没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
本项目实现基于词典的分词方法和统计分词方法:两类方法中各实现一种即可; 对分词结果进行词性标注,也可以在分词的同时进行词性标注; 对分词及词性标注结果进行评价,包括 4 个指标:正确率、召回率、F1 值和效率。
资源推荐
资源详情
资源评论
收起资源包目录
100012661-基于Python实现自然语言处理作业.zip (81个子文件)
nlpmytest
.DS_Store 6KB
pic
截屏2021-10-20 下午3.19.04.png 1.09MB
截屏2021-10-20 下午2.19.00.png 1.03MB
截屏2021-10-20 下午2.43.55.png 1.06MB
截屏2021-10-20 下午2.52.01.png 1.83MB
截屏2021-10-20 下午2.20.49.png 1.04MB
截屏2021-10-20 下午1.57.11.png 1.1MB
截屏2021-10-20 下午2.39.38.png 1.08MB
截屏2021-10-20 下午2.43.09.png 1.21MB
截屏2021-10-20 下午2.10.53.png 1.03MB
截屏2021-10-20 下午3.37.03.png 1.08MB
截屏2021-10-20 下午2.31.34.png 1.05MB
截屏2021-10-20 下午12.56.50.png 1019KB
截屏2021-10-20 下午2.49.00.png 912KB
截屏2021-10-20 下午1.54.30.png 1010KB
截屏2021-10-20 下午2.52.35.png 1.13MB
截屏2021-10-20 下午2.26.55.png 893KB
截屏2021-10-20 下午2.32.43.png 1.15MB
截屏2021-10-20 下午2.32.24.png 1.06MB
截屏2021-10-20 下午2.32.55.png 1.22MB
截屏2021-10-20 下午2.51.18.png 1.79MB
截屏2021-10-20 下午2.50.53.png 1.1MB
截屏2021-10-20 下午3.36.56.png 1.07MB
第一次大作业.docx 7.85MB
LICENSE 1KB
张昊杰·1120193583.pdf 6.69MB
img
9-cbb859550975cc0b1d83371c6f776a58.png 292KB
1-489037ff61b71fc8242d4153b16b08ff.png 355KB
18-c6976ca66eb131e8dbdaea3c0c005add.png 360KB
4-e87115be9f51cc919496406f6e17f4f4.png 337KB
21-58ae33c8d42ab28237e08339a29f861f.png 310KB
22-4c906da2d266660e4504dab4236d0396.png 370KB
14-ce14bd892975c0530d66b0bb9b76ce04.png 306KB
10-a28392551a7b3b1f7a2d7c5160602327.png 344KB
2-70bdde12869dfe448c68cda14a3066ed.png 343KB
11-b70eeb985738af1e99531bd35dad8651.png 340KB
6-c617b593846066a586b13f77863482c9.png 341KB
5-522a9b45c006193c2e6f259cffe29960.png 337KB
13-e221f9d82f11549012fc285030b5762b.png 431KB
7-8622fe88809eb022be2e3152ba5ad16b.png 244KB
17-2391c976beba04b71decff9998e88f77.png 330KB
12-c84ef3ba1c1b4bf6f038a7410707d8be.png 381KB
19-58a20d8c60a52ab0a74d874c23322ffb.png 431KB
3-876b42f1a1fa1679ac557b707c814bc6.png 344KB
15-01587313ee2cbba1240cd3561b23c165.png 254KB
16-f5ac41102771a2b048a692a20c47ea7a.png 659KB
8-c97e3deb2876dec11574ca8e5946d17a.png 533KB
20-dcd293e02aab8ba1b4e1a371557b4516.png 349KB
pythonProject
.DS_Store 6KB
chuli.py 316B
cws.csv 68B
renmincixing.txt 10.77MB
cixing_tongji.py 4KB
main.py 418B
temp.csv 9.12MB
my_cws_corpus.csv 62B
train.lm 14.75MB
.idea
pythonProject.iml 318B
workspace.xml 10KB
misc.xml 186B
inspectionProfiles
profiles_settings.xml 174B
modules.xml 278B
chulicixing.py 373B
fenci.py 4KB
renmin.csv 6.28MB
danju.csv 6.28MB
CoreNatureDictionary.csv 1.08MB
tongjifenci.py 11KB
renmincixing.csv 9.25MB
renmin.txt 7.35MB
test.csv 2.37MB
README.md 23KB
code
chuli.py 316B
renmincixing.txt 10.77MB
chulicixing.py 373B
fenci.py 4KB
renmin.csv 6.28MB
tongjifenci.py 11KB
renmincixing.csv 9.25MB
renmin.txt 7.35MB
test.csv 2.37MB
共 81 条
- 1
资源评论
- zwzno12024-01-20感谢大佬,让我及时解决了当下的问题,解燃眉之急,必须支持!
神仙别闹
- 粉丝: 2674
- 资源: 7640
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 笔记实验六,spark,大数据分析
- ####蓝桥杯python的详细的信息介绍
- 电子万年历软件仿真(经过多次修改,保证正确性)
- Unity XR 手势射击控制脚本(适用于任何可手势识别的设备)
- 机械设计全自动电表(NB和IC卡表)控制和上壳装配线sw16可编辑非常好的设计图纸100%好用.zip
- 基于matlab的EAN-13条形码识别系统GUI界面.zip代码53
- matlab基于bp神经网络交通信号标志识别GUI界面13个标志.zip代码54
- 电子万年历答辩实物展示视频mp4格式
- 基于python实现的程序,包括哈希感知算法cvHash,图像切割cvsplit,固定目标检测cvRec(附文档ppt)等
- 计算0-10000之间所有偶数的和
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功