LTP 4来了!

简介: 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


相关文章
|
网络协议 关系型数据库 数据库
PostgreSQL 数据库实现公网远程连接
PostgreSQL 数据库实现公网远程连接
|
SQL HIVE
Caused by: java.io.IOException: Filesystem closed的处理
org.apache.hadoop.hive.ql.metadata.HiveException: Unable to rename output from: hdfs://nameservice/user/hive/warehouse/om_dw.
3209 0
|
4月前
|
监控 Dubbo Java
dubbo学习三:springboot整合dubbo+zookeeper,并使用dubbo管理界面监控服务是否注册到zookeeper上。
这篇文章详细介绍了如何将Spring Boot与Dubbo和Zookeeper整合,并通过Dubbo管理界面监控服务注册情况。
290 0
dubbo学习三:springboot整合dubbo+zookeeper,并使用dubbo管理界面监控服务是否注册到zookeeper上。
|
机器学习/深度学习 自然语言处理 达摩院
长文本口语语义理解技术系列①:段落分割实践
数智化浪潮下,越来越多的企业开始将现代信息网络作为数据资源的主要载体,并通过网络通信技术进行数据传输;网络作为主要的信息交流和分享的方式,海量不同源的网络信息,使得企业与个人消化信息的成本越来越高。音视频数据作为其中重要的信息来源之一,也随着远程视频会议、在线课堂、直播教学、电话销售等领域有了爆炸性的增长。
3219 0
长文本口语语义理解技术系列①:段落分割实践
|
9月前
|
缓存 监控 负载均衡
系统健康长期“三高”:实现高性能、高可用性和高稳定性的关键要素
大家想必都知道在人类健康领域,我们常常警惕“三高”带来的风险,三高是一个不健康的意思,而在数字化世界中,恰恰相反,系统的高性能、高可用性和高稳定性代表着系统的健康和卓越运行,是一个健康的概念。作为开发者怎么能让我们开发的系统保证长期“三高”,那么本文就来简单讨论一下如何让系统长期维持理想的“三高”标准,以及“三高”在实际业务场景中的真实性,并探索一下在技术负责人角色中使用“三高”来评价系统开发工作的可行性等内容,欢迎大家在评论区留言交流。
431 1
系统健康长期“三高”:实现高性能、高可用性和高稳定性的关键要素
|
9月前
|
存储 编译器 C++
从Proto到C++:探索Protocol Buffers的强大转换机制
从Proto到C++:探索Protocol Buffers的强大转换机制
909 4
|
9月前
|
数据可视化 数据建模
R语言广义加性混合模型(GAMM)分析长沙气象因子、空气污染、PM2.5浓度、显著性检验、逐日变化可视化(下)
R语言广义加性混合模型(GAMM)分析长沙气象因子、空气污染、PM2.5浓度、显著性检验、逐日变化可视化
|
9月前
|
自然语言处理 UED
ROSTCM6软件下载及语义网络分析详细操作教程(附网盘链接)
ROSTCM6软件下载及语义网络分析详细操作教程(附网盘链接)
16144 1
Python 实现语句中提取人名(附代码) | Python工具
Python 实现语句中提取人名(附代码) | Python工具
Python 实现语句中提取人名(附代码) | Python工具
|
监控
构建三维一体立体化监控,看这一篇就够了!
如果你需要搭建一套能够立体化监控你的应用及业务,出现问题及时告警的监控体系,这篇文章应该是你所需要的!
621 0
构建三维一体立体化监控,看这一篇就够了!