前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >利用百度的词法分析区分数据

利用百度的词法分析区分数据

作者头像
K同学啊
发布2019-01-22 15:11:39
6110
发布2019-01-22 15:11:39
举报
文章被收录于专栏:明天依旧可好的专栏

1.目标

我以区分名人数据与非名人数据为例。何为名人数据、非名人数据 ?

名人数据:介绍某位名人的一段(一句)话,例如:Raj Babbar,演员,主要作品有《迷宫下的罪恶2》、《天命玩家》、《Bodyguard》等。 非名人数据:不是介绍某位名人的一段(一句)话,例如:德国ABASAG一向致力於促进“企业资源规划系统”(ERP)在中国的发展。


2.词法分析运用

2.1新建AipNlp

AipNlp是自然语言处理的Python SDK客户端,为使用自然语言处理的开发人员提供了一系列的交互方法。

参考如下代码新建一个AipNlp:

代码语言:javascript
复制
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在百度云控制台中创建,常量API_KEY与SECRET_KEY是在创建完毕应用后,系统分配给用户的,均为字符串,用于标识用户,为访问做签名验证,可在AI服务控制台中的应用列表中查看。

注意:如您以前是百度云的老用户,其中API_KEY对应百度云的“Access Key ID”,SECRET_KEY对应百度云的“Access Key Secret”。

2.2配置AipNlp

如果用户需要配置AipNlp的网络请求参数(一般不需要配置),可以在构造AipNlp之后调用接口设置参数,目前只支持以下参数:

接口

说明

setConnectionTimeoutInMillis

建立连接的超时时间(单位:毫秒)

setSocketTimeoutInMillis

通过打开的连接传输数据的超时时间(单位:毫秒)

2.3接口说明

词法分析接口向用户提供分词、词性标注、专名识别三大功能;能够识别出文本串中的基本词汇(分词),对这些词汇进行重组、标注组合后词汇的词性,并进一步识别出命名实体。

代码语言:javascript
复制
text = "百度是一家高科技公司"

""" 调用词法分析 """
client.lexer(text);

词法分析 请求参数详情

参数名称

是否必选

类型

说明

text

string

待分析文本(目前仅支持GBK编码),长度不超过65536字节

词法分析 返回数据参数详情

参数名称

类型

必需

详细说明

text

string

原始单条请求文本

items

array(object)

词汇数组,每个元素对应结果中的一个词

+item

string

词汇的字符串

+ne

string

命名实体类型,命名实体识别算法使用。词性标注算法中,此项为空串

+pos

string

词性,词性标注算法使用。命名实体识别算法中,此项为空串

+byte_offset

int

在text中的字节级offset(使用GBK编码)

+byte_length

int

字节级length(使用GBK编码)

+uri

string

链指到知识库的URI,只对命名实体有效。对于非命名实体和链接不到知识库的命名实体,此项为空串

+formal

string

词汇的标准化表达,主要针对时间、数字单位,没有归一化表达的,此项为空串

+basic_words

array(string)

基本词成分

+loc_details

array(object)

地址成分,非必需,仅对地址型命名实体有效,没有地址成分的,此项为空数组。

++type

string

成分类型,如省、市、区、县

++byte_offset

int

在item中的字节级offset(使用GBK编码)

++byte_length

int

字节级length(使用GBK编码)

词法分析 返回示例

代码语言:javascript
复制
{
  "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

时间名词

nr

人名

ns

地名

nt

机构团体名

nw

作品名

nz

其他专名

v

普通动词

vd

动副词

vn

名动词

a

形容词

ad

副形词

an

名形词

d

副词

m

数量词

q

量词

r

代词

p

介词

c

连词

u

助词

xc

其他虚词

w

标点符号

专名识别缩略词含义

缩略词

含义

缩略词

含义

缩略词

含义

缩略词

含义

PER

人名

LOC

地名

ORG

机构名

TIME

时间

3.具体代码实现

百度提供的词法分析会将句子进行分词,并进行标识。例如《迷宫下的罪恶2》、《天命玩家》会被标识为作品名,Raj Babbar会标识为人名。通过分析名人数据可知,名人数据中一般包含有人名、地名、作品名、出人日期,我把这些词汇作为称为名人数据的特征数据,当然名人数据中不光有特征数据还有像演员、主要、作品、有这样的非特征数据。我依据名人数据特征数据在总数据(即整句)的占比来判定是否为名人数据。

首先创建一个AipNlp

代码语言:javascript
复制
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)

然后创建俩个计数器,分别用来计量特征数据与非特征数据的个数

代码语言:javascript
复制
# 定义一个计数器,统计所有的单元数
counter_all=0
# 定义一个计数器,统计所有的单元数
counter_need=0

加载我们需要区分的数据

代码语言:javascript
复制
text = 'Raj Babbar,演员,主要作品有《迷宫下的罪恶2》、《天命玩家》、《Bodyguard》' 

jsonData = client.lexer(text)

统计特征数据与非特征数据的个数,这部分代码参照百度的词法分析规则进行编写的,[‘items’][‘ne’][‘PER’,’LOC’,’ORG’,’TIME’][‘pos’][‘nw’,’nr’,’t’,’m’]等都是代名词需要参照上面词法分析规则。

代码语言:javascript
复制
for each in jsonData['items']:
    if each['ne'] in ['PER','LOC','ORG','TIME']:
        counter_need+=1
    elif each['pos'] in ['nw','nr','t','m']:
        counter_need+=1

    if each['pos'] in ['w']:
        pass
    else:
        counter_all+=1

最后打印名人特征数据占比,结果为

代码语言:javascript
复制
print('名人特征数据占比为:'+str(counter_need/counter_all))
>>>名人特征数据占比为:0.375

名人数据的特征数据占比在0.15以上基本就可以确认为名人数据了,名人数据与非名人数据的实际分界线还要参照具体的语料库。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2018年08月25日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1.目标
  • 2.词法分析运用
    • 2.1新建AipNlp
      • 2.2配置AipNlp
        • 2.3接口说明
        • 3.具体代码实现
        相关产品与服务
        NLP 服务
        NLP 服务(Natural Language Process,NLP)深度整合了腾讯内部的 NLP 技术,提供多项智能文本处理和文本生成能力,包括词法分析、相似词召回、词相似度、句子相似度、文本润色、句子纠错、文本补全、句子生成等。满足各行业的文本智能需求。
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档