页面化展示

页面化展示


做badcase分析,页面化查询

脚本

# coding:utf-8
import collections
import sys

from flask import Flask, render_template, request
import jieba
import leveldb
import pandas as pd
import time
import pickle

app = Flask(__name__)
level_obj = None


class LevelDb(object):
    def __init__(self, path):
        self.path = path
        self.db = None

    def load_db(self):
        st = time.time()
        self.db = pickle.load(open('whole_data.pkl', 'rb'))

        print('load over time out: {}'.format(time.time() - st))

    def find_term_nums(self, term):
        num = 0
        try:
            values = self.db.Get(term.encode("utf-8")).decode("utf-8")
            num = int(values.split("\x01\x01")[0])
        except:
            pass
        return num

    def find_term_values(self, term, req_term):
        res = []
        try:
            values = self.db.Get(term.encode("utf-8")).decode("utf-8")
            values = values.split("\x01\x01")[1]
            values_list = values.split("\x01")
            for value in values_list:
                label, source_sku_name, target_sku_name, freq = value.split("\t")
                if source_sku_name.find(req_term) < 0:
                    continue
                for _ in range(int(freq)):
                    res.append([source_sku_name, target_sku_name, label])
        except:
            pass
        # print(res)
        res.sort(key=lambda x: x[2])
        return res

    def find(self, term):
        res = []
        cnt_dic = collections.defaultdict(int)
        for k in self.db:
            if term in k:
                cid, cna = self.db[k]
                cnt_dic[cna] += 1
                res.append([k, cid, cna])
        return res, cnt_dic


@app.route('/', methods=['POST', 'GET'])
def get_sample():
    global level_obj
    st = time.time()
    result_find = {}
    if request.method == 'POST':
        req_term = request.form['Term']
        print(req_term)

        # seg_list = list(jieba.cut(req_term, cut_all=False))
        final_res, cnt_dic = level_obj.find(req_term)
        print(len(final_res))
        result_find['res'] = final_res
        result_find['dic'] = [[k, v] for k, v in cnt_dic.items()]
        result_find['input'] = req_term
        print('time out: {}'.format(time.time() - st))
    return render_template('web.html', result=result_find)


if __name__ == '__main__':
    db_path = sys.argv[1]
    level_obj = LevelDb(db_path)
    level_obj.load_db()
    app.run(host='0.0.0.0', port=8080, debug=False)

页面

<!DOCTYPE html>

<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>


<body>
<p>sku_match_sku_sample_debug</p>
<p>contact with youfei02@meituan.com</p>
<hr />


<form method="POST" onsubmit="return check(this)">
<p>**输入检索片段,检索source_sku_name**</p>
<p>**检索是利用分词在leveldb上建索引:输入为词粒度不然检索不出来;输入最好多个词,单个词展示结果巨多**</p>
<p> 检索片段 <input type = "text" name = "Term" value="" />
<input type = "submit" value = "search" /></p>
</form>

<form method="GET">
<table border="1">
<tr>
    <th>name</th>
    <th>count</th>
</tr>

{% for k, v in result['dic'] %}
<tr>
    <th> {{ k }} </th>
    <th> {{ v }} </th>
</tr>
{% endfor %}

</table>
</form>

<form method="GET">
<table border="1">
<tr>
    <th>normalized_name</th>
    <th>category_id</th>
    <th>category_name</th>
</tr>

{% for source,target,label in result['res'] %}
<tr>
    <th> {{ source }} </th>
    <th> {{ target }} </th>
    <th> {{ label }} </th>
</tr>
{% endfor %}

</table>
</form>


<script language="JavaScript">

    //声明全局数组,用于存放取值
    var inputArr = document.getElementsByTagName("input");

    function check(o)
    {
        var nameStr = "";
        for (var i = 0; i < inputArr.length-1; i++)
        {
            nameStr += inputArr[i].value + ";";
        }
        nameStr += inputArr[inputArr.length - 1];
        window.name = nameStr;
    }

    if (window.name)
    {
        //声明数组,用于存放从window.name中分离出的值
        var nameArr = new Array();
        nameArr = window.name.split(";");

        for (var i = 0; i < nameArr.length; i++)
        {
            if (inputArr[i].type == "text")
            {
                inputArr[i].value = nameArr[i];
            }
        }
    }
</script>



</body>
</html>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要在Web页面展示Python绘制的数据可视图表,可以使用Python的Web框架Flask或Django。下面以Flask为例,介绍如何实现数据可视展示。 首先,我们需要安装Flask库,可以使用pip安装: ``` pip install flask ``` 接着,我们创建一个Flask应用,并在应用中定义一个路由,通过路由来展示数据可视图表。以下是一个示例: ```python from flask import Flask, render_template import matplotlib.pyplot as plt import numpy as np from io import BytesIO import base64 app = Flask(__name__) @app.route("/") def index(): # 生成数据 x = np.linspace(0, 10, 100) y = np.sin(x) # 绘制折线图 fig, ax = plt.subplots() ax.plot(x, y) ax.set_title("Sin Function") ax.set_xlabel("X-axis") ax.set_ylabel("Y-axis") # 将图像转换为Base64编码的字符串 buffer = BytesIO() fig.savefig(buffer, format='png') buffer.seek(0) image_base64 = base64.b64encode(buffer.getvalue()).decode() return render_template("index.html", image_base64=image_base64) if __name__ == "__main__": app.run() ``` 这个示例中,我们首先生成了一些数据,然后使用Matplotlib库来绘制折线图。接着,我们将绘制的图像转换为Base64编码的字符串,并将其作为参数传递给模板文件。在模板文件中,我们可以使用HTML和CSS来渲染Web页面,并使用Base64编码的图片来展示数据可视图表。以下是一个示例模板文件: ```html <!DOCTYPE html> <html> <head> <title>Data Visualization</title> <style type="text/css"> img { display: block; margin: auto; } </style> </head> <body> <h1>Data Visualization</h1> <img src="data:image/png;base64,{{ image_base64 }}" /> </body> </html> ``` 在模板文件中,我们使用img标签来展示Base64编码的图片,并使用CSS来设置图片的居中对齐。你可以根据需要来修改和优这个代码示例。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值