基于python3.6,lt,3.4.0语义角色标注中遇到的两个问题

问题一

pyltp RuntimeError: incompatible native format - size of long
出现这个问题是因为3.4.0 版本 SRL模型 pisrl.model 如在windows系统下不可用,需要重新下载支持windows的语义角色标注模型。链接: http://ltp.ai/download.html.
在这里插入图片描述
在这里插入图片描述
文件夹中的pisrl.model不可用,需要使用pisrl_win.model

问题2

Boost.Python.ArgumentError: Python argument types in
SementicRoleLabeller.label(SementicRoleLabeller, VectorOfString, VectorOfString, VectorOfString, VectorOfParseResult)
did not match C++ signature:

在这里插入图片描述
参考https://www.pianshen.com/article/4056357321/后发现是Boost安装与配置的问题。

解决办法
去这个链接:https://pan.baidu.com/s/1k8L6lzjv-u1ARU4ZiEMo8w.下载解压安装boost,提取码为 fv8w

下载解压后文件夹下有个bootstrap.bat文件:
在这里插入图片描述
使用命令行,cd进入该文件夹根目录,运行bootstrap.bat文件,我遇到这个问题然后重新安装才好:
在这里插入图片描述

在这里插入图片描述运行完之后文件夹中多了一个bjam.exe文件,然后使用命令运行bjam.exe(运行该文件时可以设置参数,只安装自己想要的库,但是如果硬盘空间足够大,不设置参数直接全部安装也可以)
在这里插入图片描述
安装成功后需要设置一下环境变量:
在这里插入图片描述
在这里插入图片描述

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
以下是一个简单的利用语义角色标注抽取语义三元组的 Python 代码: ```python import jieba.posseg as pseg import pyltp # 加载 LTP 模型 segmentor = pyltp.Segmentor() segmentor.load('ltp_data_v3.4.0/cws.model') postagger = pyltp.Postagger() postagger.load('ltp_data_v3.4.0/pos.model') parser = pyltp.Parser() parser.load('ltp_data_v3.4.0/parser.model') labeller = pyltp.SementicRoleLabeller() labeller.load('ltp_data_v3.4.0/pisrl_win.model') # 定义抽取函数 def extract_triples(sentence): words = segmentor.segment(sentence) postags = postagger.postag(words) arcs = parser.parse(words, postags) roles = labeller.label(words, postags, arcs) triples = [] for role in roles: triple = [] for arg in role.arguments: if 'A' in arg.type: triple.append((arg.name, 'A', words[arg.range.start])) if 'ADV' in arg.type: triple.append((arg.name, 'ADV', words[arg.range.start])) if 'CMP' in arg.type: triple.append((arg.name, 'CMP', words[arg.range.start]]) if 'COO' in arg.type: triple.append((arg.name, 'COO', words[arg.range.start])) if 'POO' in arg.type: triple.append((arg.name, 'POO', words[arg.range.start])) if 'TMP' in arg.type: triple.append((arg.name, 'TMP', words[arg.range.start])) if 'LOC' in arg.type: triple.append((arg.name, 'LOC', words[arg.range.start])) if triple: triples.append(triple) return triples # 测试 sentence = '我想买一本Python编程的书' triples = extract_triples(sentence) print(triples) # 释放模型 segmentor.release() postagger.release() parser.release() labeller.release() ``` 这个代码使用了 LTP(Language Technology Platform)语义角色标注模型,可以抽取语义三元组。具体来说,它首先使用分词模型将句子分成词语,然后使用词性标注模型标注每个词语的词性,接着使用依存句法分析模型分析每个词语之间的依存关系,最后使用语义角色标注模型抽取每个谓词的语义角色,并将其转化为三元组。
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值