美文网首页KG
pyltp - 哈工大语言云python接口使用说明

pyltp - 哈工大语言云python接口使用说明

作者: xiiao蜗牛 | 来源:发表于2017-07-11 18:52 被阅读5811次

    pyltp安装及模型下载

    可以使用pip直接安装,如果安装失败,建议下载源码进行手动编译。

    pip install pyltp
    

    安装pyltp后,下载模型文件,百度云地址在
    我下载的是ltp-data-v3.3.1.tar.bz2。然后将下载到的模型解压,存放在任意地方。
    注意:版本对应

    • pyltp版本:0.1.9
    • LTP版本:3.3.2
    • 模型版本:3.3.1

    上面两步都完成后,我们就可以使用pyltp进行一些文本操作了,例如:分句,分词,词性标注,命名实体识别以及依存句法等。

    pyltp语言云的使用

    分句 - SentenceSplitter

    from pyltp import SentenceSplitter
    sentence = SentenceSplitter.split('我是逗号,我是句号。我是问号?我是感叹号!')
    print '\n'.join(sentence)
    

    分句结果如下:

    我是逗号,我是句号。
    我是问号?
    我是感叹号!
    

    分词 - Segmentor

    import os
    LTP_DATA_DIR = '/path/to/your/ltp_data'  # ltp模型目录的路径
    cws_model_path = os.path.join(LTP_DATA_DIR, 'cws.model')  # 分词模型路径,模型名称为`cws.model`
    
    from pyltp import Segmentor
    segmentor = Segmentor()  # 初始化实例
    segmentor.load(cws_model_path)  # 加载模型
    words = segmentor.segment('欧几里得是西元前三世纪的希腊数学家。')  # 分词
    print ' '.join(words)
    segmentor.release()  # 释放模型
    

    分词结果如下,【欧几里得】被拆成了四个单独的字。

    欧 几 里 得 是 西元前 三 世纪 的 希腊 数学家 。
    

    pyltp分词支持用户使用自定义词典。分词外部词典本身是一个文本文件,每行指定一个词,编码须为 UTF-8,样例如下所示:

    欧几里得
    亚里士多德
    

    使用自定义词典进行分词的模型加载方式如下:

    segmentor = Segmentor()  # 初始化实例
    segmentor.load_with_lexicon(cws_model_path, '/path/to/your/lexicon') # 加载模型,参数lexicon是自定义词典的文件路径
    words = segmentor.segment('欧几里得是西元前三世纪的希腊数学家。')
    print ' '.join(words)
    segmentor.release()
    

    自定义词典,分词结果如下,分词效果明显得到改善。

    欧几里得 是 西元前 三 世纪 的 希腊 数学家 。
    

    词性标注 - Postagger

    pos_model_path = os.path.join(LTP_DATA_DIR, 'pos.model')  # 词性标注模型路径,模型名称为`pos.model`
    
    from pyltp import Postagger
    postagger = Postagger() # 初始化实例
    postagger.load(pos_model_path)  # 加载模型
    
    words = ['欧几里得', '是', '西元前', '三', '世纪', '的', '希腊', '数学家', '。']
    postags = postagger.postag(words)  # 词性标注
    
    print ' '.join(postags)
    postagger.release()  # 释放模型
    

    词性标注结果如下,如果想了解更多的词性含义。请参考语言云词性标注简介

    nh v nt m n u ns n wp
    # 欧几里得 - nh - 人名
    # 是 - v - 动词
    # 西元前 - nt - 时间名词
    # 三 - m - 数字
    # 世纪 - n - 普通名词
    # 的 - u - 助词
    # 希腊 - ns - 地理名词
    # 数学家- n - 普通名词
    # 。 - wp - 标点符号
    

    命名实体识别 - NamedEntityRecognizer

    ner_model_path = os.path.join(LTP_DATA_DIR, 'ner.model')  # 命名实体识别模型路径,模型名称为`ner.model`
    
    from pyltp import NamedEntityRecognizer
    recognizer = NamedEntityRecognizer() # 初始化实例
    recognizer.load(ner_model_path)  # 加载模型
    
    words = ['欧几里得', '是', '西元前', '三', '世纪', '的', '希腊', '数学家', '。']
    postags = ['nh', 'v', 'nt', 'm', 'n', 'u', 'ns', 'n', 'wp']
    nertags = recognizer.recognize(words, postags)  # 命名实体识别
    
    print ' '.join(nertags)
    recognizer.release()  # 释放模型
    

    命名实体结果如下,ltp命名实体类型为:人名(Nh),地名(NS),机构名(Ni);ltp采用BIESO标注体系。B表示实体开始词,I表示实体中间词,E表示实体结束词,S表示单独成实体,O表示不构成实体。

    S-Nh O O O O O S-Ns O O
    # 欧几里得 - S-Nh - 人名
    # 希腊 - S-Ns - 地名
    

    依存句法分析 - Parser

    par_model_path = os.path.join(LTP_DATA_DIR, 'parser.model')  # 依存句法分析模型路径,模型名称为`parser.model`
    
    from pyltp import Parser
    parser = Parser() # 初始化实例
    parser.load(par_model_path)  # 加载模型
    
    words = ['欧几里得', '是', '西元前', '三', '世纪', '的', '希腊', '数学家', '。']
    postags = ['nh', 'v', 'nt', 'm', 'n', 'u', 'ns', 'n', 'wp']
    arcs = parser.parse(words, postags)  # 句法分析
    
    rely_id = [arc.head for arc in arcs]    # 提取依存父节点id
    relation = [arc.relation for arc in arcs]   # 提取依存关系
    heads = ['Root' if id == 0 else words[id-1] for id in rely_id]  # 匹配依存父节点词语
    
    for i in range(len(words)):
        print relation[i] + '(' + words[i] + ', ' + heads[i] + ')'
    
    parser.release()  # 释放模型
    

    依存句法分析,输出结果如下,关于依存句法分析,详细参照语言云依存句法简介

    SBV(欧几里得, 是)
    HED(是, Root)
    ATT(西元前, 世纪)
    ATT(三, 世纪)
    ATT(世纪, 数学家)
    RAD(的, 世纪)
    ATT(希腊, 数学家)
    VOB(数学家, 是)
    WP(。, 是)
    

    相关文章

      网友评论

      • d79526bde12f:请问具体应该如何创建外部词典呢
      • Youndl:您好。我在使用pyltp的外部词典的时候添加的分词有的可以使用,有的失效 您知道是什么原因吗?

      本文标题:pyltp - 哈工大语言云python接口使用说明

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