哈尔滨工业大学python_pyltp - 哈工大语言云python接口使用说明

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(。, 是)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值