【腾讯云 TDSQL-C Serverless产品体验】抓取processon热门模版的标题生成词云

news/2024/5/20 6:26:11 标签: 腾讯云, c语言, serverless

腾讯云 TDSQL-C Serverless产品体验】抓取processon热门模版的标题生成词云

serverless服务是腾讯云自研的新一代云原生关系型数据库TDSQ L-C的无服务器架构版,是全Serverless架构的云原生数据库

前言

体验了一下腾讯云刚出的TDSQL-C Serverless,使用它存储数据比较方便,能根据负载动态扩容,现在我们正好用来爬下数据分析一下。

数据源

processOn是比较常用的画图平台,它的模版也是比较丰富,但是基本上都要钱。。。
现在我们爬一下数据,看下这些推荐的模版标题的构成,即什么样的词汇比较容易被推荐,还有它的价格分布是怎样的
在这里插入图片描述

项目目录

config存储配置文件,dao负责链接数据库,logic下面就是具体的逻辑,包括爬虫、分析、词云分词。
在这里插入图片描述

爬虫

具体爬虫代码如下,这里才有异步存储,也正好测试下数据库的性能如何

import (
	"fmt"
	"github.com/anaskhan96/soup"
	"github.com/spf13/cast"
	"strings"
	"sync"
	"td_test/logic/wordcloud"
)

func Crawl(url string) error {
	res, err := soup.Get(url)
	if err != nil {
		return err
	}
	var wg sync.WaitGroup
	doc := soup.HTMLParse(res)
	// 模版列表
	tempList := doc.FindAll("div", "class", "list-item-content")
	for _, item := range tempList {
		// 模版详情数据
		detail := item.Find("div", "class", "temp-item-detail")
		title := detail.Find("h2").Text()
		// view clone like数量
		var countList []int
		for _, count := range detail.FindAll("span", "class", "count") {
			countList = append(countList, cast.ToInt(count.Text()))
		}
		// 获取价格
		owner := item.Find("div", "class", "temp-item-owner")
		priceStr := owner.Find("span", "class", "count").Text()
		var price float32
		if priceStr != "免费" {
			priceStr = strings.Trim(priceStr, "¥")
			price = cast.ToFloat32(priceStr)
		}
		// 异步存储
		go func() {
			wg.Add(1)
			defer wg.Done()
			saveToDB(title, countList, price)
			// 对标题进行分词并存储
			wordcloud.SplitTitleAndSave(title)
		}()
	}
	wg.Wait()
	return nil
}

分词

分词库用的是结巴分词,直接用它的精准模式即可

import (
	"github.com/yanyiwu/gojieba"
)

var splitClient *gojieba.Jieba

func init() {
	splitClient = gojieba.NewJieba()
}
func SplitTitleAndSave(title string) {
	words := splitClient.Cut(title, true)
	for i := range words {
		m := &TemplateTitleWordModel{Word: words[i]}
		m.Save()
	}
	return
}

分析词云和价格饼状图

词云和饼状图都是用的github.com/go-echarts/go-echarts,使用比较简单,词云需要把数据从数据库中提取出来塞进去就好了,词云代码:

func getTitleListFromDB() []opts.WordCloudData {
	var wordList []string
	dao.GetDB().Raw("select word from template_title_words").Scan(&wordList)
	wordMap := make(map[string]int)
	for i := range wordList {
		wordMap[wordList[i]]++
	}
	ans := make([]opts.WordCloudData, 0)
	for k, v := range wordMap {
		ans = append(ans, opts.WordCloudData{Value: v, Name: cast.ToString(k)})
	}
	return ans
}
func createWordCloud(title string, data []opts.WordCloudData) {
	wc := charts.NewWordCloud()
	wc.SetGlobalOptions(charts.WithTitleOpts(opts.Title{Title: title}))
	wc.AddSeries(title, data).
		SetSeriesOptions(
			charts.WithWorldCloudChartOpts(
				opts.WordCloudChart{
					SizeRange: []float32{40, 80},
					Shape:     "cardioid",
				}),
		)
	f, _ := os.Create(fmt.Sprintf("wordcloud_%s.html", title))
	_ = wc.Render(f)
}

