zoukankan      html  css  js  c++  java
  • 分词工具ICTCLAS5.0使用心得

    接触自然语言处理有一年多了,最基本的一些自然是分词,词性标注,命名实体识别之类的知识,有些应用知道原理是一回事,自己动手做起来又是另外一回事了。最近又开始重操旧业:分词。分词最著名的自然就是中科院的分词系统,这几天接触的ICTCLAS5.0(下载的文件夹名称是:ICTCLAS50_Windows_32_JNI)觉得不错,摸索下,记录下心得和收获。

    <一>.使用

    http://blog.csdn.net/wangxiafghj/article/details/8147926,我是按照这篇博客的教程操作的,基本没什么问题,可以运行。

    收获:

    1.TestMain.java文件中就是由两个函数构成,字面理解,一个是处理段落的,一个是处理文本的。我觉得两者没什么大区别,主要的不同是处理段落的函数testICTCLAS_ParagraphProcess(sInput),输入的段落在程序里修改,输出的结果也是直接显示在控制端。处理文本的函数testICTCLAS_FileProcess(),输入是你指定路径下的指定文件,输出也是指定路径下的指定文件。

    2.参数的修改,我觉得我使用过程中涉及到的参数修改包括是否选择标注词性,词性标记集的设置,以及文件的路径。

    是否标注词性很容易,段落中将ICTCLAS_ParagraphProcess函数最后一个参数改为1即可(1 yes ,0 no);文本中将ICTCLAS_FileProcess函数的第三个参数改为1(1 yes ,0 no)。

    程序中词性标记集的设置只写了一次,在函数testICTCLAS_ParagraphProcess(sInput)内部,

    //设置词性标注集(0 计算所二级标注集,1 计算所一级标注集,2 北大二级标注集,3 北大一级标注集)
    testICTCLAS50.ICTCLAS_SetPOSmap(0);

    我觉得这个语句在testICTCLAS_FileProcess()函数中应该再写一次,假如使用者只使用文本形式的而把段落处理的注释掉了,那词性标记集的设置岂不是很麻烦,建议把这句添加到testICTCLAS_FileProcess()函数的相应位置。

    文件路径有四条语句需要修改:

    //输入文件名
                String Inputfilename = "e:/pos/test.txt";
                byte[] Inputfilenameb = Inputfilename.getBytes();//将文件名string类型转为byte类型
    
                //分词处理后输出文件名
                String Outputfilename = "e:/pos/test_result.txt";
                byte[] Outputfilenameb = Outputfilename.getBytes();//将文件名string类型转为byte类型
    
                //文件分词(第一个参数为输入文件的名,第二个参数为文件编码类型,第三个参数为是否标记词性集1 yes,0 no,第四个参数为输出文件名)
                testICTCLAS50.ICTCLAS_FileProcess(Inputfilenameb, 0, 1, Outputfilenameb);
    
                int nCount = 0;
                String usrdir = "e:/pos/userdict.txt"; //用户字典路径
                byte[] usrdirb = usrdir.getBytes();//将string转化为byte类型
                //第一个参数为用户字典路径,第二个参数为用户字典的编码类型(0:type unknown;1:ASCII码;2:GB2312,GBK,GB10380;3:UTF-8;4:BIG5)
                nCount = testICTCLAS50.ICTCLAS_ImportUserDictFile(usrdirb, 0);//导入用户字典,返回导入用户词语个数
                System.out.println("导入用户词个数" + nCount);
                nCount = 0;
    
                String Outputfilename1 = "e:/pos/testing_result.txt";
                byte[] Outputfilenameb1 = Outputfilename1.getBytes();//将文件名string类型转为byte类型

    按照自己的要求修改结束就可以运行出自己想要的结果了。

    最后一个问题:每种词性标记集中词性代表的含义不太清楚,不废话,继续我的寻表之路。。。。

    <二>.词性标注集

    程序中提及的词性标注集有四种:0 计算所二级标注集,1 计算所一级标注集,2 北大二级标注集,3 北大一级标注集,但是每种标注集具体的词表还是不清楚,找到了两种标注集,中科院标注集和北大标注集。

    中科院标记集

    # 1. 名词  (1个一类,7个二类,5个三类)

    名词分为以下子类:

    n 名词            nr 人名           nr1 汉语姓氏       nr2 汉语名字

    nrj 日语人名       nrf 音译人名       ns 地名           nsf 音译地名

    nt 机构团体名      nz 其它专名        nl 名词性惯用语    ng 名词性语素

    nw 新词

    # 2. 时间词(1个一类,1个二类)

    t 时间词                   tg 时间词性语素

    # 3. 处所词(1个一类)

    s 处所词

    # 4. 方位词(1个一类)

    f 方位词

    # 5. 动词(1个一类,9个二类)

    v 动词            vd 副动词         vn 名动词         vshi 动词“是”

    vyou 动词“有”     vf 趋向动词        vx 形式动词        vi 不及物动词(内动词)

    vl 动词性惯用语    vg 动词性语素

    # 6. 形容词(1个一类,4个二类)

    a 形容词          ad 副形词      an 名形词    ag 形容词性语素    al 形容词性惯用语

    # 7. 区别词(1个一类,2个二类)

    b 区别词          bl 区别词性惯用语

    # 8. 状态词(1个一类)

    z 状态词

    # 9. 代词(1个一类,4个二类,6个三类)

    r 代词            rr 人称代词                 rz 指示代词        rzt 时间指示代词  

    rzs 处所指示代词   rzv 谓词性指示代词          ry 疑问代词        ryt 时间疑问代词

    rys 处所疑问代词   ryv 谓词性疑问代词          rg 代词性语素

    # 10. 数词(1个一类,1个二类)

    m 数词            mq 数量词

    # 11. 量词(1个一类,2个二类)

    q 量词            qv 动量词                  qt 时量词

    # 12. 副词(1个一类)

    d 副词

    # 13. 介词(1个一类,2个二类)

    p 介词            pba 介词“把”               pbei 介词“被”

    # 14. 连词(1个一类,1个二类)

    c 连词            cc 并列连词

    # 15. 助词(1个一类,15个二类)

    u 助词            uzhe 着           ule 了 喽         uguo 过           ude1 的 底

    ude2 地           ude3 得           usuo 所           udeng 等 等等 云云

    uyy 一样 一般 似的 般                udh 的话          uls 来讲 来说 而言 说来

    uzhi 之           ulian 连 (“连小学生都会”)

    # 16. 叹词(1个一类)

    e 叹词

    # 17. 语气词(1个一类)

    y 语气词(delete yg)

    # 18. 拟声词(1个一类)

    o 拟声词

    # 19. 前缀(1个一类)

    h 前缀

    # 20. 后缀(1个一类)

    k 后缀

    # 21. 字符串(1个一类,2个二类)

    x 字符串          xx 非语素字                xu 网址URL

    # 22. 标点符号(1个一类,16个二类)

    w 标点符号                

    wkz 左括号,全角:( 〔  [  {  《 【  〖〈   半角:( [ { <

    wky 右括号,全角:) 〕  ] } 》  】 〗 〉 半角: ) ] { >

    wyz 左引号,全角:“ ‘ 『                      wyy 右引号,全角:” ’ 』

    wj 句号,全角:。           ww 问号,全角:? 半角:?    wt 叹号,全角:! 半角:!

    wd 逗号,全角:, 半角:,    wf 分号,全角:; 半角: ;   wn 顿号,全角:、

    wm 冒号,全角:: 半角: :   ws 省略号,全角:……  …

    wp 破折号,全角:——   --   ——-   半角:---  ----

    wb 百分号千分号,全角:% ‰   半角:%

    wh 单位符号,全角:¥ $ £  °  ℃  半角:$

    北大标记集

    还增加了一类词:un(未知词),表示不可识别词及用户自定义词组。取英文unknown前两个字母,参考CSW分词中的定义。

    坑爹的是我分完的结果竟然都是un,肿么办,哭死!!

    今天发现un出现的原因是因为添加了词典,只要是词典中添加的词,词性标注均为un,再想办法搞定这个大词条词性标注的问题吧。

    找到的针对上一问题的解决方法了,就是在添加词典的时候将词典中词条的词性标记出来,这样就不会显示出来都是un了。

  • 相关阅读:
    Oracle 用 sqlprompt 修改 sqlplus 提示符
    Oracle cursor pin S wait on X 等待事件 说明
    Oracle 利用 rowid 提升 update 性能
    Oracle 从缓存里面查找真实的执行计划
    Linux 进程状态 说明
    Oracle 用户 对 表空间 配额(quota ) 说明
    Upon startup of Linux database get ORA27102: out of memory LinuxX86_64 Error: 28: No space left on device
    异常宕机 Ora00600 [Kccpb_sanity_check_2] 错误解决方法
    Oracle ORA04031 错误 说明
    Oracle Shared pool 详解
  • 原文地址:https://www.cnblogs.com/zidiancao/p/3557971.html
Copyright © 2011-2022 走看看