哈工大的ltp机器学习python版本很多,现在用java版本实现以下,网上有很多的方法是需要自己编译,我这边编译完成了
model下载:
链接: https://pan.baidu.com/s/1HDaZpsrPHDcu8P15ho41VQ 提取码: dw9x
ltp编译后的文件:
https://download.youkuaiyun.com/download/qq_16613311/12489534
如果不想打赏积分也可以参考进行自己编译:
http://codepub.cn/2015/05/07/Compile-the-Language-Technology-Platform(C++)-and-LTP4J(Java)source-code/
下边是我写的相关类:
package com.dbapp.database.scanning.util;
import edu.hit.ir.ltp4j.NER;
import edu.hit.ir.ltp4j.Postagger;
import edu.hit.ir.ltp4j.Segmentor;
import lombok.extern.slf4j.Slf4j;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.List;
/**
* @ClassName: ltp4jUtil
* 哈工大ltp机器学习引入
* @Author: yongtao.ding on 2020/5/25 16:41
*/
@Slf4j
public class Ltp4jUtil {
//中文地名
public static String ADDRESS_C="ns";
//地名
public static String ADDRESS_L="nl";
//人名
public static String PERSONNAME_C="nh";
//机构团体名
public static String GROUPS_G="ni";
//公检法
public static String GOVERNMENT="j";
/**
* 判断一句话中是否存在地名,先使用segmentor将内容分词,使用postagger判断是否为地名
* @param postagger
* @param segmentor
* @param content 内容
* @return
*/
public static Boolean isAddress(Postagger postagger, Segmentor segmentor,String content){
List<String> words = new ArrayList<String>();
segmentor.segment(content, words);
List<String> postags = new ArrayList<String>();
int size = postagger.postag(words,postags);
boolean isAddress=false;
for (int i = 0; i < size; i++) {
if (postags.get(i).equals(ADDRESS_C)||postags.get(i).equals(ADDRESS_L)){
isAddress=true;
break;
}
}
return isAddress;
}
/**
* 判断一句话中是否存在企业团体,先使用segmentor将内容分词,使用postagger判断是否为企业团体