LTP 4来了!
时间:2022-07-25
本文章向大家介绍LTP 4来了!,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
还在嫌弃pyltp安装失败吗
https://github.com/HIT-SCIR/ltp
快速上手
快速安装
安装LTP是非常简单的,使用Pip安装只需要:
.. code-block:: sh
pip install ltp
载入模型
默认支持下载,只需要输入名字即可
from ltp import LTP
ltp = LTP() # 默认加载 Small 模型
# ltp = LTP(path = "base|small|tiny")
# ltp = LTP(path = "tiny.tgz|tiny-tgz-extracted") # 其中 tiny-tgz-extracted 是 tiny.tgz 解压出来的文件夹
分句
使用LTP分句只需要调用ltp.sent_split函数
from ltp import LTP
ltp = LTP()
sents = ltp.sent_split(["他叫汤姆去拿外衣。", "汤姆生病了。他去了医院。"])
# [
# "他叫汤姆去拿外衣。",
# "汤姆生病了。",
# "他去了医院。"
# ]
用户自定义词典
# user_dict.txt
负重前行
长江大桥
.. code-block:: python
from ltp import LTP
ltp = LTP()
# user_dict.txt 是词典文件, max_window是最大前向分词窗口
ltp.init_dict(path="user_dict.txt", max_window=4)
# 也可以在代码中添加自定义的词语
ltp.add_words(words=["负重前行", "长江大桥"], max_window=4)
分词
使用LTP分词非常简单,下面是一个简短的例子:
from ltp import LTP
ltp = LTP()
segment, _ = ltp.seg(["他叫汤姆去拿外衣。"])
# [['他', '叫', '汤姆', '去', '拿', '外衣', '。']]
# 对于已经分词的数据
segment, hidden = ltp.seg(["他/叫/汤姆/去/拿/外衣/。".split('/')])
词性标注
from ltp import LTP
ltp = LTP()
seg, hidden = ltp.seg(["他叫汤姆去拿外衣。"])
pos = ltp.pos(hidden)
# [['他', '叫', '汤姆', '去', '拿', '外衣', '。']]
# [['r', 'v', 'nh', 'v', 'v', 'n', 'wp']]
命名实体识别
from ltp import LTP
ltp = LTP()
seg, hidden = ltp.seg(["他叫汤姆去拿外衣。"])
ner = ltp.ner(hidden)
# [['他', '叫', '汤姆', '去', '拿', '外衣', '。']]
# [[('Nh', 2, 2)]]
tag, start, end = ner[0][0]
print(tag,":", "".join(seg[0][start:end + 1]))]
# Nh : 汤姆
语义角色标注
from ltp import LTP
ltp = LTP()
seg, hidden = ltp.seg(["他叫汤姆去拿外衣。"])
srl = ltp.srl(hidden)
# [['他', '叫', '汤姆', '去', '拿', '外衣', '。']]
# [
# [
# [], # 他
# [('ARG0', 0, 0), ('ARG1', 2, 2), ('ARG2', 3, 5)], # 叫 -> [ARG0: 他, ARG1: 汤姆, ARG2: 拿外衣]
# [], # 汤姆
# [], # 去
# [('ARG0', 2, 2), ('ARG1', 5, 5)], # 拿 -> [ARG0: 汤姆, ARG1: 外衣]
# [], # 外衣
# [] # 。
# ]
# ]
srl = ltp.srl(hidden, keep_empty=False)
# [
# [
# (1, [('ARG0', 0, 0), ('ARG1', 2, 2), ('ARG2', 3, 5)]), # 叫 -> [ARG0: 他, ARG1: 汤姆, ARG2: 拿外衣]
# (4, [('ARG0', 2, 2), ('ARG1', 5, 5)]) # 拿 -> [ARG0: 汤姆, ARG1: 外衣]
# ]
# ]
依存句法分析
需要注意的是,在依存句法当中,虚节点ROOT占据了0位置,因此节点的下标从1开始。
from ltp import LTP
ltp = LTP()
seg, hidden = ltp.seg(["他叫汤姆去拿外衣。"])
dep = ltp.dep(hidden)
# [['他', '叫', '汤姆', '去', '拿', '外衣', '。']]
# [
# [
# (1, 2, 'SBV'),
# (2, 0, 'HED'), # 叫 --|HED|--> ROOT
# (3, 2, 'DBL'),
# (4, 2, 'VOB'),
# (5, 4, 'COO'),
# (6, 5, 'VOB'),
# (7, 2, 'WP')
# ]
# ]
语义依存分析(树)
与依存句法类似的,这里的下标也是从1开始。
from ltp import LTP
ltp = LTP()
seg, hidden = ltp.seg(["他叫汤姆去拿外衣。"])
sdp = ltp.sdp(hidden, graph=False)
# [['他', '叫', '汤姆', '去', '拿', '外衣', '。']]
# [
# [
# (1, 2, 'Agt'),
# (2, 0, 'Root'), # 叫 --|Root|--> ROOT
# (3, 2, 'Datv'),
# (4, 2, 'eEfft'),
# (5, 4, 'eEfft'),
# (6, 5, 'Pat'),
# (7, 2, 'mPunc')
# ]
# ]
语义依存分析(图)
与依存句法类似的,这里的下标也是从1开始。
from ltp import LTP
ltp = LTP()
seg, hidden = ltp.seg(["他叫汤姆去拿外衣。"])
sdp = ltp.sdp(hidden, graph=True)
# [['他', '叫', '汤姆', '去', '拿', '外衣', '。']]
# [
# [
# (1, 2, 'Agt'),
# (2, 0, 'Root'), # 叫 --|Root|--> ROOT
# (3, 2, 'Datv'),
# (3, 4, 'Agt'),
# (3, 5, 'Agt'),
# (4, 2, 'eEfft'),
# (5, 4, 'eEfft'),
# (6, 5, 'Pat'),
# (7, 2, 'mPunc')
# ]
# ]
LTP Server
LTP Server 是对 LTP 的一个简单包装,依赖于 tornado,使用方式如下:
pip install ltp, tornado
python utils/server.py serve
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 指定 ASP.NET Core 应用监听的端口
- 发布 Angular 应用至生产环境
- 在 NHibernate 中使用 Snow Flake ID
- 在 Angular 应用中创建包含组件
- PostgreSQL 数据库中的窗口函数
- 代码整洁的 JavaScript
- Script 标记的 defer 和 async 属性说明
- 百行代码轻松爬取视频
- WebLogic coherence UniversalExtractor 反序列化 (CVE-2020-14645) 漏洞分析
- equals和hashCode你学会了么?
- 15 张精美动图全面讲解 CORS
- Rasa X 安装之Docker Compose 模式
- 使用Vue写个首页,原来这么简单
- 5分钟内搭建你的第一个Python聊天机器人
- dotnet 获取进程命令行参数的工具