# nlp-lab1 **Repository Path**: LouisJiangjing/nlp-lab1 ## Basic Information - **Project Name**: nlp-lab1 - **Description**: 哈工大nlp实验一 - **Primary Language**: Python - **License**: Apache-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2021-10-23 - **Last Updated**: 2022-01-07 ## Categories & Tags **Categories**: Uncategorized **Tags**: 课程实验 ## README # nlp-lab1 # 2021年秋哈工大nlp实验一 # 注意⚠️!!! 老师会对本实验进行查重,请各位谨慎操作! ## 项目目录说明 src BiGram.py 二元文法实现 DataSetGenerator.py 对数据集的处理函数 main.py 主函数,包括对实验阶段1-5的主函数 MaxMatch.py 最大分词实现的实现,包括正反向的最短实现以及trie树实现 TrieNode.py trie树节点的数据结构 UniGram.py 一元文法实现 text temp 五折交叉验证的数据集以及结果 199801_seg&pos.txt 训练集1 199802.txt 训练集2 199801_sent.txt 测试集 dic.txt <任务1>所提交的词典 k_fold_result.txt 5折交叉验证结果 name.txt 人名文件 score.txt <任务3>所提交的score.txt seg_FMM.txt <任务2>所提交的FMM分词结果 seg_BMM.txt <任务2>所提交的BMM分词结果 TimeCost.txt <任务4>所提交的程序耗时结果 ## 第一阶段验收说明 **_建议助教验收时将验收的部分解除注释,其余部分不解除注释!_** 1. 任务1-词典的构建 1. 程序在[main]中的line\[439-449] 2. 我对词典做了以下处理:去掉了训练集中的数字,包括阿拉伯数字(0-9)以及中文数字(零-十,百,千,万,亿) 2. 任务2 1. 程序在[main]中的line\[451-456],其中line\[452-53]为最短实现,line\[455-456]为trie树实现(方便助教运行,因为最短实现运行时间太长) 2. 由于数字都没有被写入词典,因此分词的准确率极低,在任务3中将对结果进行机械修正,准确率会有所提升 3. 如果希望程序运行的时候可以查看进度,则需要将[MaxMatch]中的对`print(partition)`的注释 3. 任务3 1. 程序在[main]中的line\[458-476] 2. 由于数字都没有被写入词典,因此分词的准确率极低,如果想观察到较高的准确率,则需要运行line\[462-465]来对分词结果进行机械修正 4. 任务4 1. 程序在[main]中的line\[479-480] 2. 仅测试fmm性能的提高(因为都的花进行太费时间),但是bmm也进行了类似的优化实现 ## 第二阶段验收说明 **_第二阶段没有修改第一阶段的代码!只是复用部分代码,请助教放心!_** **_建议助教验收时将验收的部分解除注释,其余部分不解除注释!_** **_请助教验收时将需要进行分词测试的文件放入[text]目录下,并且名称为test.txt_** 1. 任务5-基于统计语言模型的分词系统实现 1. 程序在[main]中的line\[483-486] 2. 本任务中,我只实现了一元、二元文法,分别在文件[UniGram.py]、[BiGram.py]中 3. 最终分词的输出文件为***seg_LM.txt*** 4. 如需要使用我的评测函数,则需要将line\[486]注释掉,并且将final_answer变量赋值为标准答案的文件路径 [main]:./src/main.py [MaxMatch]:./src/MaxMatch.py [text]:./text [UniGram.py]:./src/UniGram.py [BiGram.py]:./src/BiGram.py