说明:以下分析基于python3.6以及macOs 10.12.6
refer: https://pyltp.readthedocs.io/zh_CN/develop/api.html
语料库下载:https://pan.baidu.com/share/link?shareid=1988562907&uk=2738088569#list/path=%2Fltp-models%2F3.4.0
语料库版本:3.4.0
----------------------------------------------------------------------------------------------
1.分词
# -*- coding: utf-8 -*-
import os
sample="我的名字叫做推推"
#分词情况1
from pyltp import Segmentor
#设置一个绝对路径
abs_path="/Users/hqh/nlp/3.4.0/ltp_data_v3.4.0"
cws_path=os.path.join(abs_path,'cws.model')
seg=Segmentor() #生成对象
seg.load(cws_path) #加载分词语料库
words=seg.segment(sample) #开始分词
print(",".join(words)) #输出
#print(list(words))。#以list方式进行输出
seg.release() #释放实例
2.加载外部字典进行分词
sample1="李克强调研同盾科技"
seg=Segmentor() #生成实例对象
lexicon_path=os.path.join(abs_path,"lexicon")
seg.load_with_lexicon(cws_path,lexicon_path)
words_with_lexicon=seg.segment(sample1)
print(list(words_with_lexicon)) #输出['李克强', '调研', '同盾科技'],不加载外部字典,输出['李克强', '调研', '同盾','科技']
seg.release()
3.词性标注
from pyltp import Postagger #对分好的词进行标注,前提是分词
pos=Postagger()
pos_path=os.path.join(abs_path,"pos.model") #加载词性语料库
pos.load(pos_path)
words_pos=pos.postag(words)
print(list(words_pos))
for k,v in zip(words,words_pos):
print(k+'--->'+v)
pos.release()
4.命名实体识别
from pyltp import NamedEntityRecognizer
ner=NamedEntityRecognizer()
ner_path=os.path.join(abs_path,"ner.model") #加载命名实体识别语料库
ner.load(ner_path)
netags=ner.recognize(words,words_pos)
print(list(netags))
5.依存句法分析
from pyltp import Parser
parser=Parser()
parser_path=os.path.join(abs_path,"parser.model")
parser.load(parser_path)
arcs=parser.parse(words,words_pos)
print([(arc.head,arc.relation) for arc in arcs])
parser.release()
6.语义角色标注
from pyltp import SementicRoleLabeller
labeller=SementicRoleLabeller()
labeller_path=os.path.join(abs_path,"pisrl.model") #加载语义角色语料库
labeller.load(labeller_path)
roles=labeller.label(words,words_pos,arcs)
for role in roles:
print(role.index, "".join(
["%s:(%d,%d)" % (arg.name, arg.range.start, arg.range.end) for arg in role.arguments]))
7.调用ltp云平台(https://www.ltp-cloud.com/document/#api_rest_param)
import requests
pattern=['ws','pos','ner','dp','sdp','srl']
def get_ltp_res(url,api_key,text,pattern):
parameters = {
'api_key': api_key,
'text': text,
'pattern': pattern,
'format': 'plain'
}
res = requests.get(url, params=parameters)
print(pattern+'-->'+res.text+"\n")
for ele in pattern:
get_ltp_res('http://api.ltp-cloud.com/analysis','自己申请的key,去平台注册就会发到你的邮箱','我的名字叫做推推',ele)
输出:
ws-->我 的 名字 叫做 推推
pos-->我_r 的_u 名字_n 叫做_v 推推_v
ner-->我 的 名字 叫做 推推
dp-->我_0 名字_2 ATT
的_1 我_0 RAD
名字_2 叫做_3 SBV
叫做_3 -1 HED
推推_4 叫做_3 VOB
sdp-->我_0 名字_2 Poss
的_1 我_0 mAux
名字_2 叫做_3 Exp
叫做_3 -1 Root
推推_4 叫做_3 Clas
srl-->[我 的 名字]A1 [叫做]v [推推]A1
附录:
依存语法 (Dependency Parsing, DP) 通过分析语言单位内成分之间的依存关系揭示其句法结构。 直观来讲,依存句法分析识别句子中的“主谓宾”、“定状补”这些语法成分,并分析各成分之间的关系
关系类型 | Tag | Description | Example |
---|---|---|---|
主谓关系 | SBV | subject-verb | 我送她一束花 (我 <-- 送) |
动宾关系 | VOB | 直接宾语,verb-object | 我送她一束花 (送 --> 花) |
间宾关系 | IOB | 间接宾语,indirect-object | 我送她一束花 (送 --> 她) |
前置宾语 | FOB | 前置宾语,fronting-object | 他什么书都读 (书 <-- 读) |
兼语 | DBL | double | 他请我吃饭 (请 --> 我) |
定中关系 | ATT | attribute | 红苹果 (红 <-- 苹果) |
状中结构 | ADV | adverbial | 非常美丽 (非常 <-- 美丽) |
动补结构 | CMP | complement | 做完了作业 (做 --> 完) |
并列关系 | COO | coordinate | 大山和大海 (大山 --> 大海) |
介宾关系 | POB | preposition-object | 在贸易区内 (在 --> 内) |
左附加关系 | LAD | left adjunct | 大山和大海 (和 <-- 大海) |
右附加关系 | RAD | right adjunct | 孩子们 (孩子 --> 们) |
独立结构 | IS | independent structure | 两个单句在结构上彼此独立 |
标点 | WP | punctuation | 。 |
核心关系 | HED | head | 指整个句子的核心 |
语义角色标注 (Semantic Role Labeling, SRL) 是一种浅层的语义分析技术,标注句子中某些短语为给定谓词的论元 (语义角色) ,如施事、受事、时间和地点等
标记 | 说明 |
ADV | adverbial, default tag ( 附加的,默认标记 ) |
BNE | beneficiary ( 受益人 ) |
CND | condition ( 条件 ) |
DIR | direction ( 方向 ) |
DGR | degree ( 程度 ) |
EXT | extent ( 扩展 ) |
FRQ | frequency ( 频率 ) |
LOC | locative ( 地点 ) |
MNR | manner ( 方式 ) |
PRP | purpose or reason ( 目的或原因 ) |
TMP | temporal ( 时间 ) |
TPC | topic ( 主题 ) |
CRD | coordinated arguments ( 并列参数 ) |
PRD | predicate ( 谓语动词 ) |
PSR | possessor ( 持有者 ) |
PSE | possessee ( 被持有 ) |
分析句子各个语言单位之间的语义关联,并将语义关联以依存结构呈现。 使用语义依存刻画句子语义,好处在于不需要去抽象词汇本身,而是通过词汇所承受的语义框架来描述该词汇,而论元的数目相对词汇来说数量总是少了很多的。语义依存分析目标是跨越句子表层句法结构的束缚,直接获取深层的语义信息
关系类型 | Tag | Description | Example |
---|---|---|---|
施事关系 | Agt | Agent | 我送她一束花 (我 <-- 送) |
当事关系 | Exp | Experiencer | 我跑得快 (跑 --> 我) |
感事关系 | Aft | Affection | 我思念家乡 (思念 --> 我) |
领事关系 | Poss | Possessor | 他有一本好读 (他 <-- 有) |
受事关系 | Pat | Patient | 他打了小明 (打 --> 小明) |
客事关系 | Cont | Content | 他听到鞭炮声 (听 --> 鞭炮声) |
成事关系 | Prod | Product | 他写了本小说 (写 --> 小说) |
源事关系 | Orig | Origin | 我军缴获敌人四辆坦克 (缴获 --> 坦克) |
涉事关系 | Datv | Dative | 他告诉我个秘密 ( 告诉 --> 我 ) |
比较角色 | Comp | Comitative | 他成绩比我好 (他 --> 我) |
属事角色 | Belg | Belongings | 老赵有俩女儿 (老赵 <-- 有) |
类事角色 | Clas | Classification | 他是中学生 (是 --> 中学生) |
依据角色 | Accd | According | 本庭依法宣判 (依法 <-- 宣判) |
缘故角色 | Reas | Reason | 他在愁女儿婚事 (愁 --> 婚事) |
意图角色 | Int | Intention | 为了金牌他拼命努力 (金牌 <-- 努力) |
结局角色 | Cons | Consequence | 他跑了满头大汗 (跑 --> 满头大汗) |
方式角色 | Mann | Manner | 球慢慢滚进空门 (慢慢 <-- 滚) |
工具角色 | Tool | Tool | 她用砂锅熬粥 (砂锅 <-- 熬粥) |
材料角色 | Malt | Material | 她用小米熬粥 (小米 <-- 熬粥) |
时间角色 | Time | Time | 唐朝有个李白 (唐朝 <-- 有) |
空间角色 | Loc | Location | 这房子朝南 (朝 --> 南) |
历程角色 | Proc | Process | 火车正在过长江大桥 (过 --> 大桥) |
趋向角色 | Dir | Direction | 部队奔向南方 (奔 --> 南) |
范围角色 | Sco | Scope | 产品应该比质量 (比 --> 质量) |
数量角色 | Quan | Quantity | 一年有365天 (有 --> 天) |
数量数组 | Qp | Quantity-phrase | 三本书 (三 --> 本) |
频率角色 | Freq | Frequency | 他每天看书 (每天 <-- 看) |
顺序角色 | Seq | Sequence | 他跑第一 (跑 --> 第一) |
描写角色 | Desc(Feat) | Description | 他长得胖 (长 --> 胖) |
宿主角色 | Host | Host | 住房面积 (住房 <-- 面积) |
名字修饰角色 | Nmod | Name-modifier | 果戈里大街 (果戈里 <-- 大街) |
时间修饰角色 | Tmod | Time-modifier | 星期一上午 (星期一 <-- 上午) |
反角色 | r + main role | 打篮球的小姑娘 (打篮球 <-- 姑娘) | |
嵌套角色 | d + main role | 爷爷看见孙子在跑 (看见 --> 跑) | |
并列关系 | eCoo | event Coordination | 我喜欢唱歌和跳舞 (唱歌 --> 跳舞) |
选择关系 | eSelt | event Selection | 您是喝茶还是喝咖啡 (茶 --> 咖啡) |
等同关系 | eEqu | event Equivalent | 他们三个人一起走 (他们 --> 三个人) |
先行关系 | ePrec | event Precedent | 首先,先 |
顺承关系 | eSucc | event Successor | 随后,然后 |
递进关系 | eProg | event Progression | 况且,并且 |
转折关系 | eAdvt | event adversative | 却,然而 |
原因关系 | eCau | event Cause | 因为,既然 |
结果关系 | eResu | event Result | 因此,以致 |
推论关系 | eInf | event Inference | 才,则 |
条件关系 | eCond | event Condition | 只要,除非 |
假设关系 | eSupp | event Supposition | 如果,要是 |
让步关系 | eConc | event Concession | 纵使,哪怕 |
手段关系 | eMetd | event Method | |
目的关系 | ePurp | event Purpose | 为了,以便 |
割舍关系 | eAban | event Abandonment | 与其,也不 |
选取关系 | ePref | event Preference | 不如,宁愿 |
总括关系 | eSum | event Summary | 总而言之 |
分叙关系 | eRect | event Recount | 例如,比方说 |
连词标记 | mConj | Recount Marker | 和,或 |
的字标记 | mAux | Auxiliary | 的,地,得 |
介词标记 | mPrep | Preposition | 把,被 |
语气标记 | mTone | Tone | 吗,呢 |
时间标记 | mTime | Time | 才,曾经 |
范围标记 | mRang | Range | 都,到处 |
程度标记 | mDegr | Degree | 很,稍微 |
频率标记 | mFreq | Frequency Marker | 再,常常 |
趋向标记 | mDir | Direction Marker | 上去,下来 |
插入语标记 | mPars | Parenthesis Marker | 总的来说,众所周知 |
否定标记 | mNeg | Negation Marker | 不,没,未 |
情态标记 | mMod | Modal Marker | 幸亏,会,能 |
标点标记 | mPunc | Punctuation Marker | ,。! |
重复标记 | mPept | Repetition Marker | 走啊走 (走 --> 走) |
多数标记 | mMaj | Majority Marker | 们,等 |
实词虚化标记 | mVain | Vain Marker | |
离合标记 | mSepa | Seperation Marker | 吃了个饭 (吃 --> 饭) 洗了个澡 (洗 --> 澡) |
根节点 | Root | Root | 全句核心节点 |