包含人民日报语料相关的处理脚本。
输出的格式为类似 CoNLL-U
格式
-
文件编码格式转换
-
解析并转化语料库
这里详细介绍一下 解析并转化语料库
这一部分
人民日报语料库是版权材料,本仓库不提供原始的人民日报语料库,但是用户登录官方网站后可以自行下载(任何人都可以注册)。
请访问 现代汉语多级加工语料库, 注册用户后方可下载语料库。
请下载 5-199801基本标注语料库-2003年版规范-20170612.rar
,解压缩后将文件 1998-01-2003版-带音.txt
放置到 ./data
目录下。
pip install -r ./requirements.txt
原始文件采用的是 gbk
,需要将其转换成 utf-8
编码
python ./convert_encoding.py
-
默认输入文件:
data/1998-01-2003版-带音.txt
-
输出文件:
data/raw_data.txt
将原始的语料库格式解析并转换成类似 CoNLL-U
格式
python ./parse_data.py
运行结束后,将得到文件 ./data/xxx.conllu
默认情况下,运行此文件将得到两个文件:data_False-True-True-False-False-False-False.conllu
和 data_False-True-True-True-True-True-False.conllu
文件名中的 True False 对应着选项 merge_sub_token
、remove_geta_symbol
、extract_first_token_as_document_id
、merge_family_name
、merge_time
、replace_double_byte_punctuation
和 output_doc_id
的启用或者关闭。
data_False-True-True-False-False-False-False.conllu
是为了后续分词任务而准备的,它关闭了某些合并操作。
data_False-True-True-True-True-True-False.conllu
是为了后续 ENR 任务而准备的,它应用了某些合并操作。
-
输入文件:
data/raw_data.txt
-
输出文件:
data/conllu/data_False-True-True-False-False-False-False.conllu
和data/conllu/data_False-True-True-True-True-True-False.conllu
python ./split_data.py
默认按照 train 90% / dev 0% / test 10% 做的分割,所得到的文件分别为 train.conllu dev.conllu test.conllu ,位于 ./data/split_data
目录中。
-
输入文件:
data/conllu/data_False-True-True-True-True-True-False.conllu
-
输出文件:
data/split_data/train.conllu
、data/split_data/dev.conllu
和data/split_data/test.conllu
原始的人民日报语料库中不包含实体信息,但是有 POS 信息,根据人民日报语料库的标注标准,特定类别的名词被标记成了特殊的 POS, 因此可以利用这些信息来完成提取实体的工作。
根据1998语料库的词性标记说明,词性标记:t
、nr
、ns
和 nt
依次对应的实体是时间(DATE)、人名(PERSON)、地名(GPE)、组织机构名(ORG, organization)。
本项目的 NER 标记系统支持:
-
BILUO
,在 The BILUO Scheme 中详细的介绍了这个标记系统。 -
BIO
, 在 Coding Chunkers as Taggers: IO, BIO, BMEWO, and BMEWO+ 中详细的介绍了这个标记系统。
默认使用的 BIO
系统。
CRF 系统所需的格式与 CoNLL-U 格式不太一致(CoNLL-U 格式比 CRF 格式多第一列的 index),需要经过转换。
python ./conll_to_word_crfpp.py
所得到的文件位于 ./data/split_crfpp
目录中。
-
输入文件:
data/split_data/train.conllu
、data/split_data/dev.conllu
和data/split_data/test.conllu
-
输出文件:
data/split_crfpp/train.txt
、data/split_crfpp/dev.txt
和data/split_crfpp/test.txt
所得文件样例如下:
1997年 B-DATE
的 O
最后 O
一 O
天 O
, O
得克萨斯州 B-GPE
联邦 O
地方 O
法官 O
肯代尔 B-PERSON
的 O
python ./conll_to_char_crfpp.py
所得到的文件位于 ./data/split_char_crfpp
目录中。
-
输入文件:
data/split_data/train.conllu
、data/split_data/dev.conllu
和data/split_data/test.conllu
-
输出文件:
data/split_char_crfpp/train.txt
、data/split_char_crfpp/dev.txt
和data/split_char_crfpp/test.txt
所得文件样例如下:
1 B-DATE
9 I-DATE
9 I-DATE
7 I-DATE
年 L-DATE
的 O
最 O
后 O
一 O
天 O
, O
得 B-GPE
克 I-GPE
萨 I-GPE
斯 I-GPE
州 L-GPE
联 O
邦 O
地 O
方 O
法 O
官 O
肯 B-PERSON
代 I-PERSON
尔 L-PERSON
的 O
转换语料库
部分参考了文章 达观数据如何打造一个中文NER系统 的内容