精华内容
下载资源
问答
  • 哈工大LTP
    2020-06-02 17:46:12

    哈工大的ltp机器学习python版本很多,现在用java版本实现以下,网上有很多的方法是需要自己编译,我这边编译完成了

    model下载:
    链接: https://pan.baidu.com/s/1HDaZpsrPHDcu8P15ho41VQ 提取码: dw9x
    ltp编译后的文件:
    https://download.csdn.net/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判断是否为企业团体
    	 * @param postagger
    	 * @param segmentor
    	 * @param content 内容
    	 * @return
    	 */
    	public static Boolean isCorporateGroups(Postagger postagger, Segmentor segmentor,NER ner,String content){
    		Boolean isGroups=false;
    		List<String> words = new ArrayList<String>();
    		List<String> tags = new ArrayList<String>();
    		List<String> ners = new ArrayList<String>();
    		segmentor.segment(content, words);
    		List<String> postags = new ArrayList<String>();
    		int size = postagger.postag(words,postags);
    		for (int i = 0; i < size; i++) {
    			tags.add(postags.get(i));
    		}
    		ner.recognize(words, tags, ners);
    		for (int i = 0; i < words.size(); i++) {
    			System.out.println(words.get(i)+"/"+ners.get(i));
    		}
    		if (ners.contains("E-Ni")){
    			isGroups=true;
    			return isGroups;
    		}
    		return isGroups;
    	}
    
    	/**
    	 * 判断一句话中是否存在公检法,先使用segmentor将内容分词,使用postagger判断是否为公检法
    	 * @param postagger
    	 * @param segmentor
    	 * @param content 内容
    	 * @return
    	 */
    	public static Boolean isAbbreviation(Postagger postagger, Segmentor segmentor,String content){
    //		List<String> words = new ArrayList<String>();
    //		segmentor.segment(content, words);
    		List<String> list = new ArrayList<>();
    		list.add(content);
    		List<String> postags = new ArrayList<String>();
    		int size = postagger.postag(list,postags);
    		boolean isGovernment=false;
    		for (int i = 0; i < size; i++) {
    			if (postags.get(i).equals(GOVERNMENT)){
    				isGovernment=true;
    				break;
    			}
    		}
    		return isGovernment;
    	}
    
    	/**
    	 * 判断一句话中是否存在人名,先使用segmentor将内容分词,使用postagger判断是否为人名
    	 * @param postagger
    	 * @param segmentor
    	 * @param content 内容
    	 * @return
    	 */
    	public static Boolean isPersonName(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 isPersonName=false;
    		for (int i = 0; i < size; i++) {
    			if (postags.get(i).equals(PERSONNAME_C)){
    				isPersonName=true;
    				break;
    			}
    		}
    		return isPersonName;
    	}
    
    	/**
    	 * 识别地名,返回地名所占比例
    	 * @param words 字段内容
    	 * @return
    	 */
    	public static double identificationAddress( Postagger postagger,Segmentor segmentor,List<String> words){
    		int n=0;
    		for (int i = 0; i < words.size(); i++) {
    			String s = words.get(i);
    			Boolean address = isAddress(postagger, segmentor, s);
    			if (address){
    				n+=1;
    			}
    		}
    		double proportion = new BigDecimal((float)n/words.size()).setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue();
    		return proportion;
    	}
    	/**
    	 * 识别人名,返回人名所占比例
    	 * @param words 字段内容
    	 * @return
    	 */
    	public static double identificationPersonName( Postagger postagger,Segmentor segmentor,List<String> words){
    		int n=0;
    		for (int i = 0; i < words.size(); i++) {
    			String s = words.get(i);
    			Boolean address = isPersonName(postagger, segmentor, s);
    			if (address){
    				n+=1;
    			}
    		}
    		double proportion = new BigDecimal((float)n/words.size()).setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue();
    		return proportion;
    	}
    
    	/**
    	 * 识别企业团体,返回企业团体所占比例
    	 * @param words 字段内容
    	 * @return
    	 */
    	public static double identificationGroups( Postagger postagger,Segmentor segmentor,NER ner,List<String> words){
    		int n=0;
    		for (int i = 0; i < words.size(); i++) {
    			String s = words.get(i);
    			Boolean groups = isCorporateGroups(postagger, segmentor, ner,s);
    			if (groups){
    				n+=1;
    			}
    		}
    		double proportion = new BigDecimal((float)n/words.size()).setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue();
    		return proportion;
    	}
    	/**
    	 * 识别公检法,返回公检法所占比例
    	 * @param words 字段内容
    	 * @return
    	 */
    	public static double identificationGovernment( Postagger postagger,Segmentor segmentor,List<String> words){
    		int n=0;
    		for (int i = 0; i < words.size(); i++) {
    			String s = words.get(i);
    			Boolean groups = isAbbreviation(postagger, segmentor, s);
    			if (groups){
    				n+=1;
    			}
    		}
    		double proportion = new BigDecimal((float)n/words.size()).setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue();
    		return proportion;
    	}
    
    	public static void main(String[] args) {
    		/*System.load("D:\\test\\ltp\\ltp4j-0.1.0-SNAPSHOT.dll");
    		Postagger postagger = new Postagger();
    		Segmentor segmentor = new Segmentor();
    		if (postagger.create("D:\\test\\ltp\\pos.model") < 0) {
    			log.error("pos.model加载失败");
    		}
    		if (segmentor.create("D:\\test\\ltp\\cws.model") < 0) {
    			log.error("load cws.model failed");
    		}
    		List<String> words = new ArrayList<String>();
    		words.add("上海澜海实业有限公司");
    		words.add("上海丰临进出口有限公司");
    		words.add("上海宝钢国际经济贸易有限公司");
    		words.add("上海诚齐机械制造有限公司");
    		double identificationName = Ltp4jUtil.identificationPersonName(postagger,segmentor,words);
    		double identificationAddress = Ltp4jUtil.identificationAddress(postagger,segmentor,words);
    		double identificationGroups = Ltp4jUtil.identificationGroups(postagger,segmentor,words);
    		double identificationGovernment = Ltp4jUtil.identificationGovernment(postagger,segmentor,words);
    		postagger.release();
    		segmentor.release();
    		System.out.println("地点:"+identificationAddress);
    		System.out.println("人名:"+identificationName);
    		System.out.println("企业:"+identificationGroups);
    		System.out.println("公检法:"+identificationGovernment);
    
    */
    		String content="上海丰临进出口有限公司";
    		LoadLibsUtil.addDirToPath("libs");
    		NER ner = new NER();
    		Postagger postagger = new Postagger();
    		Segmentor segmentor = new Segmentor();
    		if (ner.create("D:\\test\\ltp\\ner.model") < 0) {
    			log.error("pos.model加载失败");
    		}
    		if (postagger.create("D:\\test\\ltp\\pos.model") < 0) {
    			log.error("pos.model加载失败");
    		}
    		if (segmentor.create("D:\\test\\ltp\\cws.model") < 0) {
    			log.error("load cws.model failed");
    		}
    
    		Boolean s=isCorporateGroups(postagger,segmentor,ner,content);
    		System.out.println(s);
    
    
    		postagger.release();
    		segmentor.release();
    		ner.release();
    
    	}
    
    }
    
    
    package com.dbapp.database.scanning.util;
    
    import java.lang.reflect.Field;
    
    /**
     * @ClassName: LoadLibsUtil
     * @Author: yongtao.ding on 2020/5/26 9:09
     */
    public class LoadLibsUtil {
    
    	public static void addDirToPath(String s){
    		try {
    			//获取系统path变量对象
    			Field field=ClassLoader.class.getDeclaredField("sys_paths");
    			//设置此变量对象可访问
    			field.setAccessible(true);
    			//获取此变量对象的值
    			String[] path=(String[])field.get(null);
    			//创建字符串数组,在原来的数组长度上增加一个,用于存放增加的目录
    			String[] tem=new String[path.length+1];
    			//将原来的path变量复制到tem中
    			System.arraycopy(path,0,tem,0,path.length);
    			//将增加的目录存入新的变量数组中
    			tem[path.length]=s;
    			//将增加目录后的数组赋给path变量对象
    			field.set(null,tem);
    		} catch (Exception e) {
    			e.printStackTrace();
    		}
    	}
    }
    
    

    关于加载dll:
    代码中

    LoadLibsUtil.addDirToPath("libs");
    

    在这里插入图片描述
    有问题评论,能不能看到随缘~~~~

    更多相关内容
  • 哈工大LTP模型

    2018-08-07 16:26:55
    哈工大ltp代码小结,通过整理汇总得到的几个模型代码
  • 哈工大ltp模型文件(3.4.0)
  • 哈工大ltp动态编译库文件的java调用,包括windows的dll和linux的so以及ltp4j的jar包,基于ltp3.3版本编译而成(目前最新版本3.4的ltp4j代码还没有更新)。
  • 哈工大LTP-Linux下Docker安装及window下安装-简单快捷-附件资源
  • 哈工大LTP的依存分析

    千次阅读 2021-03-21 11:13:35
    pip install ltp 2. 允许代码后报错 Microsoft Visual C++ Redistributable is not installed, this may lead to the DLL load failure. It can be downloaded at ...

    # 可视化

        网址:http://ltp.ai/demo.html

    LTP提供的模型有tiny、small和base。根据安装的LTP版本,模型的版本也需要匹配,否则可能会出现不兼容的情况

    注:web demo运行的是base模型;在线的SDP解码是Graph和Tree混合解码,具体可以看一下4.0.X的源码

     

    # 本地安装(Python版)

        1. pip install ltp

        2. 运行代码后报错

    Microsoft Visual C++ Redistributable is not installed, this may lead to the DLL load failure.
                     It can be downloaded at https://aka.ms/vs/16/release/vc_redist.x64.exe

        3. 根据报错里提供的网址下载 vc_redist.x64.exe 安装即可

        4.1 报错

    AttributeError: 'Version' object has no attribute 'major'

        解决:packaging 包版本太低了,用命令pip install --upgrade packaging 更新 packaging 

        4.2 报错

    KeyError: 'transformer_config'

        解决:模型问题,参见链接 。打开C:\Anaconda3\Lib\site-packages\ltp下的frontend.py文件(4.1.x版本,老版本文件为ltp.py),修改如下(先把模型下载下来,然后修改路径)

    model_map = {
        'base': 'http://39.96.43.154/ltp/v2/base.tgz',
        'small': 'http://39.96.43.154/ltp/v2/small.tgz',
        # 'tiny': 'http://39.96.43.154/ltp/v2/tiny.tgz'
        'tiny': 'w:/ltp/tiny.tgz'
    }

    注意:LTP 4.1.X 与旧版本 v1,v2 模型不兼容[来源],LTP 4.0.X 与 v3 也不兼容

    联网自动下载的模型缓存在 C:\Users\用户名\.cache\torch\ltp

        4.3 报错 

    sdp = ltp.sdp(hidden,graph=False)
    3)TypeError: sdp() got an unexpected keyword argument 'graph'

        解决:4.1.X 没有该参数了,只支持依存图

     

        ## 其他

          除了安装ltp,之前有个版本pyltp,调用接口参数似乎更方便 [链接] [链接] [链接] [链接]

          案例:基于哈工大LTP句子主干提取

     

    # LTP:依存句法分析与语义依存分析的区别

        虽然两者都借用了依存结构,但是依存句法分析与语义依存分析之间具有显著的区别。句法依存按照句法结构功能建立依存关系并为依存结构标注句法关系,更强调介词、助词等对句法结构划分的作用。而语义依存如前所说,注重实词之间语义事实上或逻辑上的关系。而句法的结构往往随着字面词语的变化而不同,相反语义则能够跨越句子表层的变化直达语义的本质 [来源]

        与句法依存分析相比,语义依存分析能表达更深刻的语义信息,对于中文这种意合的语言尤为适合 [来源] 在中文界,最有影响力的标注方案是BH-SDP,由北京语言大学和哈尔滨工业大学联合制定 [来源]

        区别于依存句法分析的树形结构,语义分析结果为一个有向无环图,称为语义依存图(Semantic Dependency Graph)[来源]

        ① 同一说法的不同表述

        虽然三个句子拥有不同的句子结构, 产生了不同的句法分析结果, 但是三个句子中语言单元之间的语义关系并没有发生变化, 从"吃"这个词来看, 它的主体, 客体...都没有发生变化 

    对于表达同一意思的不同结构的句子来说,其依存句法分析的结果是不一样的,但是其语义依存分析的结果是一样的 [链接]

        ② 非实词在句子结构分析中的作用

        第一,句法依存某种程度上更重视非实词(如介词)在句子结构分析中的作用,而语义依存更倾向在具有直接语义关联的实词之间建立直接依存弧,非实词作为辅助标记存在。

        第二,两者依存弧上标记的语义关系完全不同,语义依存关系是由论元关系引申归纳而来,可以用于回答问题,如我在哪里喝汤,我在用什么喝汤。但是句法依存却没有这个能力(或者说句法分析树的结果是间接的,而语义依存图的结果是直接的。

     

    # LTP:语义依存分析(依存树)和语义依存分析(依存图)的区别

        传统的基于转移的依存分析算法,其最终得到得是一个依存树,这对依存分析存在一定限制,因此,最近几年提出的基于转移的语义依存图的解析,对依存分析进行了扩展 [链接]

    与语义依存树不同,在依存图中,每个词的父节点个数是不确定的。这种不确定性使得用基于图的方法解决该问题变得很困难,因此我们选择了基于转移的方法,通过修改现有转移系统中的转移动作来直接生成语义依存图 [来源]

        在语义依存树基础上做了突破,使得对连动、兼语、概念转位等汉语中常见的现象的分析更全面深入 [链接]

        在原来的语义依存树中,受限于树结构,只能刻画出“有”与“儿子”之间的属事(Belg)关系。而在语义依存图中,除了该关系之外,还刻画出了“儿子”与“上”之间的施事(Agt)关系。语义依存图对语义关系更完整的覆盖,为获取句中实词之间的语义关系提供了更方便的工具。例如在“他有个儿子才上小学。”这句话中,如果要回答“谁在上小学”这个问题,语义依存图能够直接提供答案,而语义依存树则不能。 

        语义依存树与语义依存图的主要区别在于,在依存树中,任何一个成分都不能依存于两个或两个以上的成分,而在依存图中则允许句中成分依存于两个或两个以上的成分。且在依存图中允许依存弧之间存在交叉,而依存树中不允许 [链接

        与语义依存树分析相比,语义依存图能更全面、灵活的表示句子中的语义关系 [来源

    问题:为什么上面描述的和LTP在线演示出来的效果不一致

     

    # 嵌套关系

        用来标记一个事件降级充当了另一个事件的成分

    如句子“爷爷看见小孙女在操作计算机”,划线部分为一个降级事件充当动词“看见”的“客事”角色dCont  [来源]

     

    # 附录

        LTP 使用的是863词性标注集

        语义依存分析的标注方案是BH-SDP

        哈工大 LTP 标注文档介绍

     词性标注集pos/tag依存句法分析标注集dep语义依存分析标注集sdp
    LTP863词性标注集BH-DEPBH-SDP
    SpaCy基于Google Universal POS Tag set扩展采用了 ClearNLP 的依存分析标签-
    DDParser百度构建的标注集DuCTB-
    HanLPCTBPKU863UDSDUDSemEval16、DM、PAS、PSD
    stanford corenlpPenn Chinese Treebank Tag Set(CTB没找到说明采用的标注集 [链接]-
    jiebaictclas 兼容的标记法不支持不支持

     

    # 工具学习系列

     

    # 参考资料

        中文语义依存分析语料库

        哈工大SCIR:语言技术平台(LTP)发布新功能:中文语义依存图分析

        哈工大SCIR:中文语义依存分析—通往中文语义理解的一条蹊径

        哈工大SCIR:基于转移的语义依存图分析 (原理

    展开全文
  • LTP(Language Technology Platform) 提供了一系列中文自然语言处理工具,用户可以使用这些工具对于中文文本进行分词、词性标注、句法分析等等工作。 官方教程:...

    LTP(Language Technology Platform) 提供了一系列中文自然语言处理工具,用户可以使用这些工具对于中文文本进行分词、词性标注、句法分析等等工作。
    官方教程:https://github.com/HIT-SCIR/ltp/blob/master/docs/quickstart.rst
    官方文档:http://ltp.ai/docs/appendix.html

    安装

    与pyltp不同,ltp4无需安装繁琐的vc环境,也不用考虑python版本对轮子兼容的问题。
    pip install ltp

    在github源代码中可以发现作者主要使用了Electra预训练模型,并使用了transformers库调用模型。所以在安装pyltp之前我们要确保本机上安装的库与ltp中使用的库版本一致,当然如果本机环境并没有安装相应库,安装ltp时会自动安装。

    • torch>=1.2.0
    • transformers>=4.0.0, <5.0
    • pygtrie>=2.3.0, <2.5

    下载预训练模型参数

    模型下载地址:https://github.com/HIT-SCIR/ltp/blob/master/MODELS.md
    在使用ltp时需要选择适合任务大小的模型,将下载下来的压缩文件解压放入文件夹中即可

    ltp的使用

    加载模型

    ltp = LTP(path='pretrained_model') # 默认加载 Small 模型
    

    path中填入模型参数放入的文件夹

    分句

    sents = ltp.sent_split(["该僵尸网络包含至少35000个被破坏的Windows系统,攻击者和使用者正在秘密使用这些系统来开采Monero加密货币。该僵尸网络名为“ VictoryGate”,自2019年5月以来一直活跃。"])
    print('分句:')
    for sent in sents:
        print(sent)
    

    分词

    sent =[sents[0]]
    print('分词:')
    seg, hidden = ltp.seg(sent)
    print(seg[0])
    

    词性标注

    在这里插入图片描述

    print('词性标注:')
    pos = ltp.pos(hidden)
    print(pos[0])
    

    语义角色标注

    在这里插入图片描述

    print('语义角色标注:')
    srl = ltp.srl(hidden, keep_empty=False)
    print(srl[0])
    

    句法分析

    在这里插入图片描述

    print('句法分析:')
    dep = ltp.dep(hidden)
    print(dep[0])
    

    在这里插入图片描述

    使用语义角色标注构造关系抽取

    通过语义角色标注任务可以将句子中各实体以及其关系表示出来,我们以主谓宾关系为例,构建一个(主,谓,宾)的三元组:

    def srl_AtoA(sent):
        seg, hidden = ltp.seg([sent])
        seg = seg[0]
        srl = ltp.srl(hidden, keep_empty=False)[0]
    
        results = []
        for s in srl:
            key = s[0]
            values = s[1]
            result_A0 = ''
            result_A1 = ''
            for value in values:
                if value[0] == 'A0':
                    result_A0 = ''.join(seg[value[1]:value[2]+1])
                if value[0] == 'A1':
                    result_A1 = ''.join(seg[value[1]:value[2]+1])
            if result_A0 != '' and result_A1 != '':
                results.append((result_A0,seg[key],result_A1))
        print(results)
    

    在这里插入图片描述
    通过词性和语义角色标注构建的三元组可以大致获取到实体与实体之间的联系,但是在实际的任务中我们需要结合需求构造相应的实体与相应的关系(例如在医疗系统中,我们的实体不再是名词这么简单,可能包括药物名称,症状等等,这些需要我们通过命名实体识别构建特定的实体集。)

    通过最后获取的三元组我们便可以轻松的完成知识图谱了。

    展开全文
  • 导入 from pyltp import SentenceSplitter,Segmentor, Postagger, Parser,NamedEntityRecognizer, SementicRoleLabeller SentenceSplitter——————————分句 Segmentor ————————————分词(cws....

    导入

    from pyltp import SentenceSplitter,Segmentor, Postagger, Parser,NamedEntityRecognizer, SementicRoleLabeller
    sentence='小勇硕士毕业于北京语言大学,目前在中科院软件所工作。'
    

    SentenceSplitter——————————分句
    Segmentor ————————————分词(cws.model)
    Postagger—————————————词性标注(pos.model)
    Parser——————————————依存句法分析(parser.model)
    NamedEntityRecognizer——————命名实体识别 (ner.model)
    SementicRoleLabeller———————词义角色标注(pisrl_win.model)

    对应如下五个模型
    在这里插入图片描述

    1.SentenceSplitter 分句

    sents = SentenceSplitter.split('语言是人类区别其他动物的本质特性。在所有生物中,只有人类才具有语言能力。')
    print(type(sents))
    print(list(sents))
    

    输出:

     <class 'pyltp.VectorOfString'>
    ['语言是人类区别其他动物的本质特性。', '在所有生物中,只有人类才具有语言能力。']
    

    2.Segmentor分词(cws.model)

    segmentor = Segmentor()
    segmentor.load("C:/Users/angel/Desktop/text-analysis/model/cws.model")
    words=segmentor.segment(sentence)
    print(type(words))
    words=list(words)
    print(words)
    segmentor.release()
    

    输出:

    <class 'pyltp.VectorOfString'>
    ['小勇', '硕士', '毕业', '于', '北京', '语言', '大学', ',', '目前', '在', '中科院', '软件所', '工作', '。']
    

    3.Postagger词性标注(pos.model)

    postagger=Postagger()
    postagger.load("C:/Users/angel/Desktop/text-analysis/model/pos.model")
    postags=postagger.postag(words)
    print(type(postags))
    postags=list(postags)
    print(postags)
    postagger.release()
    

    输出;

    <class 'pyltp.VectorOfString'>
    ['nh', 'n', 'v', 'p', 'ns', 'n', 'n', 'wp', 'nt', 'p', 'j', 'n', 'v', 'wp']
    

    在这里插入图片描述

    4.Parser依存句法分析(parser.model)

    parser = Parser()
    parser.load("C:/Users/angel/Desktop/text-analysis/model/parser.model")
    arcs=parser.parse(words, postags)
    print(type(arcs))
    for index,i in enumerate(arcs):
        print(words[i.head-1],'\t',words[index],'\t',i.relation)
    parser.release()
    

    arc.head表示依存弧的父节点词的索引。ROOT节点的索引是0,第一个词开始的索引依次为1,2,3…
    arc.relation表示依存弧的关系
    输出:

    <class 'pyltp.VectorOfParseResult'>
    硕士     小勇    ATT
    毕业     硕士    SBV
    。       毕业    HED
    毕业     于      CMP
    大学     北京    ATT
    大学     语言    ATT
    于       大学    POB
    毕业     ,      WP
    工作     目前    ADV
    工作     在      ADV
    软件所   中科院   ATT
    在       软件所  POB
    毕业     工作    COO
    毕业     。      WP
    

    在这里插入图片描述

    5.NamedEntityRecognizer命名实体识别(ner.model)

    recognizer = NamedEntityRecognizer()
    recognizer.load("C:/Users/angel/Desktop/text-analysis/model/ner.model")
    recognize_name=recognizer.recognize(words, postags)
    print(type(recognize_name))
    recognize_name=list(recognize_name)
    print(recognize_name)
    recognizer.release()
    

    输出:

    <class 'pyltp.VectorOfString'>
    ['S-Nh', 'O', 'O', 'O', 'B-Ni', 'I-Ni', 'E-Ni', 'O', 'O', 'O', 'O', 'O', 'O', 'O']
    

    在这里插入图片描述

    6.SementicRoleLabeller词义角色标注(pisrl_win.model)

    labeller = SementicRoleLabeller()
    labeller.load("C:/Users/angel/Desktop/text-analysis/model/pisrl_win.model")
    roles=labeller.label(words, postags, arcs)
    print(type(roles))
    roles_dict = {}
    for role in roles:
        roles_dict = [(arg.name, arg.range.start, arg.range.end) for arg in role.arguments]
    print(roles_dict)
    labeller.release()
    

    输出:

    [dynet] random seed: 1509254310
    [dynet] allocating memory: 2000MB
    [dynet] memory allocation done.
    <class 'pyltp.SementicRoles'>
    [('TMP', 8, 8), ('LOC', 9, 11)]
    

    在这里插入图片描述

    展开全文
  • 哈工大LTP java在Eclipse上编译所需要用到的动态链接库,(.lib和.dll、.exp)64位系统可用
  • 哈工大ltp工具Java接口动态链接库(32位)经过2天的调试,终于成功了,注意:要下载ltp-data模型文件,亲测可用。
  • 哈工大LTP官网模型下载:https://ltp.ai/download.html 安装方法: pip install ltp 案例代码 from ltp import LTP ltp = LTP() # 默认加载 Small 模型,下载的路径是:~/.cache/torch/ltp sentences = "文本,是...
  • 开始使用 参考https://blog.csdn.net/bf02jgtrs00xktcx/article/details/89117451进行使用 如果导入文本不是utf-8格式则会发生以下报错 保存一个utf-8格式的文本 import codecs file = codecs.open("ltp_data/test...
  • 3. 哈工大LTP解析

    2018-12-04 17:09:00
    3. 哈工大LTP解析 1. 前言 哈工大语言技术平台Language Technology Platform(LTP)是哈工大社会计算与信息检索研究中心历时十年开发的一整套中文语言处理系统。LTP制定了基于XML的语言处理结果表示,并在此基础上...
  • 哈工大LTP安装流程(python)

    千次阅读 2020-06-12 17:00:10
    一、LTP安装 1、pip install pyltp 安装过程中会出现错误提示, error: command ‘C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\BIN\x86_amd64\cl.exe’ failed with exit status 2 2、安装pyltp-...
  • from ltp import LTP ltp=LTP() seg,hidden=ltp.seg('他叫汤姆去拿外衣。'] dep=ltp.dep(hidden) print(dep) 输出: [['他', '叫', '汤姆', '去', '拿', '外衣', '。']] [ [ (1, 2, 'SBV'), (2, 0, 'HED'), # 叫 --|...
  • 原文链接:... LTP哈工大语言技术平台云,是基于云计算技术的中文自然语言处理服务平台 在线使用的网址:https://www.ltp-cloud.com/ github网址:https://github.com/
  • 哈工大LTP,在Eclipse上编译所需要用到的动态链接库,(.lib和.dll、.exp)64位系统可用
  • 一:Docker安装 官方文档:http://ltp.ai/docs/install.html ...二:docker build -t ltp/ltp . # 由于网络原因可能中途失败。多执行几次即可。 三:在配置中给docker运行给予足够大的内存。我们这里设置了...
  • 哈工大ltp的使用

    千次阅读 2018-12-06 11:27:35
    使用python版本的ltp pip install pyltp 下载对应版本模型 可以在这里下载 https://pan.baidu.com/share/link?shareid=1988562907&amp;amp;uk=2738088569#list/path=%2F 注意对应版本下载 基本用法 # -...
  • 哈工大LTP初步学习

    千次阅读 2017-07-26 11:13:13
    依存句法分析与语义依存分析的区别http://www.cnblogs.com/CheeseZH/p/5768389.html句法分析树的生成http://blog.csdn.net/jiangjingxuan/article/details/54729440哈工大LTP的本地安装和python调用http:
  • 如下图所对句子“哈尔滨工业大学是一所非常优秀的理工类985高校”分析的结果: ...具体可直接参考哈工大LTP官网,也许会对你有更多启发: 语言技术平台( Language Technology Plantform | LTP ) ...
  • 哈工大ltp安装wheel.rar

    2021-08-24 14:32:07
    哈工大pyltp安装的wheel文件,下载后在下载文件的目录,执行 pip install pyltp-0.2.1-cp36-cp36m-win_amd64.whl
  • 哈工大 LTP

    千次阅读 2018-06-06 17:45:33
    一.LTP事项1.LTP可以做什么? 中文文本进行分词、词性标注、依存句法分析、语义角色标注、语义依存分析。2. 注册:免费注册一个账号 网址:http://www.ltp-cloud.com/accounts/register/二.win10 下pyltp安装指南1....
  • 目录一、LTP介绍二、安装1. 安装pynlp2. 下载模型文件三、python下的功能实现1.代码参考2.结果说明 一、LTP介绍 语言技术平台(LTP) 提供包括中文分词、词性标注、命名实体识别、依存句法分析、语义角色标注等丰富、 ...
  • 哈工大LTP java在Eclipse上编译所需要用到的动态链接库,(.lib和.dll、.exp)64位系统可用
  • 如果是Ubuntu系统,请把m修改为mu即可,通过pip 安装,Linux不需要编译 pyltp-0.2.1-cp35-cp35m-linux_x86_64.whl
  • 哈工大ltp词性列表Tag Description Example a adjective 美丽 b other noun-modifier 大型, 西式 c conjunction 和, 虽然 d adverb 很 e exclamation 哎 g morpheme 茨, 甥 h prefix 阿, 伪 i
  • 通过哈工大LTP离线模拟的动态库和静态库,系统为64位操作系统。看官可以利用该资源直接用。
  • 知识图谱、命名实体识别(NER

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,426
精华内容 570
关键字:

哈工大LTP