当前位置:   article > 正文

自然语言处理(NLP)-第三方库(工具包):LTP(适合中文数据集)【命名实体识别、分词、词性标注、依存句法分析、语义角色标注】_ltp分词

ltp分词

一、安装

使用 pip 安装

pip install pyltp
  • 1
# pip install pyltp -i https://pypi.tuna.tsinghua.edu.cn/simple 可以先下载好whl文件
#LTP语言平台:http://ltp.ai/index.html
#咱们使用的工具包,pyltp:https://pyltp.readthedocs.io/zh_CN/latest/api.html
#LTP附录:https://ltp.readthedocs.io/zh_CN/latest/appendix.html#id3
#安装方法:https://github.com/HIT-SCIR/pyltp
  • 1
  • 2
  • 3
  • 4
  • 5

如果安装过程中,编译出错,可以直接下载 pyltp-0.2.1-cp37-cp37m-win_amd64.whl 文件(cp37表示python3.7),进入文件所在目录,使用以下命令安装。

pip install pyltp-0.2.1-cp37-cp37m-win_amd64.whl
  • 1
PS D:\Workspaces_AI\pyltp3.7\pip install pyltp-0.2.1-cp37-cp37m-win_amd64.whl
Processing d:\workspaces_ai\pyltp3.7\pyltp-0.2.1-cp37-cp37m-win_amd64.whl
Installing collected packages: pyltp
Successfully installed pyltp-0.2.1
PS D:\Workspaces_AI\pyltp3.7>
  • 1
  • 2
  • 3
  • 4
  • 5

二、下载模型文件

http://ltp.ai/download.html

三、标注集合

1、分词标注集

在这里插入图片描述

2、词性标注集

LTP 使用的是863词性标注集,其各个词性含义如下表。
在这里插入图片描述

3、命名实体识别标注集

NE识别模块的标注结果采用O-S-B-I-E标注形式,其含义为
在这里插入图片描述
LTP中的NE 模块识别三种NE,分别如下:
在这里插入图片描述

4、依存句法关系

在这里插入图片描述

5、语义角色类型

在这里插入图片描述

四、使用案例

1、命名实体识别

# -*- coding: utf-8 -*-
import os

LTP_DATA_DIR = './ltp_data_v3.4.0'  # ltp模型目录的路径
cws_model_path = os.path.join(LTP_DATA_DIR, 'cws.model')  # 分词模型路径,模型名称为`cws.model`
pos_model_path = os.path.join(LTP_DATA_DIR, 'pos.model')  # 词性标注模型路径,模型名称为`pos.model`
ner_model_path = os.path.join(LTP_DATA_DIR, 'ner.model')  # 命名实体识别模型路径,模型名称为`ner.model`
par_model_path = os.path.join(LTP_DATA_DIR, 'parser.model')  # 依存句法分析模型路径,模型名称为`parser.model`
srl_model_path = os.path.join(LTP_DATA_DIR, 'srl')  # 语义角色标注模型目录路径,模型目录为`srl`。注意该模型路径是一个目录,而不是一个文件。

from pyltp import SentenceSplitter
from pyltp import Segmentor
from pyltp import Postagger
from pyltp import NamedEntityRecognizer
from pyltp import Parser
from pyltp import SementicRoleLabeller


# 创建停用词表
def stopwordslist(filepath):
    stopwords = [line.strip() for line in open(filepath, 'r', encoding='utf-8').readlines()]
    return stopwords


# 分句,也就是将一片文本分割为独立的句子
def sentence_splitter(sentence):
    sents = SentenceSplitter.split(sentence)  # 分句
    print('\n'.join(sents))


# 分词
def segmentor(sentence):
    segmentor = Segmentor()  # 初始化实例
    segmentor.load(cws_model_path)  # 加载模型
    # segmentor.load_with_lexicon('cws_model_path', 'D:\pyprojects\LTP\ltp_data\dict.txt') #加载模型   使用用户自定义字典的高级分词
    words = segmentor.segment(sentence)  # 分词
    # 默认可以这样输出
    # print('/'.join(words))
    # 可以转换成List 输出
    words_list = list(words)
    segmentor.release()  # 释放模型
    return words_list


# 词性标注
def posttagger(words):
    postagger = Postagger()  # 初始化实例
    postagger.load(pos_model_path)  # 加载模型
    postags = postagger.postag(words)  # 词性标注
    # for word, tag in zip(words, postags):
    #   print(word + '/' + tag)
    postagger.release()  # 释放模型
    return postags


