emozi

package module
v0.0.0-...-9d52013 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Feb 20, 2024 License: AGPL-3.0 Imports: 11 Imported by: 0

README

EMOZI

See My Viedo

参考古埃及圣书体设计的一种基于颜文字的汉字抽象转写法
🐑🚬🧗👤🕸️😐🧗✍️👈🌞😨🏠🌹🧦😨👥🌹🔐😨💦⬅️☀️😨🏡💦💡🍉🌱🍵💡🧗🪓🍆👔😨🐶


命令行工具

位于cmd文件夹。

用法: [-h|f|nr] [-db 字.db] [-d 🌹‪🐱⁢🐴‭👩] [-e 好] 形声字选择1 形声字选择2 ...
  -a string
        添加一个汉字到附加库
  -d string
        解码颜文字为汉字序列
  -db string
        符合规范的查询数据库位置, 不存在则会自动释放到该路径. (default "字.db")
  -deloverlay int
        删除一个附加库中的字
  -delradical
        删除-r指定的部首的记录
  -e string
        编码汉字序列为颜文字
  -f    强制解码并非由本程序生成的颜文字序列
  -h    显示帮助信息
  -i    指定汉字-a和带声调的拼音-p以计算其全局唯一ID
  -nr
        不随机选取所有读音相近的颜文字
  -p string
        带声调的拼音
  -r string
        指定欲编辑的部首
  -re string
        指定部首对应的颜文字
  -stabilize int
        固定附加库中的字到主库

下面是一些用例。

计算一个字的国际音标、部首、全局ID

该计算不查数据库, 完全与数据库无关.

go run cmd/main.go -i -a 哦 -p o
文字: 哦 拼音IPA: 0 ɔ 轻声 ID: 93346820784388
程序处理结束

查询库中记录的字的信息

go run cmd/main.go -a 行
查询到汉字 行 的记录:
0)      #149859999752449 行 [ɕ, iŋ, 阳平] 从行 xing xínɡ
1)      #149859999554817 行 [x, ɑŋ, 阳平] 从行 hang háng
程序处理结束

编码

注意: 可以指定-nr参数从而使编解码结果唯一。

go run cmd/main.go -e 好
编码结果: 🌹‪🐱⁢🐴‭👩
程序处理结束

解码

go run cmd/main.go -d 🌹‪🐱⁢🐴‭👩
解码结果: 好
程序处理结束

添加一个字到附加库

go run cmd/main.go -e 的
编码结果: 的‬🈳🈳⁤🈳
程序处理结束

go run cmd/main.go -a 的 -p de -r 日 -re 🌞
已添加汉字: 的 读音: t, ɤ, 轻声 部首: 日 ID: 130309308023300
已添加部首: 日 颜文字: 🌞
查询到汉字 的 的记录:
0)      #130309308023300 的 [t, ɤ, 轻声] 从日 de de
程序处理结束

go run cmd/main.go -e 的 
编码结果: 🔪‬😋‭😯‍🌞
程序处理结束

指定多音字

go run cmd/main.go -e 你好,世界!看看多音字:行。
编码结果: 🥛⁩👔⁨🐴‍👤🌸🐱🐴👩,📙☀️😨🌍🦶👴😨👨‍🌾!👖🔐🍉👁️😭🔐🍉👁️🫘🌀🍉🪩💊🎵🍉🎵⬅🌅😨🚼:[✨🦅🧗‍♂️⛕|🐵👍🧗‍♂️⛕]。
可选形声: [2]
在参数中指定形声字编号(从0开始)以生成不带中括号的编码结果
程序处理结束

go run cmd/main.go -e 你好,世界!看看多音字:行。 1
编码结果: 🥛👔⁨🐴👤🌼😺🐴👩,🏔️🌅😨🌍➖👴😨👨‍🌾!👖🔐🍉👁️👖🔐🍉👁️🔪🌀🍉🪩🦷🎵🍉🎵⬅☀️😨🚼:🔥👍🧗⛕。
程序处理结束

go run cmd/main.go -d "🥛👔⁨🐴👤🌼😺🐴👩,🏔️🌅😨🌍➖👴😨👨‍🌾!👖🔐🍉👁️👖🔐🍉👁️🔪🌀🍉🪩🦷🎵🍉🎵⬅☀️😨🚼:🔥👍🧗⛕。"
解码结果: [你|儗]好,世[界|畍]!看看多音字:行。
程序处理结束

作为库引用

特别注意

package使用了自修改的modernc.org/sqlite数据库,如欲引入本包,需要在go.mod添加如下替换项。

replace modernc.org/sqlite => github.com/fumiama/sqlite3 v1.20.0-with-win386

replace github.com/remyoudompheng/bigfft => github.com/fumiama/bigfft v0.0.0-20211011143303-6e0bfa3c836b

