数据集

因为数据量庞大,使用本地的 CSV 数据进行测试。

后续改进 CSV 文件保存到 mongodb 数据库,便于聚合查询。

数据分词

我们需要一个分词器将这些数据进行分词,用到的是 Golang 版的 jieba 库如下:

"github.com/go-ego/gse"

最理想的分词器是将长短句中的名词进行提取,本 demo 使用自带的分词器。根据官方示例进行数据分词:

package utilimport ("flag""fmt""log""os""regexp""github.com/go-ego/gse""github.com/go-ego/gse/hmm/idf""github.com/go-ego/gse/hmm/pos"
)var (seg    gse.SegmenterposSeg pos.Segmenter)// 分词库初始化
func init() {// Loading the default dictionaryerr := seg.LoadDict()// Loading the default dictionary with embed//err := seg.LoadDictEmbed()// Loading the traditional chinese dictionary//err := seg.LoadDict("zh_t")// 加载停用词//err := seg.LoadDict("../data/stopwords/baidu_stopwords.txt")//err := seg.LoadDict("../data/stopwords/cn_stopwords.txt")//err := seg.LoadDict("../data/stopwords/hit_stopwords.txt")//err := seg.LoadDict("../data/stopwords/scu_stopwords.txt")if err != nil {log.Println(err)return}
}func GetName(t string) {//cut := seg.Cut(t)cut := seg.CutSearch(t, true)cut = seg.Trim(cut)fmt.Println("cut all: ", cut)saveAsFile("NameArray.txt", cut)
}func saveAsFile(fileName string, data []string) {fp, _ := os.OpenFile(fileName, os.O_CREATE|os.O_APPEND|os.O_RDWR, os.ModeAppend|os.ModePerm) // 读写方式打开defer fp.Close()for _, v := range data {fp.WriteString(v + "\n")}
}

以上代码包括的官方示例和根据示例进行数据的分词,将分词结果保存为 txt 文件:

以回车符为标志,保存分词结果,是为了后续能够随机地取单词,通过行数的随机数生成,就可以随机读取单词,达到随机取词效果。

随机参数

根据时间种子进行随机数生成,返回十个随机单词:

