說明:以下分析基於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 ( 被持有 ) |
三.語義依存分析 (Semantic Dependency Parsing, SDP):
分析句子各個語言單位之間的語義關聯,並將語義關聯以依存結構呈現。 使用語義依存刻畫句子語義,好處在於不需要去抽象詞彙本身,而是通過詞彙所承受的語義框架來描述該詞彙,而論元的數目相對詞彙來說數量總是少了很多的。語義依存分析目標是跨越句子表層句法結構的束縛,直接獲取深層的語義信息
關係類型 | 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 | 全句核心節點 |