哈工大语言云:LTP4J在win 32环境下编译过程

前言:ltp4j是语言技术平台(Language Technology Platform, LTP)接口的一个Java封装。官网给出了C++源码,要想用java调用,必须编译成java本地接口。 官网给的文档太笼统,遇到错误根本不知道怎么处理。在网上搜的博客,一步一步来还是编译不成功。这里给出在windows环境下编译详细过程,也是自己一点一点解决问题,最终在摸索中编译成功。

准备工作

  1. 源码下载:
    1. LTP源码--------- 下载链接
    2. LTP4J源码--------下载链接
    3. ltp-master.zipltp4j-master.zip解压到当前文件夹
  2. 环境:
    1. 操作系统:windows 7/8/10
    2. JDK版本:1.8+ 32位(低于1.8版本的话,无法运行)
    3. IDEeclipse
    4. Ant:这个一般集成在eclipse中,如果没有请先安装
    5. cmake:下载链接
    6. Visual studio Express 2012:其他版本不知道行不行,最好不要低于这个版本

2. 生成jar文件

  1. 打开eclipse,点击File -> New -> Project -> Java Project from Existing Ant Buildfile,然后next

    哈工大语言云:LTP4J在win 32环境下编译过程_第1张图片
  2. project name填写ltp4j,build file那里选择刚才解压的itp4j-master 中的build.xml,点击Finish。

    哈工大语言云:LTP4J在win 32环境下编译过程_第2张图片
  3. 选中build.xml,右键->Run As -> 2 Ant Build,在 弹出的窗口的导航栏中选择main,第二项的Base Directory点击下方的Browse File System,然后选择LTP4J根目录。最后点击右下角的Run运行。

    哈工大语言云:LTP4J在win 32环境下编译过程_第3张图片
  4. 控制台显示如下,说明build成功.可以打开根目录下面ltp4j-master\output\jar中查看生成的jar文件

    Buildfile: C:\Users\shixu\Documents\work space\ltp4j\build.xml
    clean:
    [delete] Deleting directory C:\Users\shixu\Documents\LTP\ltp4j-master\output
    compile:

    [mkdir] Created dir: C:\Users\shixu\Documents\LTP\ltp4j-master\output\classes
    [javac] C:\Users\shixu\Documents\work space\ltp4j\build.xml:17: warning: 'includeantruntime' was not set, defaulting to build.sysclasspath=last; set to false for repeatable builds
    [javac] Compiling 7 source files to C:\Users\shixu\Documents\LTP\ltp4j-master\output\classes

    jar:

    [mkdir] Created dir: C:\Users\shixu\Documents\LTP\ltp4j-master\output\jar
    [jar] Building jar: C:\Users\shixu\Documents\LTP\ltp4j-master\output\jar\ltp4j.jar

    main:
    BUILD SUCCESSFUL
    Total time: 2 seconds

编译LTP

  1. 构建VC project:

    ltp-master项目文件夹下新建一个名为build的文件夹,使用CMake Gui,在source code中填入项目文件夹,在binaries中填入build文件夹。然后Configure 选择vs 11 2012,点击finish。稍等几秒钟,点击Generate

    查看日志,如果出现如下,说明成功。

    Configuring done

    Generating done

    哈工大语言云:LTP4J在win 32环境下编译过程_第4张图片

  2. 编译:

    进入build文件夹,用vs 2012打开ALL_BUILD.vcxproj在vs的菜单栏中,点击生成->生成解决方法,可以在控制台看到,正在生成。注意要选择Debug模式。(网上很多帖子说的选择Release模式,我开始这么尝试,后来发现在编译ltp4j的时候失败,一直报error link 1181:--.lib输入文件无法打开。后来读了一下ltp4j的配置文件,发现里面默认的路径是到ltplib\Debug中加载lib文件,如下

    ​ ```

    if(WIN32)
        link_directories (${LTP_HOME}/lib/Debug)
    else(WIN32)
        link_directories (${LTP_HOME}/lib)
    endif(WIN32)
    

    如果选择Release,那么生成的库只会在Release中,这也难怪会报上述错误了。

    哈工大语言云:LTP4J在win 32环境下编译过程_第5张图片
  3. 编译生成比较耗时。生成完成之后,可以到ltp-master\lib\Debug看到已经生成库文件。至此LTP的编译已经完成,接下来进行LTP4J的编译。

编译 LTP4J

  1. 配置ltp的安装路径:

    因为jni依赖于ltp编译产生的动态库,所以在编译过程中需要给出ltp的路径。 请修改/path/to/your/ltp4j-project/CMakeLists.txt中的LTP_HOME的值为您的LTP项目的路径(/path/to/your/ltp-project), 对应修改的代码为:set (LTP_HOME "/path/to/your/ltp-project/")

  2. 构建VC project。 在项目文件夹下新建一个名为build的文件夹,使用CMake Gui,在source code中填入项目文件夹,在binaries中填入build文件夹。然后Configure -> Generate。(同上)

  3. 编译:(同上)

  4. 生成完成之后,同样可以到ltp-master\libs\Debug看到已经生成库文件。至此所有编译工作已经完成,是不是觉得很简单呀,哈哈。反正我是试了好多次。接下来重头戏,开始在java 代码中调用。

3. 实战-- java中调用

  1. 打开eclipse,新建java project。

  2. 根目录创建lib文件夹,将ltp4j.jar拷贝至此,然后build path。

  3. 将ltp4j中的libs文件夹中生成的所有动态库、以及原ltp lib文件夹下的splitsnt、segmentor、postagger、ner、parser、srl 6个动态库拷贝到项目根目录

  4. 根目录下面创建model文件夹,拷贝model文件至此,需要下载3.3.1版本的model文件,下载链接 。

  5. 创建一个类文件:这里测试一下分词的接口调用。其他的自行测试。

    package ltp;
    
    import java.util.ArrayList;
    import java.util.List;
    import edu.hit.ir.ltp4j.*;
    public class Test {
      public static void main(String[] args) {
        if(Segmentor.create("model\\cws.model")<0){
          System.err.println("load failed");
          return;
        }
    
        String sent = "我是中国人";
        List words = new ArrayList();
        int size = Segmentor.segment(sent,words);
    
        for(int i = 0; i

  6. 工程目录结构如图:

    哈工大语言云:LTP4J在win 32环境下编译过程_第6张图片
  7. 运行,完美分词结果:

    哈工大语言云:LTP4J在win 32环境下编译过程_第7张图片


  8. 看到这儿 ,可能伸手党表示已经扛不住了。没事儿,我这儿有传送门。打包好的,下载就能用哦

    传送门


    用了一个午休的时间来写,脖子都疼了。

    如果能给你带来一些帮助的话,那我也觉得值啦。

    该休息了。下次见。---


    想起我的阿里简历还没完善,,马上该面试了,神助我!

你可能感兴趣的:(哈工大语言云:LTP4J在win 32环境下编译过程)