package utilimport ("bufio""io""log""math/rand""os""time"
)func GenerateName() {// 时间戳作为随机种子rand.Seed(time.Now().Unix())//getNameFile("../test/NameArray.txt")for i := 0; ; {random := rand.Intn(16497)name := ReadLine("../test/NameArray.txt", random, 3*2)if len(name) > 0 {log.Println(name)i++if i > 10 {break}}}
}func ReadLine(fileName string, lineNumber, length int) string {file, _ := os.Open(fileName)fileScanner := bufio.NewScanner(file)lineCount := 1for fileScanner.Scan() {if lineCount == lineNumber {name := fileScanner.Text()if len(name) == length {return name} else {//log.Println(fileScanner.Text(), len(fileScanner.Text()), length)return ""}break}lineCount++}defer file.Close()return ""
}func getNameFile(fileName string) {fp, e := os.OpenFile(fileName, os.O_RDONLY, 0644)if e != nil {log.Println(e)}defer fp.Close()//读入缓存buff := bufio.NewReader(fp)for {//以'\n'为结束符读入一行line, e := buff.ReadString('\n')if e != nil || io.EOF == e {log.Println(e)break}log.Println(line)}
}

2022/05/04 17:17:40 绿波
2022/05/04 17:17:40 吹愁
2022/05/04 17:17:40 出于
2022/05/04 17:17:40 城中
2022/05/04 17:17:40 江山
2022/05/04 17:17:40 九十
2022/05/04 17:17:40 天涯
2022/05/04 17:17:40 燕尾
2022/05/04 17:17:40 草色
2022/05/04 17:17:40 绿水
2022/05/04 17:17:40 心上

由输出结果可见,分词结果和随机参数效果并不是很好,需要后续改进。

分词改进

func GetName(t string) {po := seg.Pos(t, true)//fmt.Println("pos: ", po)po = seg.TrimWithPos(po, "zg", "x", "v", "i", "c", "r", "l")//po = seg.TrimWithPos(po, "zg", "x", "v")//fmt.Println("trim pos: ", po)var cut []stringfor _, v := range po {if len(v.Text) > 6 {//log.Println(v.Text, v.Pos)} else {log.Println(v.Text, v.Pos)cut = append(cut, v.Text)}}//cut := seg.Cut(t)//cut := seg.CutSearch(t, true)//cut = seg.Trim(cut)//fmt.Println("cut all: ", cut)saveAsFile("NameArray.txt", cut)}

使用 TrimWithPos 剔除一些特殊的词语,尽量保留名词,效果如下:

基于古诗词的名字生成器相关推荐

  1. ​为孩子起个名,用深度学习技术创建宝宝名字生成器

    全文共4158字,预计学习时长12分钟 来源:Pexels 你喜欢自己的名字吗?或者你知道自己名字有哪些特殊含义吗? 笔者小时候总是很讨厌被叫做戴尔 (Dale).这主要是因为,自己对 "戴 ...

  2. spring系列——BeanNameGenerator接口(bean名字生成器)

    目录 1.BeanNameGenerator 接口 2.AnnotationBeanNameGenerator 类 3.DefaultBeanNameGenerator 类 spring容器是通过be ...

  3. 「重磅」Python自创软件名字生成器:1.0-1.7

    目录 1.0建造软件主体框架: 1.1查看更新记录: 1.1.2修复bug: 1.2增强AI学习: 1.7完善AI学习系统: 1.7.X修复一系列bug: 总代码: 1.0建造软件主体框架: 前几天作 ...

  4. 「干货不得不看」Python自创软件名字生成器:1.9-2.5

    目录 1.9添加设置功能 知识点:列表清空 2.0添加词库 知识点:列表的使用 2.2修复AIbug,增强AI学习 知识点:创造文件 2.5增加保存功能 总代码: 关于更新的问题: 1.9添加设置功能 ...

  5. java 实现画函数图像_函数图像生成器 [基于JAVA的图像生成器设计与实现]

    摘要:Java是一种可以撰写跨平台应用软件的面向对象的程序设计语言.Java技术具有卓越的通用性.高效性.平台移植性和安全性.该文基于JAVA语言,在介绍JAVA概念的基础上,实现了图像生成器的简单设 ...

  6. 结队编程-基于gui的四则运算生成器

    成员:卢少锐 201421123027.刘存201421033023 coding.net地址 1.需求分析:除了实现四则运算的功能外,还添加了计时器功能和语言选择功能 2.程序设计:这次作业是基于上 ...

  7. 名字生成器 php,中文名字随机生成器

    三叔2016-10-27 15:39:441楼 下班没事干凑凑热闹, 说说我看到这个问题的思路及抄码记录 1. 为了让生成的名字看起来像名字, 就像一楼说的, 要分姓和名 2. 先整姓 找找百家姓, ...

  8. 名字生成器 php,php生成器对象

    当一个生成器函数被第一次调用,会返回一个内部Generator类的对象. 这个对象以和前台迭代器对象几乎同样的方式实现了Iterator 接口. Generator 类中的大部分方法和Iterator ...

  9. HTML基于Vue实现Cron生成器

    效果图如下: 实现代码: <!DOCTYPE html> <html lang="en"><head><meta charset=&quo ...

  10. oracle 全局id,基于SnowFlake 全局ID 生成器 go-id-worker

    snowflake的结构如下(每部分用-分开): 0 - 0000000000 0000000000 0000000000 0000000000 0 - 00000 - 00000 - 0000000 ...

最新文章

  1. 设计模式----组合模式UML和实现代码
  2. SpringMVC深度探险(二) —— SpringMVC概览
  3. 记录 之 tensorflow中几个常用的函数:tf.unstack,tf.concat() 和 tf.stack() 等
  4. 学习javascript_使用5行JavaScript进行机器学习
  5. 1360E. Polygon
  6. 设计模式-行为型模式-责任链模式
  7. 游戏脚本在移动游戏设计中的作用_游戏设计中道具设计分步解说
  8. Python定时任务框架APScheduler
  9. UiPath如何实现暂停功能?
  10. Vijos P1975 扫雷游戏【谜题】
  11. 【C++编程技巧】根据字符串中的指定字符作为分界将字符串拆分
  12. Java 注解Annotation总结二
  13. 半全局匹配算法:SGBM
  14. 300多个地级市GDP及第一、二、三产业占比数据(1990-2021年)
  15. 破解Navicat全家桶
  16. MSP430 UART(一)
  17. python拼接字符串的方法,Python2中文字符串拼接
  18. 新浪股票接口 php,通过新浪股票行情接口,怎么判断当天除权除息的股票?
  19. MeterSphere使用分享 | 使用MeterSphere进行接口测试
  20. Django计算机毕业设计JAVA高校田径运动会管理(程序+LW)Python

热门文章

  1. 深度学习——安装Nvidia 驱动(亲测有效)
  2. 注册github邮箱验证收不到邮件问题
  3. GMM 简介与 Stata 实现
  4. 声势浩大发展云服务的金蝶,如今“破茧”了吗
  5. C++中的extern
  6. 解读全新闪存FlashSystem 9100
  7. 5大可以赚钱的视频平台,及收益渠道!
  8. 要重复多少次变成潜意识_量变到质变,首先要做的是不断重复
  9. AJAX(七)jsonp实战--天气预报
  10. perf_event 事件类型与分类