一、识别字符串中的人名或特定名词
笔者所用的是百度智能云提供的词法分析接口,它可以对字符串分词,并且能够识别句子中的人名,地名,等等。好,接下来教你们如何使用这个接口。 官网:https://cloud.baidu.com/product/nlp/lexical/?_=1571913586808
1.安装Python SDK
首先我们需要安装百度提供的sdk,以便我们在代码中使用它提供的的词法分析功能。
安装方法:pip install baidu-aip
即可
2.获取APP ID
为了使用这个接口,我们还需要获取到百度智能云提供的账号(如下图中的APPID、 API KEY、 SECRET KEY)。
登录官网后,我们需要在百度智能云的管理中心创建一个应用, 这样我们就能通过这个ID使用接口了,如下图。 网址https://console.bce.baidu.com/ai/#/ai/nlp/overview/index
3.代码调用
这一步就需要使用python写代码来调用它了。直接上代码
def get_chinese_name(text):
"""
:param text: 中文字符串
:return: 人名
"""
"""识别人名"""
# 上一步获取到的ID AK SK
APP_ID = '你的ID'
API_KEY = '你的AK'
SECRET_KEY = '你的SK'
client = AipNlp(APP_ID, API_KEY, SECRET_KEY)
text = str(text.encode('gbk', 'ignore'), encoding='gbk') # ignore忽略无法编码的字符,如果不加这个会报错。
# 设置请求间隔,免费版的QPS限制为2,有能力的可以购买。
time.sleep(1)
# 调用词法分析的返回结果
print(client.lexer(text))
""" 调用词法分析 """
for i in client.lexer(text)['items']:
# 若字符串中有人名就返回人名
if i['ne'] == 'PER':
return i['item']
return ''
我们测试一段字符串
text = "这是一段测试文本,我的中文名是媛媛"
print(get_chinese_name(text))
返回结果:
{'log_id': 375282685928253176, 'text': '这是一段测试文本,我的中文名是媛媛', 'items': [{'loc_details': [], 'byte_offset': 0, 'uri': '', 'pos': 'r', 'ne': '', 'item': '这', 'basic_words': ['这'], 'byte_length': 2, 'formal': ''}, {'loc_details': [], 'byte_offset': 2, 'uri': '', 'pos': 'v', 'ne': '', 'item': '是', 'basic_words': ['是'], 'byte_length': 2, 'formal': ''}, {'loc_details': [], 'byte_offset': 4, 'uri': '', 'pos': 'm', 'ne': '', 'item': '一段', 'basic_words': ['一', '段'], 'byte_length': 4, 'formal': &#