Python Web API开发与Streamlit框架应用

对于非Web开发者来说,构建Web API一直是一项繁琐的任务。这不仅涉及到前端和后端平台的开发,而且通常需要处理复杂的前端任务。幸运的是,Python以其迷人的框架如Streamlit、Flask和FastAPI等,帮助优雅地构建Web API,无需担心前端问题,因为这些框架已经提供了默认的用户界面。

Streamlit简介

Streamlit是Python中用于轻松构建Web API的框架之一。使用Streamlit,不必担心前端任务,因为它可以自动处理这些任务,而无需编写任何代码。可以迅速构建所有需要的应用程序。想要了解更多关于Streamlit的信息,请访问。

安装

创建新环境后,只需输入以下命令即可开始使用:

pip install streamlit

可能需要下载其他库以完成不同的数据建模任务。现在让开始项目。安装后,运行以下命令以检查安装是否成功:

streamlit hello

如果在浏览器中看到以下屏幕,则表示安装成功。

项目概述

原始问题由Kaggle提供,要求根据推文的情感对推文进行灾难性分类。然后,将其构建为一个端到端的项目。在这篇博客中,只会使用Streamlit创建Web API。对于整个项目,可以访问。

StreamlitWeb API开发

安装Streamlit后,让开始开发Web API。首先,需要安装并导入所需的库。

import streamlit as st ## streamlit import pandas as pd ## for data manipulation import pickle ## For model loading import spacy ## For NLP tasks import time from PIL import Image ## For image from io import StringIO ## for text input and output from the web app

导入库后,首先需要加载已保存为pickle文件的已训练模型。

def load_model(): global nlp global textcat nlp = spacy.load(model_path) ## will load the model from the model_path textcat = nlp.get_pipe(model_file) ## will load the model file

加载模型后,将使用它对推文进行分类预测。模型首先会向量化文本,然后进行预测。

def predict(tweet): print("news = ", tweet) ## tweet news = [tweet] txt_docs = list(nlp.pipe(tweet)) scores, _ = textcat.predict(txt_docs) print(scores) predicted_classes = scores.argmax(axis=1) print(predicted_classes) result = ['real' if lbl == 1 else 'fake' for lbl in predicted_classes] print(result) return(result)

predict函数将接受推文作为输入,首先向量化推文,然后使用模型进行分类。这里有两个类别:real或fake。如果预测结果为1,则表示这是一个真实的推文,意味着它对灾难是肯定的;否则,它是假的。

def run(): st.sidebar.info('You can either enter the news item online in the textbox or upload a txt file') st.set_option('deprecation.showfileUploaderEncoding', False) add_selectbox = st.sidebar.selectbox("How would you like to predict?", ("Online", "Txt file")) st.title("Predicting fake tweet") st.header('This app is created to predict if a tweet is real or fake') if add_selectbox == "Online": text1 = st.text_area('Enter text') output = "" if st.button("Predict"): output = predict(text1) output = str(output[0]) # since its a list, get the 1st item st.success(f"The news item is {output}") st.balloons() elif add_selectbox == "Txt file": output = "" file_buffer = st.file_uploader("Upload text file for new item", type=["txt"]) if st.button("Predict"): text_news = file_buffer.read() st_version = st.__version__ # eg 0.67.0 versions = st_version.split('.') if int(versions[1]) > 67: text_news = text_news.decode('utf-8') print(text_news) output = predict(text_news) output = str(output[0]) st.success(f"The news item is {output}") st.balloons()

上述run函数将通过应用程序接收用户输入的文本或文本文件,并在按下predict按钮后给出输出。

if __name__ == "__main__": load_model() run()

if __name__ == “main”:用于仅当文件被直接运行,而不是被导入时执行一些代码。这意味着模块正在被用户独立运行,可以执行相应的适当操作。

现在可以在本地系统上使用以下命令运行应用程序:

streamlit run app.py

运行此应用程序后,将看到进一步的网页,可以在其中输入文本并点击predict按钮后获得预测结果。

沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485