您的当前位置:首页icon2

icon2

2024-12-10 来源:哗拓教育
image.png image.png image.png image.png

LTP4J在win 32环境下编译过程

准备工作

  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. 创建一个类文件:这里测试一下分词的接口调用。其他的自行测试。

    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();
      }
    }
    

  5. 工程目录结构如图:

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


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


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

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

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


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

显示全文