• ICTCLAS20160405分词系统调试过程


    一、前期准备:

    1、下载最新版本的资源包:CTCLAS20160405171043_ICTCLAS2016分词系统下载包

    2、下载最新版本的licence:https://github.com/NLPIR-team/NLPIR/tree/master/License

    二、调试程序

    1、将JnaTest_NLPIR工程工程导入到MyEclipse。

    2、修改NLPIR目录

      这个与操作系统有关,在汉语分词20140928lib操作系统目录下。我的是win7 64bit,所以在汉语分词20140928libwin64目录下。写路径的时候注意特殊字符的转义,而且windows路径是反斜杠“”,注意改成形如这样:“E://test//汉语分词20140928//lib//win64//NLPIR”,文件名不加后缀名。

    3、修改Data文件夹目录

      String argu = new File("").getAbsolutePath();  //Data文件夹在工程目录下

      Data文件不在工程目录下,写路径要注意编码问题,我程序设置的系统编码是GBK,但是工程的编码设置的是utf-8,打印出来就能看出来路径中的中文都是乱码,当然会导致无法加载类或者是找不到配置文件。将所有设置编码的地方都设置成一样的编码,保证不会有错。工程的编码可以是utf-8,只要程序中所有地方都引用同一个系统编码就可以。

      我第二次做这个实验鬼抽风般File("").getAbsolutePath();得到的是乱码(没有中文也有乱码)。还是IDE的编码设置等和其他一些编码设置问题,这个我实在是郁闷了。new File("").getAbsolutePath().getBytes("GBK")也许有效~我设置了工程的编码是GBK,但是打开工程文件.project是里面写了utf-8,我不清楚这有没有关系,实在不行,用命令行调试吧。

    三、运行程序

      如果你运气够好,没有出现什么幺蛾子,没有乱改程序,这时程序就可以正常运行了。

      运行结果:

      分词结果为: 据悉/v ,/wd 质检/vn 总局/n 已/d 将/d 最新/a 有关/vn 情况/n 再次/d 通报/v 美方/n ,/wd 要求/v 美方/n 加强/v 对/p 输/v 华/b 玉米/n 的/ude1 产地/n 来源/n 、/wn 运输/vn 及/cc 仓储/vn 等/udeng 环节/n 的/ude1 管/v 控/v 措施/n ,/wd 有效/ad 避免/v 输/v 华/b 玉米/n 被/pbei 未经/d 我国/n 农业部/nt 安全/an 评估/vn 并/cc 批准/v 的/ude1 转基因/n 品系/n 污染/vn 。/wj 
      关键词提取结果是:农业部#评估#仓储#污染#

      如果你像我一样乱改了程序或者运气实在太差,sorry,你可能初始化失败。初始化失败的原因可能有:

      1、licence过期。解决办法是下载最新的licence和修改系统时间。

      2、无法找到Configure.xml。可能你有个地方乱改字符集或者字符集代码。请检查所有设置字符集的地方N遍。我在初始化ICTCLAS_Init时,将new File("").getAbsolutePath().getBytes("字符集")作为参数传递就可以正确运行了。

      3、其他错误请参见错误日志的输出。

    四、分析其他文件

    1、字符流缓冲类输入输出文件

     1 File file = new File("文件路径");
     2 FileReader fileReader = new FileReader(file);
     3 BufferedReader bufferedReader = new BufferedReader(fileReader);
     4 String sInput = bufferedReader.readLine();
     5 File outFile = new File("输出结果路径+输出结果.txt");
     6 FileWriter fileWiter = new FileWriter(outFile);
     7 BufferedWriter bufferedWriter = new BufferedWriter(fileWiter);
     8 while((sInput = bufferedReader.readLine())!=null){
     9  String nativeBytes = null;
    10  try {
    11   nativeBytes = CLibrary.Instance.NLPIR_ParagraphProcess(sInput, 3);
    12   // String nativeStr = new String(nativeBytes, 0,
    13   // nativeBytes.length,"utf-8");
    14   //System.out.println("分词结果为: " + nativeBytes);
    15   System.out.println("分词结果为: "+ transString(nativeBytes, system_charset, "GBK"));
    16   bufferedWriter.write("分词结果为: "+ transString(nativeBytes, system_charset, "GBK"));
    17   bufferedWriter.write("
    ");
    18       int nCountKey = 0;
    19   String nativeByte = CLibrary.Instance.NLPIR_GetKeyWords(sInput, 10,false);
    20       System.out.println("关键词提取结果是:" + nativeByte);
    21   bufferedWriter.write("关键词提取结果是:" + nativeByte);
    22   bufferedWriter.write("
    ");
    23   } catch (Exception ex) {
    24     // TODO Auto-generated catch block
    25     ex.printStackTrace();
    26   }
    27 }            

      记得关闭bufferedWriter。

    2、找一篇文章存为txt格式,进行分词和关键词提取。

      到此为止我终于调试好了分词系统,中英文都很有效。文件也差不多看了,只是.dll里面不知道写了什么。能做到这里我已经很开心了,下篇我将按照说明做hadoop使用分词实例。

  • 相关阅读:
    联表查询用on和where的区别
    了解触发器
    QUIC协议,了解
    SQL Mode
    redis持久化
    Kali Linux渗透测试实战 1.2 环境安装及初始化
    电容降压
    单火取电
    大整数的因子
    最大公约数
  • 原文地址:https://www.cnblogs.com/lyr-notebook/p/5409008.html
Copyright © 2020-2023  润新知