生成的词云如下
在这里插入图片描述
价格分布如下
在这里插入图片描述

小结

可以看到,标题中流程图词汇占比最高,价格中五块钱的模版占比最高,其次是3块钱的,再其次是免费的。
TDSQL-C Serverless使用体验上还不错,比较丝滑,感觉和远程数据库差不多,它动态扩缩容能力也能让我们少操点心


http://www.niftyadmin.cn/n/4944015.html

相关文章

iOS textView支持超链接跳转

将某些文字变成高量可以点击的超链接核心功能代码 attri.addAttribute(NSAttributedString.Key.link, value:NSURL.init(string: "dctt:p/userPrivacy.html")!, range: NSRange.init(location: s.count - 4, length: 4) )textView.linkTextAttributes [NSAttributed…

第三届“赣政杯”网络安全大赛 | 赛宁筑牢安全应急防线

​​为持续强化江西省党政机关网络安全风险防范意识,提高信息化岗位从业人员基础技能,提升应对网络安全风险处置能力。由江西省委网信办、江西省发展改革委主办,江西省大数据中心、国家计算机网络与信息安全管理中心江西分中心承办&#xff0…

Web3 solidity订单池操作

前面一篇文章因为一些原因 被设为了进自己可见 需要的朋友可以私信我 之前 我们编写的程序上来看 交易所无非是一个代币的托管上 只是它会更加专业 本文 我们继续来看交易所的一个功能 叫游泳池 例如 我们 100grToken 兑换 1ETH 前提 我们的代币已经能被估值了 例如 你想用人…

Quivr 基于GPT和开源LLMs构建本地知识库 (更新篇)

一、前言 自从大模型被炒的越来越火之后,似乎国内涌现出很多希望基于大模型构建本地知识库的需求,大概在5月底的时候,当时Quivr发布了第一个0.0.1版本,第一个版本仅仅只是使用LangChain技术结合OpenAI的GPT模型实现了一个最基本的…

图数据库_Neo4j学习cypher语言_使用CQL命令002_删除节点_删除属性_结果排序Order By---Neo4j图数据库工作笔记0006

然后我们再来看如何删除节点 可以看到首先 我们这里 比如我要删除张三 可以看到 match (n:student) where n.name = "张三" delete n 这样就是删除了student集合中,name是张三的节点 然后我们再来看 如何来删除关系 match (n:student)-[r]->(m:student) where…

java面试基础 -- ArrayList 和 LinkedList有什么区别

目录 基本介绍 有什么不同?? ArrayList的扩容机制 ArrayLIst的基本使用 基本介绍 还记得我们的java集合框架吗, 我们来复习一下, 如图: 可以看出来 ArrayList和LinkedList 都是具体类, 他们都是接口List的实现类. 但是他们底层的逻辑是不同的, 相信学过这个的应该大概有…

[机器学习]特征工程:特征降维

特征降维 1、简介 特征降维是指通过减少特征空间中的维度,将高维数据映射到一个低维子空间的过程。 在机器学习和数据分析中,特征降维可以帮助减少数据的复杂性、降低计算成本、提高模型性能和可解释性,以及解决维度灾难等问题。特征降维通…

C# WPF 中 外部图标引入iconfont,无法正常显示问题 【小白记录】

wpf iconfont 外部图标引入&#xff0c;无法正常显示问题。 1. 检查资源路径和引入格式是否正确2. 检查资源是否包含在程序集中 1. 检查资源路径和引入格式是否正确 正确的格式&#xff0c;注意字体文件 “xxxx.ttf” 应写为 “#xxxx” <TextBlock Text"&#xe7ae;…