拼音识别拆分

将带声调的拼音拆分为以国际音标表示的声母韵母。

s, y, t, err := emozi.SplitPinyin("jiǒng")
if err != nil {
    panic(err)
}
fmt.Println(s, y, tone) // tɕ i̯ʊŋ 上声

查汉字

查一个汉字在数据库中的记录。

coder, err := emozi.NewCoder(time.Minute)
if err != nil {
    panic(err)
}
defer coder.Close()
lst, err := coder.Lookup('行')
if err != nil {
    panic(err)
}
fmt.Println("查询到汉字 行 的记录:")
    for i, x := range lst {
    fmt.Printf("%d)\t%s\n", i, x)
}
/*
查询到汉字 行 的记录:
0)      #149859999752449 行 [ɕ, iŋ, 阳平] 从行 xing xínɡ
1)      #149859999554817 行 [x, ɑŋ, 阳平] 从行 hang háng
*/

Documentation

Index

Constants

View Source
const (
	G = 'ɡ'
	A = 'ɑ'
)

Variables

View Source
var EmoziDatabasePath = "字.db"

DatabasePath 字数据库的路径 如找不到会向对应路径写入内嵌的字数据库

View Source
var (
	ErrInvalidEmoziString = errors.New("invalid EmoziString")
)
View Source
var (
	ErrNoSuchChar = errors.New("no such char")
)

Functions

func CharGlobalID

func CharGlobalID(w rune, f string) (int64, error)

CharGlobalID 计算全局唯一字表ID

func SplitPinyin

func SplitPinyin(pf string) (sm, ym, sd string, err error)

SplitPinyin 拆分带声调拼音

Types

type Coder

type Coder struct {
	// contains filtered or unexported fields
}

Coder encoder/decoder

func NewCoder

func NewCoder(cachettl time.Duration) (c Coder, err error)

NewCoder israndom 随机挑选声母韵母的颜文字, 否则固定使用第一个

func (*Coder) AddChar

func (c *Coder) AddChar(w, r, p, f string) (int64, string, error)

AddChar 向主库添加一个新字

w: 字, r: 部首, p: 不带声调的拼音(可空), f: 带声调的拼音

func (*Coder) AddCharOverlay

func (c *Coder) AddCharOverlay(w, r, p, f string) (int64, string, error)

AddCharOverlay 向附加库添加一个新字, 覆盖在主库之上

w: 字, r: 部首, p: 不带声调的拼音(可空), f: 带声调的拼音 返回: 字表ID, 文字描述, error

func (*Coder) AddRadical

func (c *Coder) AddRadical(r rune, e string) error

AddRadical 添加一个部首

func (*Coder) Close

func (c *Coder) Close() error

Close ...

func (*Coder) Decode

func (c *Coder) Decode(es EmoziString, forcedecode bool) (string, error)

Decode 从 EmoziString 解码得到可能的文字序列

func (*Coder) DelChar

func (c *Coder) DelChar(id int64) error

DelChar 删除主库的一个字

func (*Coder) DelCharOverlay

func (c *Coder) DelCharOverlay(id int64) error

DelCharOverlay 删除附加库的一个字

func (*Coder) DelRadical

func (c *Coder) DelRadical(r rune) error

DelRadical 删除一个部首

func (*Coder) Encode

func (c *Coder) Encode(enableRandom bool, s string, selections ...int) (EmoziString, []int, error)

Encode 从汉字序列生成 EmoziString 返回 EmoziString 多音字选择数列表

func (*Coder) GetCharByID

func (c *Coder) GetCharByID(id int64) (w, r rune, p, f, desc string, err error)

GetCharByID ...

func (*Coder) LookupChar

func (c *Coder) LookupChar(ch rune) (explains []string, err error)

LookupChar 查一个汉字 (可能是多音字)

func (*Coder) LookupRadical

func (c *Coder) LookupRadical(r rune) string

LookupRadical 查一个部首

func (*Coder) StabilizeCharFromOverlay

func (c *Coder) StabilizeCharFromOverlay(id int64) (string, error)

StabilizeCharFromOverlay 将附加库中的一项固定到主库

type EmoziString

type EmoziString string

EmoziString 一个颜文字汉字转写串, 包含串头 校验字节数*2 字节校验和

func WrapRawEmoziString

func WrapRawEmoziString(s string) EmoziString

WrapRawEmoziString 为不包含串头的转写串加一个头使其成为合法 EmoziString

func (EmoziString) IsValid

func (es EmoziString) IsValid() bool

IsValid 判断是否是合法 EmoziString

func (EmoziString) String

func (es EmoziString) String() string

String 输出不包含串头的转写串

Directories

Path Synopsis
codegen

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL