美文网首页
哈工大语言云:LTP4J在win 32环境下编译过程

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

作者: 时芥蓝 | 来源:发表于2017-03-03 15:34 被阅读220次

    前言: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

    2. project name填写ltp4j,build file那里选择刚才解压的itp4j-master 中的build.xml,点击Finish。

    3. 选中build.xml,右键->Run As -> 2 Ant Build,在 弹出的窗口的导航栏中选择main,第二项的Base Directory点击下方的Browse File System,然后选择LTP4J根目录。最后点击右下角的Run运行。

    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

    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中,这也难怪会报上述错误了。

    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<String> words = new ArrayList<String>();
          int size = Segmentor.segment(sent,words);
      
          for(int i = 0; i<size; i++) {
            System.out.print(words.get(i));
            if(i==size-1) {
              System.out.println();
            } else{  
              System.out.print("\t");
            }
          }
          Segmentor.release();
        }
      }
      

    6. 工程目录结构如图:

    7. 运行,完美分词结果:


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

      传送门


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

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

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


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

    相关文章

      网友评论

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

          本文链接:https://www.haomeiwen.com/subject/ymhrgttx.html