import requests, json, time, random # 引入模块
word = input('''你好,我是你的私人助理吴小枫。你可以在下方任意输入一个名词,然后敲击“Enter”键,我将会帮你自动联想它有什么相关的词汇!
注:如果你要删除自己输入的内容,要按两次删除,才可以删掉一个汉字奥!(因为在计算机世界里,中文是占两个字符的!)
下面请输入(示例:牛肉、水果、飞机、手机……),然后敲“Enter”:
>''') #input命令获取用户输入信息
word=word+'有哪些相关词汇?' # 获取用户输入的内容,然后后面加上'有哪些相关词汇'
feature_text = '''
我们可以先聊点别的,我还有什么可以帮助你的吗?
输入你的问题,然后敲Enter键!
>''' #把文字赋值给变量feature_text
url1 = 'http://ictclas.nlpir.org/nlpir/index/getAllContentNew.do' #url1赋值分析网站的接口
data1 = {'type': 'all', 'content': word} # 设置变量data1,字典,content是要post的内容
try: #异常处理 try except
r1 = requests.post(url1, data1, timeout=3) #提交给服务器,URL,数据,超时报警
dividewords = json.loads(r1.text)['dividewords'] # 使用json来解析r1.text数据,只解析数据里的dividewords数据,并把它赋值给变量dividewords
# dividewords 的值是:我/rr 的/ude1 名字/n 叫/vi 吴枫/nr ,/wd 我/rr 的/ude1 主要/b 工作/vn 是/vshi 教/v 大家/rr 学习/v Python/nz ,/wd 这/rzv 份/q 工作/vn 让/v 我/rr 每天/r 都/d 感到/v 开心/a 。/wj
dividewords = dividewords.split(' ') #用split函数,用空格,来切分,并且把值赋给dividewords
# dividewords 的值是:['我/rr', '的/ude1', '名字/n', '叫/vi', '吴枫/nr', ',/wd', '我/rr', '的/ude1', '主要/b', '工作/vn', '是/vshi', '教/v', '大家/rr', '学习/v', 'Python/nz', ',/wd', '这/rzv', '份/q', '工作/vn', '让/v', '我/rr', '每天/r', '都/d', '感到/v', '开心/a', '。/wj', '']
newwords = [] #创建一个空的列表,
#newwords的值是:['我', '的', '名字', '叫', '吴枫', ',', '我', '的', '主要', '工作', '是', '教', '大家', '学习', 'Python', ',', '这', '份', '工作', '让', '我', '每天', '都', '感到', '开心', '。']
cixing = [] #创建一个新的列表
#cixing的值是:['rr', 'ude1', 'n', 'vi', 'nr', 'wd', 'rr', 'ude1', 'b', 'vn', 'vshi', 'v', 'rr', 'v', 'nz', 'wd', 'rzv', 'q', 'vn', 'v', 'rr', 'r', 'd', 'v', 'a', 'wj']
for x in dividewords: # 把dividewords中的每个元素遍历
if x == dividewords[-1]:# dividewords最后一个字符串是一个空的字符串,
continue #跳出本次循环,执行下个程序
else: # 否则
singleword = x.split('/')# 用字符串的split函数,用/符号,把dividewords变量里的
#singleword 的值:['我', 'rr'] ...
newwords.append(singleword[0]) # newwords空列表尾部,加入'我'
cixing.append(singleword[1]) # cixing空列表里,加入singleWord的第1个字符:rr
newlist = '/'.join(newwords) #新建一个变量newlist,里面的值是用join函数把newwords通过符号"/"连接起来
#newlist的值是:我/的/名字/叫/吴枫/,/我/的/主要/工作/是/教/大家/学习/Python/,/这/份/工作/让/我/每天/都/感到/开心/。
dict = {'n': '名词', 'nr': '人名', 'nr1': '汉语姓氏', 'nr2': '汉语名字', 'nrj': '日语人名', 'nrf': '音译人名', 'ns': '地名',
'nsf': '音译地名', 'nt': '机构团体名', 'nz': '其它专名', 'nl': '名词性惯用语', 'ng': '名词性语素',
't': '时间词', 'tg': '时间词性语素', 's': '处所词', 'f': '方位词',
'v': '动词', 'vd': '副动词', 'vn': '名动词', 'vshi': '动词“是”', 'vyou': '动词“有”', 'vf': '趋向动词', 'vx': '形式动词',
'vi': '不及物动词(内动词)', 'vl': '动词性惯用语', 'vg': '动词性语素',
'a': '形容词', 'ad': '副形词', 'an': '名形词', 'ag': '形容词性语素', 'al': '形容词性惯用语', 'b': '区别词', '': '',
'bl': '区别词性惯用语',
'z': '状态词',
'r': '代词', 'rr': '人称代词', 'rz': '指示代词', 'rzt': '时间指示代词', 'rzs': '处所指示代词', 'rzv': '谓词性指示代词', 'ry': '疑问代词',
'ryt': '时间疑问代词', 'rys': '处所疑问代词', 'ryv': '谓词性疑问代词', 'rg': '代词性语素',
'm': '数词', 'mq': '数量词', 'q': '量词', 'd': '副词', 'p': '介词', 'pba': '介词“把”', 'pbei': '介词“被”', 'c': '连词',
'cc': '并列连词',
'u': '助词', 'uzhe': '着', 'ule': '了,喽', 'uguo': '过', 'ude1': '的', 'ude2': '地', 'ude3': '得', 'usuo': '所',
'udeng': '等,等等,云云', 'uyy': '一样,一般,似的,般', 'udh': '的话', 'uls': '来讲,来说,而言,说来', 'uzhi': '之', 'ulian': '连',
'e': '叹词', 'y': '语气词', 'o': '拟声词', 'h': '前缀', 'k': '后缀', 'x': '字符串', 'xe': 'Email字符串', 'xs': '微博会话分隔符',
'xm': '表情符合', 'xu': '网址URL',
'w': '标点符号', 'wkz': '左括号', 'wky': '右括号', 'wyz': '左引号', 'wj': '句号', 'ww': '问号', 'wt': '叹号', 'wd': '逗号',
'wf': '分号', 'wn': '顿号', 'wm': '冒号', 'ws': '省略号', 'wp': '破折号', 'wb': '百分号千分号', 'wh': '单位符号'
}
#设置一个字典
time.sleep(1) #延迟1秒打印
print('\n首先,我帮你补全了问题,你问的是:'+word+'有哪些相关词汇,对吗?')
print('\n接着,我先把你的话做了分词:' + newlist + '。')
cixinglist = '' #新建一个变量cixinglist, 里面是空值
for y in cixing: #遍历cixing变量里的值
cixinglist = cixinglist + dict[y] + '/' #cixinglist的值是字典里符号对应的词性。 第一个是"空值+人称代词,第二个是"人称代词 的",以此类推
time.sleep(2)
print('它们的词性分别是:' + cixinglist + '。') #打印所有词性
time.sleep(2) # 延迟运行2秒
print('其中,我判断' + newwords[0] + '是一个' + dict[cixing[0]] + ',你问我的是它的相关词汇有哪些对吗?')
#打印出来的是: 其中我判断我是一个人称代词,你问我的是它的相关词汇有哪些对吗?
url = 'http://ictclas.nlpir.org/nlpir/index6/getWord2Vec.do' #判断相关性的接口网址
data = {'content': newwords[0]} # 给变量data赋值:content: 我
r = requests.post(url, data) #用requests模块带参数请求数据
other = json.loads(r.text) #用json来解析数据
time.sleep(1) #延迟1秒显示
print ('\n我想了想和“' + newwords[0] + '”相关的词汇,至少还有:\n')
time.sleep(1)
f = 0 #设置变量为0
for i in other['w2vlist']: #遍w2vlist里所有的数值
f = f + 1 #变量f 的值是f+1
word2 = i.split(',') #把i用逗号,将字符串转化为列表 范例: 0: "你,0.66688716"
print ('(' + str(f) + ')' + word2[0] + ',其相关度为' + word2[1]) # (1)你,其相关度为0.66688716
time.sleep(1)
feature_text = '''
现在,你已经解锁我的所有功能,可以自由聊天啦!我还有什么可以帮助你的吗?
回复内容,然后敲Enter键!
>''' #设置变量的内容是:现在...enter键!
except requests.exceptions.ConnectTimeout: #出现问题抛出错误,这些都是requests模块的报错
print('额,抱歉,网络连接失败了,词汇拆解功能暂时无法使用...')
except requests.exceptions.Timeout:#出现问题抛出错误
print('额,抱歉,网络连接超时了,词汇拆解功能暂时无法使用...')
user1 = input(feature_text) #input获得用户输入
time.sleep(1) #延时1秒执行
userid = str(random.randint(1, 1000000000000000000000)) #获取一个随机整数。 random模块,randint()函数,把这个模块变成字符串
apikey = 'd81c0b99c260440980a140440be200ec'
#超过1w有风险,19-01-19
tulingdata1 = json.dumps({ "perception": {
"inputText": {
"text": user1
},
},
"userInfo": {
"apiKey": apikey,
"userId": userid
}
})
# 用dump将数据转码成json格式,向API请求数据
robot1 = requests.post('http://openapi.tuling123.com/openapi/api/v2', tulingdata1) #用requests模块向图灵机器人请求数据,把值传给变量robot1
jsrobot1 = json.loads(robot1.text)['results'][0]['values']['text'] #把JSON数据解析成Python数据,取其中的几个值
print(jsrobot1) #打印这个变量
time.sleep(2) # 延时2秒
user2 = input('''
再和你聊最后一句我就要下线了奥,你还有什么要求吗?
回复内容,然后敲Enter键!
>''')
tulingdata1 = json.dumps({
"perception": {
"inputText": {
"text": user2
},
},
"userInfo": {
"apiKey": apikey,
"userId": userid
}
})
robot1 = requests.post('http://openapi.tuling123.com/openapi/api/v2', tulingdata1)
jsrobot1 = json.loads(robot1.text)['results'][0]['values']['text']
time.sleep(1)
print(jsrobot1)
user3 = input('''
哈哈,我终于看明白了
如何调用机器人 回复内容,然后敲回车
''')
tulingdata1 = json.dumps({
"perception": {
"inputText": {
"text": user3
},
},
"userInfo": {
"apiKey": apikey,
"userId": userid
}
}
)
robot1 = requests.post('http://openapi.tuling123.com/openapi/api/v2',tulingdata1)
jsrobot1 = json.loads(robot1.text)['results'][0]['values']['text']
print(jsrobot1)
time.sleep(1)
print('\n我走啦,下次见!')
image.png
网友评论