22、nlpir 人工智能
练习介绍
【程序功能】
我们将完成一个和语义识别相关的爬虫程序,输入任意词汇、句子、文章或段落,会返回联想的词汇。
【背景信息】
有一个非常牛的处理语言的网站nlpir,上面有非常多的处理语言的功能(如分词标注、情感分析、相关词汇)。
举个例子,我输入“音乐剧”:
然后点击“Word2vec”(返回联想词汇的功能):
下面就会返回“音乐剧”的联想词汇:
当然这个网站还有其他的功能,像“分词标注”,就是把你输入的文本切成一个个的词,并且把这些词的词性都标出来;
还有“情感分析”的功能,就是分析你输入的文本里面“乐”、“恶”、“怒”、“哀”等情绪的占比是多少......
可是,这些功能的意义在哪呢?
在人工智能领域里,有一个很重要的领域,叫自然语言处理(NLP)。NLP致力于让计算机听懂人的话,理解人的话,在此基础上,人与计算机才有对话的可能。
而这个处理语言的网站的主要功能(如分词标注、情感分析、关键词提取、相关词汇等),就是NLP中的核心的底层技术。
我们所理解的siri、小爱同学、微软小冰,这些可以和人交流的对话系统,也是建构在NLP之上的。
无论最后建成的大楼有多么宏伟,都不可缺少坚实的地基。而对词语的基本处理,就是人工智能的一种“地基”,所以大家不要小觑这个网站中对语言处理的基本功能。
【实现路径】
刚刚提到,我们的程序有这样的功能:输入任意词汇、句子、文章或段落,会返回该联想词汇。
我们会用post发送请求,然后得到返回的结果。
json和列表/字典的相互转换
1 import json 2 # 引入json模块 3 a = [1,2,3,4] 4 # 创建一个列表a。 5 b = json.dumps(a) 6 # 使用dumps()函数,将列表a转换为json格式的字符串,赋值给b。 7 print(b) 8 # 打印b。 9 print(type(b)) 10 # 打印b的数据类型,为字符串。 11 c = json.loads(b) 12 # 使用loads()函数,将json格式的字符串b转为列表,赋值给c。 13 print(c) 14 # 打印c。 15 print(type(c)) 16 # 打印c的数据类型,为列表。
字符串的方法
字符串类的对象,都有一个方法str.split(),可以通过指定分隔符对字符串进行切片。
str.split()需要输入参数,参数的内容是用于切分字符串的符号。来看示例。
1 a='郑云龙,阿云嘎,马佳,蔡程昱,高天鹤,余笛' 2 # a是一个大字符串,可以把这个字符串切开。 3 b=a.split(',') 4 # 指定分隔符是逗号,每碰到一个逗号,就切一下。 5 print(b) 6 # 打印b,结果会是一个由6个字符串组成的列表。 7 print(type(b)) 8 # b是一个列表。 9 10 11 打印出来会是一个包含6个字符串的列表,列表的内容是['郑云龙','阿云嘎','马佳','蔡程昱','高天鹤','余笛']
我的代码及执行效果
1 import requests 2 import json 3 4 url = 'http://ictclas.nlpir.org/nlpir/index6/getWord2Vec.do' 5 6 headers = { 7 'Pragma': 'no-cache', 8 'Origin': 'http://ictclas.nlpir.org', 9 'Accept-Encoding': 'gzip, deflate', 10 'Accept-Language': 'zh-CN,zh;q=0.9', 11 'User-Agent': 'Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.103 Safari/537.36', 12 'Content-Type': 'application/x-www-form-urlencoded', 13 'Accept': '*/*', 14 'Cache-Control': 'no-cache', 15 'X-Requested-With': 'XMLHttpRequest', 16 'Connection': 'keep-alive', 17 'Referer': 'http://ictclas.nlpir.org/nlpir/' 18 } 19 20 data = { 21 'content': input('请输入关键词 : ') 22 } 23 24 res = requests.post(url,data=data,headers=headers) 25 26 jsona = res.json() 27 28 dicta = jsona['vjson'] 29 dictb = jsona['w2vlist'] 30 31 for listn in dicta: 32 for i in dicta[listn]: 33 print(i.split(',')[0],end='\t') 34 35 for i in dictb: 36 print(i.split(',')[0],end='\t') 37 38 39 40 ---------------------------------------------------------------- 41 D:\USERDATA\python>C:/Users/Administrator/AppData/Local/Programs/Python/Python37/python.exe d:/USERDATA/python/nlpir.py 42 请输入关键词 : 马云 43 44 45 D:\USERDATA\python>C:/Users/Administrator/AppData/Local/Programs/Python/Python37/python.exe d:/USERDATA/python/nlpir.py 46 请输入关键词 : 马化腾 47 48 49 D:\USERDATA\python>C:/Users/Administrator/AppData/Local/Programs/Python/Python37/python.exe d:/USERDATA/python/nlpir.py 50 请输入关键词 : 李彦宏 51 52 53 D:\USERDATA\python>C:/Users/Administrator/AppData/Local/Programs/Python/Python37/python.exe d:/USERDATA/python/nlpir.py 54 请输入关键词 : 刘强东 55 56 57 D:\USERDATA\python>C:/Users/Administrator/AppData/Local/Programs/Python/Python37/python.exe d:/USERDATA/python/nlpir.py 58 请输入关键词 : 张朝阳 59 搜狐 阿里巴巴 阿里 百度 网易 平台 互联网 网络 新浪 金山 阿里巴巴 交易所 股价 证交所 股票 深交所 上交所 市值 交易 发行价 新浪 网易 腾讯 头条 凤凰 土豆 视频 讯 60 百度 频道 腾讯 纳斯达克 搜狐 COO 阿里巴巴 创始人 阿里 视频 前妻 humbling 61 D:\USERDATA\python>C:/Users/Administrator/AppData/Local/Programs/Python/Python37/python.exe d:/USERDATA/python/nlpir.py 62 请输入关键词 : 周鸿祎 63 邮轮 长安县 黄浦 低调 太公 四季豆 阿米巴 金鹏 高调 沥水 大棒 黄瓜 筋 豆角 眼袋 海底 茄子 稻草 肉丝 西红柿 四季豆 筋 棍子 火腿肠 稻草 骨头 毫毛 尼龙绳 球衫 海底 64 海底 四季豆 大棒 诸子百家 浔 长安县 眼袋 稻草 FORREST 雷山 65 D:\USERDATA\python>C:/Users/Administrator/AppData/Local/Programs/Python/Python37/python.exe d:/USERDATA/python/nlpir.py 66 请输入关键词 : 潘石屹 67 68 69 D:\USERDATA\python>C:/Users/Administrator/AppData/Local/Programs/Python/Python37/python.exe d:/USERDATA/python/nlpir.py 70 请输入关键词 : 任正非 71 72 73 D:\USERDATA\python>C:/Users/Administrator/AppData/Local/Programs/Python/Python37/python.exe d:/USERDATA/python/nlpir.py 74 请输入关键词 : 乔布斯
老师的代码
1 import requests,json 2 url = 'http://ictclas.nlpir.org/nlpir/index6/getWord2Vec.do' 3 headers = {'user-agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.181 Safari/537.36'} 4 words = input('请输入你想查询的词汇:') 5 data = {'content':words} 6 res = requests.post(url,data=data,headers=headers) 7 data=res.text 8 # 以上,为上一步的代码 9 10 11 data1=json.loads(data)# 把json数据转换为字典print ('和“'+words+'”相关的词汇,至少还有:')# 打印文字 12 f=0# 设置变量ffor i in data1['w2vlist']: # 遍历列表 13 f=f+1 14 word = i.split(',') # 切割字符串 15 print ('('+str(f)+')'+word[0]+',其相关度为'+word[1]) # 打印数据 16 17 ----------------------------------------------------- 18 请输入你想查询的词汇:百度 19 和“百度”相关的词汇,至少还有: 20 (1)腾讯,其相关度为0.52671057 21 (2)词条,其相关度为0.47400305 22 (3)网易,其相关度为0.46367505 23 (4)搜索引擎,其相关度为0.4557111 24 (5)地图,其相关度为0.44420305 25 (6)阿里,其相关度为0.40419072 26 (7)关键字,其相关度为0.39202824 27 (8)网站,其相关度为0.3855128 28 (9)阿里巴巴,其相关度为0.37937027 29 (10)站长,其相关度为0.37208536