# 命名实体识别
def ner(words, postags):
    recognizer = NamedEntityRecognizer()  # 初始化实例
    recognizer.load(ner_model_path)  # 加载模型
    netags = recognizer.recognize(words, postags)  # 命名实体识别
    # for word, ntag in zip(words, netags):
    #   print(word + '/' + ntag)
    recognizer.release()  # 释放模型
    return netags


if __name__ == "__main__":
    text = '2020QS世界大学排名第64,2020年TIMES综合大学排名62,阿姆斯特丹大学毕业生就业能力排名中全球前150,曾培养出6名诺贝尔奖得主者。是Universitas 21、欧洲首都大学联盟(UNICA)、欧洲大学协会(EUA)以及欧洲研究型大学联盟成员。'
    words = segmentor(text)
    print("分词结果:words = ", words)
    postags = posttagger(words)
    print("词性标注结果:postags = ", postags)
    netags = ner(words, postags)
    print("命名实体识别结果:netags = ", netags)
    entities = ''
    for word, ntag in zip(words, netags):
        print("word = {0}----ntag = {1}".format(word, ntag))
        if (ntag == 'O'):  # 过滤非命名实体
            entities += " "
        else:
            entities += word
    print("entities = {0}".format(entities))
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80
  • 81
  • 82

打印结果:

分词结果:words =  ['2020QS', '世界', '大学', '排名', '第64', ',', '2020年', 'TIMES', '综合', '大学', '排名', '62', ',', '阿姆斯特丹', '大学', '毕业生', '就业', '能力', '排名', '中', '全球', '前', '150', ',', '曾', '培养', '出', '6', '名', '诺贝尔奖', '得主者', '。', '是', 'Universitas', '21', '、', '欧洲', '首都', '大学', '联盟', '(', 'UNICA', ')', '、', '欧洲', '大学', '协会', '(', 'EUA', ')', '以及', '欧洲', '研究型', '大学', '联盟', '成员', '。']
词性标注结果:postags =  <pyltp.VectorOfString object at 0x000001977F5BE390>
命名实体识别结果:netags =  <pyltp.VectorOfString object at 0x000001977F5969F0>
word = 2020QS----ntag = O
word = 世界----ntag = O
word = 大学----ntag = O
word = 排名----ntag = O
word =64----ntag = O
word = ,----ntag = O
word = 2020----ntag = O
word = TIMES----ntag = O
word = 综合----ntag = O
word = 大学----ntag = O
word = 排名----ntag = O
word = 62----ntag = O
word =----ntag = O
word = 阿姆斯特丹----ntag = B-Ni
word = 大学----ntag = E-Ni
word = 毕业生----ntag = O
word = 就业----ntag = O
word = 能力----ntag = O
word = 排名----ntag = O
word =----ntag = O
word = 全球----ntag = O
word =----ntag = O
word = 150----ntag = O
word =----ntag = O
word =----ntag = O
word = 培养----ntag = O
word =----ntag = O
word = 6----ntag = O
word =----ntag = O
word = 诺贝尔奖----ntag = O
word = 得主者----ntag = O
word =----ntag = O
word =----ntag = O
word = Universitas----ntag = O
word = 21----ntag = O
word =----ntag = O
word = 欧洲----ntag = B-Ni
word = 首都----ntag = I-Ni
word = 大学----ntag = I-Ni
word = 联盟----ntag = E-Ni
word =----ntag = O
word = UNICA----ntag = O
word =----ntag = O
word =----ntag = O
word = 欧洲----ntag = B-Ni
word = 大学----ntag = I-Ni
word = 协会----ntag = E-Ni
word =----ntag = O
word = EUA----ntag = O
word =----ntag = O
word = 以及----ntag = O
word = 欧洲----ntag = B-Ni
word = 研究型----ntag = I-Ni
word = 大学----ntag = I-Ni
word = 联盟----ntag = E-Ni
word = 成员----ntag = O
word =----ntag = O
entities =              阿姆斯特丹大学                     欧洲首都大学联盟    欧洲大学协会    欧洲研究型大学联盟  

Process finished with exit code 0
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小蓝xlanll/article/detail/637529
推荐阅读
相关标签
  

闽ICP备14008679号