简介
NLPtool natural language processing system
实习期间做的NLP的基础工具,包括中文分词、词性标注和命名实体识别功能,使用的方法是基于词典、规则加CRF统计的方法,仅使用pku的数据训练了一个crf模型,由于pku分词数据和msr粒度和规范不太相同,所以用pku数据训练的模型在msr数据上表现一般。
词性标注使用的是人民日报的标注规范。
名词         n  
            nr 人名  
            ns 地名  
            nt 机构团体  
            nz 其它专名  
 时间词      t  
 处所词      s  
 方位词      f  
 动词        v  
            vd 副动词  
            vn 名动词  
 形容词      a  
            ad 副形词  
            an 名形词
 区别词      b  
 状态词      z  
 代词       r  
 数词       m  
 量词       q  
 副词       d  
 介词       p  
 连词       c  
 助词       u  
 叹词       e  
 语气词      y  
 拟声词      o  
 简称略语    j  
 习用语      l  
 成语       i  
 前接成分    h  
 后接成分    k  
 连接语    无  
 语素字      g  
            Ag 形语素  
            Dg 副语素  
            Ng 名语素  
            Tg 时语素  
            Vg 动语素  
 非语素字    x  
 标点符号    w  
命名实体识别识别五种类型的实体,分别为:
Organization   //组织机构
Datetime      //时间,日期
Location     //地名,包括城市,国家等
Person        //人名
Number         //数字
Basic          //其他实体,默认初始为basic
依赖软件
- g++ (version >= 4.1 is recommended ) or clang++(Apple LLVM version 9.0.0);
- cmake (version >= 2.8 is recommended );
下载和编译
1.下载crfpp软件包,放到工程主目录下 2.安装crf++, % ./configure % make % su %make install (可选) 3.cd build 4.cmake .. 5.make
使用方法
*make后生成dfnlp二进制程序,运行 :
./dfnlp
结果示例
- input = “吴学研,男,1983年9月23日出生,汉族,无职业,住哈尔滨市松北区。”
- output:
- 
    分词结果 
 ———– cut result:
 吴学研/ ,/ 男/ ,/ 1983年/ 9月/ 23日出生/ ,/ 汉族/ ,/ 无职业/ ,/ 住/ 哈尔滨市/ 松北区/ 。/
- 
    词性标注结果 
 ———– pos result:
<吴学研, n> <,, n> <男, b> <,, n> <1983年, t> <9月, t> <23日出生, v> <,, nz> <汉族, nz> <,, n> <无职业, n> <,, n> <住, v> <哈尔滨市, ns> <松北区, ns> <。, w>。
- 命名实体识别结果
 ———– ner result:
 word : 吴学研 pos : n begin_pos : 0 key_type : Person
 word : , pos : n begin_pos : 3 key_type : Basic
 word : 男 pos : b begin_pos : 4 key_type : Basic
 word : , pos : n begin_pos : 5 key_type : Basic
 word : 1983年9月 pos : v begin_pos : 6 key_type : Datetime
 word : 23日出生 pos : v begin_pos : 13 key_type : Basic
 word : , pos : nz begin_pos : 18 key_type : Basic
 word : 汉族 pos : nz begin_pos : 19 key_type : Basic
 word : , pos : n begin_pos : 21 key_type : Basic
 word : 无职业 pos : n begin_pos : 22 key_type : Basic
 word : , pos : n begin_pos : 25 key_type : Basic
 word : 住 pos : v begin_pos : 26 key_type : Basic
 word : 哈尔滨市松北区 pos : w begin_pos : 27 key_type : Location
 word : 。 pos : w begin_pos : 34 key_type : Basic
分词性能评测
根据第二届国际汉语分词测评(The Second International Chinese Word Segmentation Bakeoff)发布的国际中文分词测评标准,将DFNLP分别与国内常见的分词软件分别在pku_test(510KB), msr_test(560KB)数据集上进行测试。使用icwb2-data 提供的perl脚本计算分词结果的召回率和准确率,其中ICTCLAS,THULAC_lite,LTP-3.2.0的结果数据使用的是清华THULAC提供的结果数据和运行时间,我仅测试了jieba(c++)和DFNLP的性能和时间,然后以jieba为基准,将DFNLP的运行时间换算为新的时间,例如:例如THULAC页面测试的jieba时间为0.4s,而我测试时jieba和DFNLP分别为0.2s,0.3时,那么如果jieba为0.4s时,DFNLP将换算为0.6s(不严谨的列了一下),准确率、召回率方面结果应该是相同的,测试结果如下:
pku_test(510KB)
| Algorithm | Precision | Recall | F-Measure | Time | 
|---|---|---|---|---|
| ICTCLAS | 0.939 | 0.944 | 0.941 | 0.53s | 
| jieba(C++) | 0.850 | 0.784 | 0.816 | 0.23s | 
| THULAC_lite | 0.944 | 0.908 | 0.926 | 0.51s | 
| LTP-3.2.0 | 0.960 | 0.947 | 0.953 | 3.83s | 
| DFNLP | 0.945 | 0.941 | 0.943 | 0.77s | 
msr_test(560KB)
| Algorithm | Precision | Recall | F-Measure | Time | 
|---|---|---|---|---|
| ICTCLAS | 0.869 | 0.914 | 0.891 | 0.55s | 
| jieba(C++) | 0.814 | 0.809 | 0.811 | 0.26s | 
| THULAC_lite | 0.877 | 0.899 | 0.888 | 0.62s | 
| LTP-3.2.0 | 0.867 | 0.896 | 0.881 | 3.21s | 
| DFNLP | 0.833 | 0.857 | 0.845 | 0.63s | 

 
 
        
         
      
 
                 
                
