利用百度的词法分析区分数据
1.目標(biāo)
我以區(qū)分名人數(shù)據(jù)與非名人數(shù)據(jù)為例。何為名人數(shù)據(jù)、非名人數(shù)據(jù) ?
名人數(shù)據(jù):介紹某位名人的一段(一句)話,例如:Raj Babbar,演員,主要作品有《迷宮下的罪惡2》、《天命玩家》、《Bodyguard》等。
非名人數(shù)據(jù):不是介紹某位名人的一段(一句)話,例如:德國ABASAG一向致力於促進(jìn)“企業(yè)資源規(guī)劃系統(tǒng)”(ERP)在中國的發(fā)展。
2.詞法分析運(yùn)用
2.1新建AipNlp
AipNlp是自然語言處理的Python SDK客戶端,為使用自然語言處理的開發(fā)人員提供了一系列的交互方法。
參考如下代碼新建一個(gè)AipNlp:
from aip import AipNlp""" 你的 APPID AK SK """ APP_ID = '你的 App ID' API_KEY = '你的 Api Key' SECRET_KEY = '你的 Secret Key'client = AipNlp(APP_ID, API_KEY, SECRET_KEY)在上面代碼中,常量APP_ID在百度云控制臺中創(chuàng)建,常量API_KEY與SECRET_KEY是在創(chuàng)建完畢應(yīng)用后,系統(tǒng)分配給用戶的,均為字符串,用于標(biāo)識用戶,為訪問做簽名驗(yàn)證,可在AI服務(wù)控制臺中的應(yīng)用列表中查看。
注意:如您以前是百度云的老用戶,其中API_KEY對應(yīng)百度云的“Access Key ID”,SECRET_KEY對應(yīng)百度云的“Access Key Secret”。
2.2配置AipNlp
如果用戶需要配置AipNlp的網(wǎng)絡(luò)請求參數(shù)(一般不需要配置),可以在構(gòu)造AipNlp之后調(diào)用接口設(shè)置參數(shù),目前只支持以下參數(shù):
| setConnectionTimeoutInMillis | 建立連接的超時(shí)時(shí)間(單位:毫秒) |
| setSocketTimeoutInMillis | 通過打開的連接傳輸數(shù)據(jù)的超時(shí)時(shí)間(單位:毫秒) |
2.3接口說明
詞法分析接口向用戶提供分詞、詞性標(biāo)注、專名識別三大功能;能夠識別出文本串中的基本詞匯(分詞),對這些詞匯進(jìn)行重組、標(biāo)注組合后詞匯的詞性,并進(jìn)一步識別出命名實(shí)體。
text = "百度是一家高科技公司"""" 調(diào)用詞法分析 """ client.lexer(text);詞法分析 請求參數(shù)詳情
| text | 是 | string | 待分析文本(目前僅支持GBK編碼),長度不超過65536字節(jié) |
詞法分析 返回?cái)?shù)據(jù)參數(shù)詳情
| text | string | 是 | 原始單條請求文本 |
| items | array(object) | 是 | 詞匯數(shù)組,每個(gè)元素對應(yīng)結(jié)果中的一個(gè)詞 |
| +item | string | 是 | 詞匯的字符串 |
| +ne | string | 是 | 命名實(shí)體類型,命名實(shí)體識別算法使用。詞性標(biāo)注算法中,此項(xiàng)為空串 |
| +pos | string | 是 | 詞性,詞性標(biāo)注算法使用。命名實(shí)體識別算法中,此項(xiàng)為空串 |
| +byte_offset | int | 是 | 在text中的字節(jié)級offset(使用GBK編碼) |
| +byte_length | int | 是 | 字節(jié)級length(使用GBK編碼) |
| +uri | string | 否 | 鏈指到知識庫的URI,只對命名實(shí)體有效。對于非命名實(shí)體和鏈接不到知識庫的命名實(shí)體,此項(xiàng)為空串 |
| +formal | string | 否 | 詞匯的標(biāo)準(zhǔn)化表達(dá),主要針對時(shí)間、數(shù)字單位,沒有歸一化表達(dá)的,此項(xiàng)為空串 |
| +basic_words | array(string) | 是 | 基本詞成分 |
| +loc_details | array(object) | 否 | 地址成分,非必需,僅對地址型命名實(shí)體有效,沒有地址成分的,此項(xiàng)為空數(shù)組。 |
| ++type | string | 是 | 成分類型,如省、市、區(qū)、縣 |
| ++byte_offset | int | 是 | 在item中的字節(jié)級offset(使用GBK編碼) |
| ++byte_length | int | 是 | 字節(jié)級length(使用GBK編碼) |
詞法分析 返回示例
{"status":0,"version":"ver_1_0_1","results":[{"retcode":0,"text":"百度是一家高科技公司","items":[{"byte_length":4,"byte_offset":0,"formal":"","item":"百度","ne":"ORG","pos":"","uri":"","loc_details":[ ],"basic_words":["百度"]},{"byte_length":2,"byte_offset":4,"formal":"","item":"是","ne":"","pos":"v","uri":"","loc_details":[ ],"basic_words":["是"]},{"byte_length":4,"byte_offset":6,"formal":"","item":"一家","ne":"","pos":"m","uri":"","loc_details":[ ],"basic_words":["一","家"]},{"byte_length":6,"byte_offset":10,"formal":"","item":"高科技","ne":"","pos":"n","uri":"","loc_details":[ ],"basic_words":["高","科技"]},{"byte_length":4,"byte_offset":16,"formal":"","item":"公司","ne":"","pos":"n","uri":"","loc_details":[ ],"basic_words":["公司"]}]}] }詞性縮略說明
| n | 普通名詞 | f | 方位名詞 | s | 處所名詞 | t | 時(shí)間名詞 |
| nr | 人名 | ns | 地名 | nt | 機(jī)構(gòu)團(tuán)體名 | nw | 作品名 |
| nz | 其他專名 | v | 普通動(dòng)詞 | vd | 動(dòng)副詞 | vn | 名動(dòng)詞 |
| a | 形容詞 | ad | 副形詞 | an | 名形詞 | d | 副詞 |
| m | 數(shù)量詞 | q | 量詞 | r | 代詞 | p | 介詞 |
| c | 連詞 | u | 助詞 | xc | 其他虛詞 | w | 標(biāo)點(diǎn)符號 |
專名識別縮略詞含義
| PER | 人名 | LOC | 地名 | ORG | 機(jī)構(gòu)名 | TIME | 時(shí)間 |
3.具體代碼實(shí)現(xiàn)
百度提供的詞法分析會將句子進(jìn)行分詞,并進(jìn)行標(biāo)識。例如《迷宮下的罪惡2》、《天命玩家》會被標(biāo)識為作品名,Raj Babbar會標(biāo)識為人名。通過分析名人數(shù)據(jù)可知,名人數(shù)據(jù)中一般包含有人名、地名、作品名、出人日期,我把這些詞匯作為稱為名人數(shù)據(jù)的特征數(shù)據(jù),當(dāng)然名人數(shù)據(jù)中不光有特征數(shù)據(jù)還有像演員、主要、作品、有這樣的非特征數(shù)據(jù)。我依據(jù)名人數(shù)據(jù)特征數(shù)據(jù)在總數(shù)據(jù)(即整句)的占比來判定是否為名人數(shù)據(jù)。
首先創(chuàng)建一個(gè)AipNlp
然后創(chuàng)建倆個(gè)計(jì)數(shù)器,分別用來計(jì)量特征數(shù)據(jù)與非特征數(shù)據(jù)的個(gè)數(shù)
# 定義一個(gè)計(jì)數(shù)器,統(tǒng)計(jì)所有的單元數(shù) counter_all=0 # 定義一個(gè)計(jì)數(shù)器,統(tǒng)計(jì)所有的單元數(shù) counter_need=0加載我們需要區(qū)分的數(shù)據(jù)
text = 'Raj Babbar,演員,主要作品有《迷宮下的罪惡2》、《天命玩家》、《Bodyguard》' jsonData = client.lexer(text)統(tǒng)計(jì)特征數(shù)據(jù)與非特征數(shù)據(jù)的個(gè)數(shù),這部分代碼參照百度的詞法分析規(guī)則進(jìn)行編寫的,[‘items’][‘ne’][‘PER’,’LOC’,’ORG’,’TIME’][‘pos’][‘nw’,’nr’,’t’,’m’]等都是代名詞需要參照上面詞法分析規(guī)則。
for each in jsonData['items']:if each['ne'] in ['PER','LOC','ORG','TIME']:counter_need+=1elif each['pos'] in ['nw','nr','t','m']:counter_need+=1if each['pos'] in ['w']:passelse:counter_all+=1最后打印名人特征數(shù)據(jù)占比,結(jié)果為
print('名人特征數(shù)據(jù)占比為:'+str(counter_need/counter_all)) >>>名人特征數(shù)據(jù)占比為:0.375名人數(shù)據(jù)的特征數(shù)據(jù)占比在0.15以上基本就可以確認(rèn)為名人數(shù)據(jù)了,名人數(shù)據(jù)與非名人數(shù)據(jù)的實(shí)際分界線還要參照具體的語料庫。
總結(jié)
以上是生活随笔為你收集整理的利用百度的词法分析区分数据的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 知识点讲解八:Python中的尾递归
- 下一篇: CSDN-markdown编辑器使用指南