使用gradio搭建一个简单的词云服务

1,409 阅读3分钟

使用gradio搭建一个简单的词云服务

1.词云服务的故事

在繁忙的都市中,有一家名为“词云”的创业公司,专注于为各类企业提供高效的云计算服务。词云公司凭借其前沿的技术和优质的服务,逐渐在竞争激烈的市场中脱颖而出。

公司创始人兼CEO JavaRoom,是一个对技术充满热情的年轻人。他坚信,云计算将会成为企业数字化转型的重要推动力。因此,他带领团队不断研发创新,力求为客户提供更加稳定、安全、高效的服务。

一天,JavaRoom接到了一个来自大型跨国企业——智远科技的合作意向书。JavaRoom科技对词云的服务表示出了浓厚的兴趣,并希望能够建立长期稳定的合作关系。这是一个难得的机会,李明知道,他必须全力以赴。

为了赢得这次合作,李明组织了一次团队会议,讨论如何更好地满足智远科技的需求。会议中,团队成员们纷纷发表了自己的看法和建议。

“我们可以为他们量身定制一套云计算解决方案,确保能够满足他们所有的业务需求。”技术部门的负责人王强提出了一个具体的方案。

“同时,我们还可以提供24小时的技术支持,确保他们的业务能够稳定运行。”客服部门的负责人张丽补充道。

JavaRoom认真听取了大家的意见,最后他决定采纳王强和张丽的建议,并亲自带领团队与智远科技进行深入沟通。

经过几轮紧张的谈判和讨论,词云最终与智远科技达成了合作协议。JavaRoom科技对词云的服务表示非常满意,并决定长期合作。

这次成功的合作不仅为词云带来了可观的收益,更让李明和他的团队信心倍增。他们知道,只要坚持创新和优质服务,词云一定能够在云计算领域取得更大的成功。

2.依赖

主要就是gradio和wordcloud。

pip install gradio wordcloud

3.代码实现

注释很齐全了,主要是

  • process实现根据输入的文本或文本文件,mask图生成词云图
  • 使用gradio.Blocks实现展示

具体如下:

import gradio as gr
import wordcloud
import numpy as np



def process(text, filepath, mask_img):
    """
    生成词云并保存为图片
    
    Args:
        text (str): 文本内容
        filepath (str): 文件路径
        mask_img (PIL.Image.Image): 掩膜图像
    
    Returns:
        str: 保存词云图片的文件名
    
    """
    # 读取mask图像
    mask = np.array(mask_img)

    # 创建词云
    wc = wordcloud.WordCloud(background_color="white", max_words=2000, mask=mask)
    if len(text) == 0:
        # 打开文件
        print(filepath)
        with open(filepath, 'r') as file:
            # 逐行读取并打印
            for line in file:
                # print(line, end='')  # 默认情况下,print会在每行末尾添加换行符,这里使用end=''来避免这个行为
                text += line
    wc.generate(text)


    # 返回图像
    wc.to_file("output_image.png")
    return "output_image.png"


# 创建Gradio界面
with gr.Blocks(css="footer {visibility: hidden}") as demo:
    with gr.Row():
        gr.HTML(value="""<h1 align="center">词云服务</h1>""")
    with gr.Row():
        with gr.Column():
            text = gr.Textbox(label="文本框输入【优先】")
            file = gr.File(label="文本输入")
            mask = gr.Image(label="上传Mask图像")
        with gr.Column():
            output_image = gr.Image(label="词云输出")
    with gr.Row():
        send_btn = gr.Button("❤️❤️❤️Submit❤️❤️❤️")
        clear_btn = gr.Button("😍😍😍Clear😍😍😍")
        send_btn.click(process, inputs=[text, file, mask], outputs=[output_image])
        clear_btn.click(lambda _: (None, None, None, None), inputs=clear_btn, outputs=[text, file, mask, output_image])
    with gr.Row():
        examples = [
            [
                "",
                "alice_license.txt",
                "alice_mask.png"  # 替换为你的mask图像路径
            ]
        ]
        gr_examples = gr.Examples(examples=examples,
                                  label="输入示例 (点击选择例子)",
                                  inputs=[text, file, mask],
                                  examples_per_page=20)

demo.launch()

4.效果

效果如下,这样就避免了收费词云服务了,自己想什么时候用就什么时候用。

微信图片_20240502140640.png