fate — 八字五行起名算法引擎
基于八字五行·三才五格·周易卦象的智能起名算法引擎与命令行工具
English | 中文
| 分支 | 用途 | 模块路径 |
|---|---|---|
main / v4 |
开发主线(v4.x) | github.com/babyname/fate/v4 |
v3 |
Bugfix 维护(v3.x,仅修 bug) | github.com/babyname/fate |
feat-ent |
历史分支,已合并至 main | — |
v4 变更:模块路径从
github.com/babyname/fate升级为github.com/babyname/fate/v4, 引入 Ent ORM、chronos/v2、ExcellentTable 流式评分等特性。 如需使用 v3,请切换到v3分支。
- 八字计算 — 四柱八字、五行强弱、调候用神
- 双算法喜用神 — 平衡用神法 + 格局用神法(10种格局)
- 三才五格 — 81数大衍、阴阳五行、O(1)查找
- 周易卦象 — 64卦完整解读
- 五维评分 — 文化印象/五行八字/生肖/五格数理/音韵
- Go 1.22+
git clone https://github.com/babyname/fate.git
cd fate
go mod download适合快速生成名字列表,输出简洁高效:
# 生成名字
go run ./cmd/console name -s 张 -b "2024/06/15 10:30" -g boy
# 查看单个名字的详细分析
go run ./cmd/console name detail 峰 瑞 -s 张 -b "2024/06/15 10:30" -g boy
# 查看所有参数
go run ./cmd/console name -h参数说明:
| 参数 | 说明 | 示例 |
|---|---|---|
-s, --surname |
姓氏 | -s 张 |
-b, --born |
出生日期 | -b "2024/06/15 10:30" |
-g, --gender |
性别 | -g boy 或 -g girl |
--xiyong |
喜用神算法 | --xiyong balance 或 --xiyong geju |
--strictness |
五格筛选严格度 | --strictness moderate |
-f, --filter |
从结果中过滤指定汉字 | -f 病死 |
-o, --output |
输出到文件 | -o result.txt |
适合集成到其他 Go 项目中:
go get github.com/babyname/fate/v4package main
import (
"fmt"
"time"
"github.com/babyname/fate/v4"
"github.com/babyname/fate/v4/config"
)
func main() {
cfg := config.DefaultConfig()
f, err := fate.New(cfg)
if err != nil {
panic(err)
}
filter := fate.NewFilter(fate.FilterOption{
CharacterFilter: true,
CharacterFilterType: fate.CharacterFilterTypeDefault,
MinStroke: 3,
MaxStroke: 18,
RegularFilter: true,
DaYanFilter: true,
WuXingFilter: true,
AvoidCharacters: []string{"病", "死", "穷"},
})
s := f.NewSessionWithFilter(filter)
born, _ := time.Parse("2006/01/02 15:04", "2024/06/15 10:30")
input := &fate.Input{
Last: [2]string{"张", ""},
Born: born,
Sex: fate.SexBoy,
}
err = s.Start(input)
if err != nil {
panic(err)
}
s.Wait()
output := input.Output()
// Top 10 names with full analysis
for _, nr := range output.TopNames() {
fmt.Printf(" %s - 评分: %.1f (%s)\n", nr.FullName, nr.Score, nr.Grade)
}
// ExcellentTable: access the full top-10000 scored names
table := output.GetExcellentTable()
entries := table.TopN(10)
for _, e := range entries {
fmt.Printf(" %s%s - %.1f has_poetry=%v\n", e.Char1, e.Char2, e.Score, e.HasPoetry)
}
// Explore: random sampling with dedup and filter
explored := table.Explore(10, func(e fate.ExcellentEntry) bool {
return e.HasPoetry
})
for _, e := range explored {
fmt.Printf(" %s%s - %.1f\n", e.Char1, e.Char2, e.Score)
}
}核心 API:
| 类型 | 说明 |
|---|---|
fate.New(cfg) |
创建 Fate 实例 |
fate.NewSessionWithFilter(filter) |
创建带筛选条件的会话 |
fate.NewFilter(option) |
根据选项创建筛选器 |
fate.FilterOption{} |
筛选选项(笔画范围/五行/大衍/性别/AvoidCharacters等) |
fate.Input{} |
输入参数(姓氏/生日/性别) |
fate.Output |
输出结果(TopNames/ExcellentTable/CharMap) |
fate.Session |
会话接口(Start/Stop/Wait) |
fate.ExcellentTable |
流式 Top-N 数据结构(TryPush/Finalize/TopN/Explore) |
fate.ExcellentEntry |
名字条目(Char1/Char2/Score/Grade/HasPoetry) |
ExcellentTable 用法:
| 方法 | 说明 |
|---|---|
TryPush(entry) |
流式写入,min-heap 自动维护 Top-N |
Finalize() |
排序+构建索引,EE 完成后必须调用 |
TopN(n) |
取前 N 个最高分名字 |
Explore(count, filter) |
随机取 N 个,支持过滤+去重(shownSet 最多 100) |
MarkShown(char1, char2) |
标记已展示,避免重复 |
FindEntry(char1, char2) |
按字查找条目 |
Entries(offset, limit) |
分页查询 |
HeapLen() |
当前堆中元素数量 |
基于日主强弱,通过同党/异党力量对比取用神:
| 日主状态 | 用神 | 喜神 | 忌神 |
|---|---|---|---|
| 日主强 | 克我者(官杀) | 我克者+生我者 | 同我者(比劫) |
| 日主弱 | 生我者(印星) | 同我者(比劫) | 克我者+我生者 |
先定格局(正官/七杀/食神/伤官/正财/偏财/建禄/阳刃等10种),再根据格局取用神。
| 维度 | 权重 | 说明 |
|---|---|---|
| 文化印象 | 20% | 常用字、正体字、字义丰富度 |
| 五行八字 | 25% | 名字五行与喜用神匹配度 |
| 生肖 | 10% | 生肖与名字五行生克关系 |
| 五格数理 | 25% | 天/人/地/外/总格吉凶 |
| 音韵 | 20% | 姓名音韵和谐度 |
- Go 1.22+ — 主语言
- Ent ORM — 数据库 ORM
- SQLite3 — 数据存储
- chronos/v2 — 八字计算
- yi — 周易卦象
MIT License