专栏首页明天依旧可好的专栏利用百度的词法分析区分数据

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

1.目标

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

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


2.词法分析运用

2.1新建AipNlp

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

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

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

2.2配置AipNlp

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

接口

说明

setConnectionTimeoutInMillis

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

setSocketTimeoutInMillis

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

2.3接口说明

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

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编码)

词法分析 返回示例

{
  "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

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)

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

# 定义一个计数器,统计所有的单元数
counter_all=0
# 定义一个计数器,统计所有的单元数
counter_need=0

加载我们需要区分的数据

text = 'Raj Babbar,演员,主要作品有《迷宫下的罪恶2》、《天命玩家》、《Bodyguard》' 

jsonData = client.lexer(text)

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

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

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

print('名人特征数据占比为:'+str(counter_need/counter_all))
>>>名人特征数据占比为:0.375

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

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 遇到的那些报错

    1. zipfile.BadZipFile: File is not a zip file

    明天依旧可好
  • 机器学习第3天:多元线性回归

    简单线性回归:影响Y的因素唯一,只有一个。 多元线性回归:影响Y的因数不唯一,有多个。

    明天依旧可好
  • 知识点讲解三:关于requests里的timeout()

    在爬虫代理这一块我们经常会遇到请求超时的问题,代码就卡在哪里,不报错也没有requests请求的响应。

    明天依旧可好
  • 【分布式架构之旅-理论篇】数据库分库分表

    用户2032165
  • 2016中国大数据市场研究报告

    本研究报告主要针对大数据市场进行研究。首先理清大数据的定义及本质。而后,就大数据市场是处于概念期还是实战期做出判断分析,包括企业用户的实践情况,实践方向,实践...

    灯塔大数据
  • 大数据时代留给数据分析师的羁绊

    大数据搭着信息时代的快车来到了我们的面前,数据的价值逐渐为人们所重视,同时也让数据分析师的身价倍增。而随着大数据分析工具等大数据应用技术的出现,未来的数据分析师...

    小莹莹
  • 【数据分析】R语言中用自助法求统计量置信区间

    当样本不符合理论分布假设时,求样本统计量的置信区间就成为一个难题。而自助法(Bootstrap)的思路是对原始样本重复抽样产生多个新样本,针对每个样本求取统计量...

    小莹莹
  • 数据可视化-- 大数据用Tableau,小数据用Excel

    数据分析体系可分为数据整理、数据分析、数据呈现。数据整理包含对源数据的获取、筛选、清洗、整理和统计,数据整理是对源数据的初加工,是数据分析工作的前置。数...

    小莹莹
  • 物联网系统时代:iOS、安卓拜拜?

    随着智能汽车、智能家居、智慧交通等智慧场景的应用落地,智慧化生活场景正在成为现实。在技术应用层面,这些智慧场景的实现,都需要操作系统的支持。这种情况下,以物联网...

    刘旷
  • 数据分析:什么样性格的创始人容易成功?

    导读 本文摘自《从0到1》,作者彼得·蒂尔,PayPal创始人、Facebook第一位外部投资者。闻名硅谷的“Paypal黑帮”(The paypal mafi...

    CDA数据分析师

扫码关注云+社区

领取腾讯云代金券