伪原创相似度查询工具(ServerlessFramework30天试用计划(诚邀您来体验最便捷的Serverless开发))

优采云 发布时间: 2021-09-12 05:11

  伪原创相似度查询工具(ServerlessFramework30天试用计划(诚邀您来体验最便捷的Serverless开发))

  需求背景

  我朋友的单位有一个小图书馆。图书馆里有很多书。每本书都有编号并放置在相应的区域。为了让大家更快更方便的找到这些书,他联系了我,让我帮他弄个图书搜索系统。用户输入可用于模糊匹配对应的结果,并提供书的对应位置。

  实现数据表单整体化的功能设计

  Excel 样式主要包括书名和书号,分类标签如下:

  

  基于功能的搜索功能

  核心代码实现:

  import jieba

import openpyxl

from gensim import corpora, models, similarities

from collections import defaultdict

import urllib.request

with open("/tmp/book.xlsx", "wb") as f:

f.write(

urllib.request.urlopen("https://********").read()

)

top_str = "abcdefghijklmn"

book_dict = {}

book_list = []

wb = openpyxl.load_workbook('/tmp/book.xlsx')

sheets = wb.sheetnames

for eve_sheet in sheets:

print(eve_sheet)

sheet = wb.get_sheet_by_name(eve_sheet)

this_book_name_index = None

this_book_number_index = None

for eve_header in top_str:

if sheet[eve_header][0].value == "书名":

this_book_name_index = eve_header

if sheet[eve_header][0].value == "编号":

this_book_number_index = eve_header

print(this_book_name_index, this_book_number_index)

if this_book_name_index and this_book_number_index:

this_book_list_len = len(sheet[this_book_name_index])

for i in range(1, this_book_list_len):

add_key = "%s_%s_%s" % (

sheet[this_book_name_index][i].value, eve_sheet, sheet[this_book_number_index][i].value)

add_value = {

"category": eve_sheet,

"name": sheet[this_book_name_index][i].value,

"number": sheet[this_book_number_index][i].value

}

book_dict[add_key] = add_value

book_list.append(add_key)

def getBookList(book, book_list):

documents = []

for eve_sentence in book_list:

tempData = " ".join(jieba.cut(eve_sentence))

documents.append(tempData)

texts = [[word for word in document.split()] for document in documents]

frequency = defaultdict(int)

for text in texts:

for word in text:

frequency[word] += 1

dictionary = corpora.Dictionary(texts)

new_xs = dictionary.doc2bow(jieba.cut(book))

corpus = [dictionary.doc2bow(text) for text in texts]

tfidf = models.TfidfModel(corpus)

featurenum = len(dictionary.token2id.keys())

sim = similarities.SparseMatrixSimilarity(

tfidf[corpus],

num_features=featurenum

)[tfidf[new_xs]]

book_result_list = [(sim[i], book_list[i]) for i in range(0, len(book_list))]

book_result_list.sort(key=lambda x: x[0], reverse=True)

result = []

for eve in book_result_list:

if eve[0] >= 0.25:

result.append(eve)

return result

def main_handler(event, context):

try:

print(event)

name = event["body"]

print(name)

base_html = '''{{book_name}}分类:{{book_category}}

编号:{{book_number}}'''

result_str = ""

for eve_book in getBookList(name, book_list):

book_infor = book_dict[eve_book[1]]

result_str = result_str + base_html.replace("{{book_name}}", book_infor['name']) \

.replace("{{book_category}}", book_infor['category']) \

.replace("{{book_number}}", book_infor['number'] if book_infor['number'] else "")

if result_str:

return result_str

except Exception as e:

print(e)

return '''未找到图书信息,请您重新搜索。'''

  同时配置APIGW:

  

  功能页面

  

图书检索系统

html,

body {

background-color: #efeff4;

}

function getResult() {

var UTFTranslate = {

Change: function (pValue) {

return pValue.replace(/[^\u0000-\u00FF]/g, function ($0) {

return escape($0).replace(/(%u)(\w{4})/gi, "&#x$2;")

});

},

ReChange: function (pValue) {

return unescape(pValue.replace(/&#x/g, '%u').replace(/\\u/g, '%u').replace(/;/g, ''));

}

};

var xmlhttp;

if (window.XMLHttpRequest) {

// IE7+, Firefox, Chrome, Opera, Safari 浏览器执行代码

xmlhttp = new XMLHttpRequest();

} else {

// IE6, IE5 浏览器执行代码

xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");

}

xmlhttp.onreadystatechange = function () {

if (xmlhttp.readyState == 4 && xmlhttp.status == 200 && xmlhttp.responseText) {

document.getElementById("result").innerHTML = UTFTranslate.ReChange(xmlhttp.responseText).slice(1, -1).replace("\"",'"');

}

}

xmlhttp.open("POST", "https://********", true);

xmlhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");

xmlhttp.send(document.getElementById("book").value);

}

图书检索系统

检索

  

可以在搜索框内输入书籍的全称,或者书籍的简称,系统支持智能检索功能。

  业绩展示

  为了方便朋友使用,本页面已被Webview使用并打包成APP。整体效果如下:

  

  总结

  本APP为低频应用。可以认为,如果建在传统服务器上,应该不是明智的选择。云功能的现收现付,对象存储与APIGW的融合,完美解决了资源浪费问题。同时利用云功能的APIGW触发器,轻松替代传统Web框架和部分服务器软件的安装、使用、维护。这个例子很小,但确实是一个有趣的小工具。除了图书查询,您还可以考虑将其做成成绩查询。

  无服务器框架 30 天试用计划

  我们诚邀您体验最便捷的无服务器开发和部署方式。试用期间,相关产品和服务提供免费资源和专业技术支持,帮助您的企业快速便捷地实现Serverless!

  详情请参考:Serverless Framework Trial Plan One More Thing

  你能在 3 秒内做什么?喝一口水,阅读一封电子邮件,或者 - 部署一个完整的无服务器应用程序?

  复制链接到PC浏览器访问:

  3秒快速部署,即刻体验史上最快Serverless HTTP实际开发!

  门户:

  欢迎访问:Serverless中文网站,您可以在Best Practices中体验更多关于Serverless应用开发的内容!

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线