命名实体识别

命名实体识别(NER)是指识别文本中具有特定意义的实体,主要包括人名、地名、机构名、专有名词等。命名实体识别是信息提取、问答系统、句法分析、机器翻译等应用领域的重要基础工具,作为结构化信息提取的重要步骤。

在 BosonNLP NER 中,我们将识别以下类别的实体:

时间 time
地点 location
人名 person_name
组织名 org_name
公司名 company_name
产品名 product_name
职位 job_title
URL
http://api.bosonnlp.com/ner/analysis
HTTP Method
POST
HTTP Header
Content-Type
application/json
Accept
application/json
X-Token
YOUR_API_TOKEN (需要替换成您自己的 Token)
HTTP query string 参数
sensitivity
可选参数,用于调节准确率与召回率之间的平衡,取值为 1 (覆盖更多实体)到 5 (更准确)之间的整数,默认为 3
HTTP 请求 Body

JSON 格式的需要做命名实体识别的文本或者文本组成的列表。比如:

["\u6210\u90fd\u5546\u62a5\u8bb0\u8005 \u59da\u6c38\u5fe0"]

Note

我们限定了一次传入的文章数目不能超过100篇。

HTTP 返回 Body

JSON 格式的实体识别引擎返回的结果。

key type 说明
word list 分词结果
tag list 词性标注结果
entity list 命名实体结果

其中命名实体结果为一个三元组: (s, t, entity_type) ,表示 word[s:t] 的内容为类型 entity_type 的实体。


CURL 调用示例

$ curl -X POST \
    -H "Content-Type: application/json" \
    -H "Accept: application/json" \
    -H "X-Token: YOUR_API_TOKEN" \
    --data "[\"\u6210\u90fd\u5546\u62a5\u8bb0\u8005 \u59da\u6c38\u5fe0\"]" \
    http://api.bosonnlp.com/ner/analysis
[{"entity": [[0, 2, "product_name"],
             [2, 3, "job_title"],
             [3, 4, "person_name"]],
  "tag": ["ns", "n", "n", "nr"],
  "word": ["成都", "商报", "记者", "姚永忠"]}]

Python 调用示例

# -*- encoding: utf-8 -*-
from __future__ import print_function, unicode_literals
import json
import requests


NER_URL = 'http://api.bosonnlp.com/ner/analysis'


s = ['对于该小孩是不是郑尚金的孩子,目前已做亲子鉴定,结果还没出来,'
     '纪检部门仍在调查之中。成都商报记者 姚永忠']
data = json.dumps(s)
headers = {'X-Token': 'YOUR_API_TOKEN'}
resp = requests.post(NER_URL, headers=headers, data=data.encode('utf-8'))


for item in resp.json():
    for entity in item['entity']:
        print(''.join(item['word'][entity[0]:entity[1]]), entity[2])

运行

$ python ner_api_example.py
郑尚金 person_name
成都商报 product_name
记者 job_title
姚永忠 person_name

Python SDK 调用示例

# -*- encoding: utf-8 -*-
from __future__ import print_function, unicode_literals

from bosonnlp import BosonNLP

# 注意:在测试时请更换为您的API token
nlp = BosonNLP('YOUR_API_TOKEN')
s = ['对于该小孩是不是郑尚金的孩子,目前已做亲子鉴定,结果还没出来,'
     '纪检部门仍在调查之中。成都商报记者 姚永忠']
result = nlp.ner(s)[0]
words = result['word']
entities = result['entity']


for entity in entities:
    print(''.join(words[entity[0]:entity[1]]), entity[2])

详细的 Python SDK 命名实体识别文档请看 这里