主程序的逻辑是:
1、用户输入一段文本
2、对用户输入的文本进行分词
3、把用户输入的结果与content_file.txt文件中的title字段,一一的进行相似度运算
4、获取到最大的相似度。
逻辑上是比较简单的,最主要的是对几个新名词的理解和使用。
最主要的是对 random 和 json的一个了解!
一、random的用法
- random.random()
random.random()方法返回一个随机数,其在0至1的范围之内,以下是其具体用法:
import random
print ("随机数: ", random.random())
输出结果:0.22867521257116
random.uniform()
random.uniform()是在指定范围内生成随机数,其有两个参数,一个是范围上限,一个是范围下线,具体用法如下:
import random
print (random.uniform(2, 6))
输出结果:3.62567571297255random.randint()
random.randint()是随机生成指定范围内的整数,其有两个参数,一个是范围上限,一个是范围下线,具体用法如下:
import random
print (random.randint(6,8))
输出结果:8random.randrange()
random.randrange()是在指定范围内,按指定基数递增的集合中获得一个随机数,有三个参数,前两个参数代表范围上限和下限,第三个参数是递增增量,具体用法如下:
import random
print (random.randrange(6, 28, 3))
输出结果:15random.choice()
random.choice()是从序列中获取一个随机元素,具体用法如下:
import random
print (random.choice("www.jb51.net"))
输出结果:orandom.shuffle()
random.shuffle()函数是将一个列表中的元素打乱,随机排序,具体用法如下:
import random
num = [1, 2, 3, 4, 5]
random.shuffle(num)
print (num)
输出结果:[3, 5, 2, 4, 1]random.sample()
random.sample()函数是从指定序列中随机获取指定长度的片段,原有序列不会改变,有两个参数,第一个参数代表指定序列,第二个参数是需获取的片段长度,具体用法如下:
import random
num = [1, 2, 3, 4, 5]
sli = random.sample(num, 3)
print (sli)
输出结果:[2, 4, 5]
二、json
1、json.dumps()函数是将一个Python数据类型列表进行json格式的编码(json.dumps()函数是将字典转化为字符串)
2、json.loads()函数是将json格式数据转换为字典(json.loads()函数是将字符串转化为字典)
3、json.dump()和json.load()主要用来读写json文件函数
import json
# json.dump()函数的使用,将json信息写进文件
json_info = "{'age': '12'}"
file = open('1.json','w',encoding='utf-8')
json.dump(json_info,file)
import json
# json.load()函数的使用,将读取json信息
file = open('1.json','r',encoding='utf-8')
info = json.load(file)
print(info)
代码时刻:
import jieba
import json
import random
from gensim.models import word2vec
#加载语料库,并把分词后的结果写入文件中
with open("./fenci.txt", "r") as f1:
for line in f1.readlines():
line.replace("\t","").replace("\n","").replace(" ","")
sep_list = jieba.cut(line)
with open("fenci_result.txt","a") as f2:
f2.write(" ".join(sep_list))
#加载语料
sentences = word2vec.Text8Corpus("fenci_result.txt")
#参数训练
model = word2vec.Word2Vec(sentences, min_count=1)
#保存模型
model.save("word2vec.model")
#model.wv['我们', "来"]
#匹配文本
#model.wv.similarity("我们", "贪心")
#最大相似度计算
#文本1
#text1 = "优秀"
#找到与给定文本最像的文本
#model.wv.most_similar(text1)
#对比两个词条的相似性
#model.wv.n_similarity(["青年", "厉害", "夸"], ["财务", "超级", "加油", "自豪", "棒"])
while True:
content_input = input("请输入内容:")
content_input_cut = jieba.cut(content_input)
user_word_list = []
for word1 in content_input_cut:
user_word_list.append(word1)
content_file = open("content_file.txt")
json_content_file = json.load(content_file)
#print(type(json_content_file))
#json.load()循环要用变量才可以不报错
max_sim_result = 0
for line in json_content_file:
#print(line['title'])
content_cut_word = jieba.cut(line['title'])
content_list = []
#max_sim_reply = []
for word in content_cut_word:
content_list.append(word)
try:
sim_result_value = model.wv.n_similarity(content_input, content_list)
except:
continue
if sim_result_value > max_sim_result:
max_sim_result = sim_result_value
max_sim_title = line['title']
max_sim_reply = line['reply']
print(sim_result_value)
print("匹配到的问题是:{}".format(max_sim_title))
if max_sim_reply != []:
print("下方评论:{}".format(random.choice(max_sim_reply)))
else:
print("啥也没有抓取到")