golang俄语姓名格变位处理插件库petrovich的使用
Golang俄语姓名格变位处理插件库petrovich的使用
Petrovich是一个用于将俄语姓名变格到指定语法格的库。这是Go语言版本的实现。
安装
go get github.com/striker2000/petrovich
使用方法
所有函数都接受三个参数:主格形式的姓名、性别和语法格。
完整示例
package main
import (
"fmt"
"github.com/striker2000/petrovich"
)
func main() {
// 处理名字(名)
firstName := petrovich.FirstName("Кузьма", petrovich.Male, petrovich.Genitive)
fmt.Println(firstName) // 输出: "Кузьмы"
// 处理中间名(父称)
middleName := petrovich.MiddleName("Сергеевич", petrovich.Male, petrovich.Instrumental)
fmt.Println(middleName) // 输出: "Сергеевичем"
// 处理姓氏(姓)
lastName := petrovich.LastName("Петров-Водкин", petrovich.Male, petrovich.Prepositional)
fmt.Println(lastName) // 输出: "Петрове-Водкине"
}
性别选项
有效的性别值包括:
petrovich.Androgynous
(中性)petrovich.Male
(男性)petrovich.Female
(女性)
语法格列表
下表列出了所有支持的语法格:
Case | 格(俄语) | 问题(俄语) |
---|---|---|
petrovich.Nominative |
Именительный | Кто? |
petrovich.Genitive |
Родительный | Кого? |
petrovich.Dative |
Дательный | Кому? |
petrovich.Accusative |
Винительный | Кого? |
petrovich.Instrumental |
Творительный | Кем? |
petrovich.Prepositional |
Предложный | О ком? |
更多关于golang俄语姓名格变位处理插件库petrovich的使用的实战教程也可以访问 https://www.itying.com/category-94-b0.html
1 回复
更多关于golang俄语姓名格变位处理插件库petrovich的使用的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html
Golang俄语姓名格变位处理库petrovich使用指南
petrovich是一个用于处理俄语姓名格变位的Golang库,它可以根据俄语的语法规则将姓名(名字、中间名和姓氏)变位到不同的格(падежи)。
安装
go get github.com/petrovich/petrovich-golang
基本用法
1. 初始化
首先需要初始化petrovich:
import "github.com/petrovich/petrovich-golang/petrovich"
p, err := petrovich.New()
if err != nil {
log.Fatal(err)
}
2. 支持的格
petrovich支持俄语的6个格:
const (
Nominative Case = "nominative" // именительный (кто? что?)
Genitive Case = "genitive" // родительный (кого? чего?)
Dative Case = "dative" // дательный (кому? чему?)
Accusative Case = "accusative" // винительный (кого? что?)
Instrumental Case = "instrumental" // творительный (кем? чем?)
Prepositional Case = "prepositional" // предложный (о ком? о чём?)
)
3. 变位示例
// 名字变位
firstName := "Александр"
genitiveFirstName, err := p.FirstName(firstName, petrovich.Genitive, petrovich.Male)
if err != nil {
log.Fatal(err)
}
fmt.Println(genitiveFirstName) // 输出: Александра
// 姓氏变位
lastName := "Пушкин"
dativeLastName, err := p.LastName(lastName, petrovich.Dative, petrovich.Male)
if err != nil {
log.Fatal(err)
}
fmt.Println(dativeLastName) // 输出: Пушкину
// 中间名变位
middleName := "Сергеевич"
instrumentalMiddleName, err := p.MiddleName(middleName, petrovich.Instrumental, petrovich.Male)
if err != nil {
log.Fatal(err)
}
fmt.Println(instrumentalMiddleName) // 输出: Сергеевичем
4. 性别处理
petrovich需要知道姓名的性别才能正确变位:
const (
Male Gender = "male"
Female Gender = "female"
Androgynous Gender = "androgynous"
)
高级用法
1. 批量处理
fullName := struct {
FirstName string
MiddleName string
LastName string
}{
FirstName: "Анна",
MiddleName: "Андреевна",
LastName: "Ахматова",
}
// 将所有部分变位到属格
genitive := struct {
FirstName string
MiddleName string
LastName string
}{}
genitive.FirstName, _ = p.FirstName(fullName.FirstName, petrovich.Genitive, petrovich.Female)
genitive.MiddleName, _ = p.MiddleName(fullName.MiddleName, petrovich.Genitive, petrovich.Female)
genitive.LastName, _ = p.LastName(fullName.LastName, petrovich.Genitive, petrovich.Female)
fmt.Printf("%s %s %s", genitive.FirstName, genitive.MiddleName, genitive.LastName)
// 输出: Анны Андреевны Ахматовой
2. 自定义规则
petrovich允许添加自定义规则来处理特殊情况:
customRules := petrovich.Rules{
FirstName: map[petrovich.Gender]petrovich.Rule{
petrovich.Male: {
Exceptions: []petrovich.RulePart{
{
Test: []string{"Джон"},
Mods: []string{"", "а", "у", "", "ом", "е"},
Tags: []string{},
Gender: petrovich.Male,
},
},
},
},
}
p, err := petrovich.NewWithRules(customRules)
if err != nil {
log.Fatal(err)
}
name := "Джон"
genitive, _ := p.FirstName(name, petrovich.Genitive, petrovich.Male)
fmt.Println(genitive) // 输出: Джона
注意事项
- 库主要针对俄语姓名设计,处理其他斯拉夫语系姓名可能不准确
- 某些罕见的姓名形式可能无法正确处理
- 性别必须正确指定,否则变位可能不正确
- 对于外来姓名(非斯拉夫语系),结果可能不符合预期
性能考虑
petrovich使用预定义的规则进行变位,性能较高。对于批量处理大量姓名,建议:
- 重用petrovich实例
- 并行处理独立的姓名变位
- 缓存常见姓名的变位结果
完整示例
package main
import (
"fmt"
"log"
"github.com/petrovich/petrovich-golang/petrovich"
)
func main() {
p, err := petrovich.New()
if err != nil {
log.Fatal(err)
}
// 处理男性姓名
maleName := "Иван Иванович Иванов"
genitive := struct {
FirstName string
MiddleName string
LastName string
}{}
genitive.FirstName, _ = p.FirstName("Иван", petrovich.Genitive, petrovich.Male)
genitive.MiddleName, _ = p.MiddleName("Иванович", petrovich.Genitive, petrovich.Male)
genitive.LastName, _ = p.LastName("Иванов", petrovich.Genitive, petrovich.Male)
fmt.Printf("Родительный падеж: %s %s %s\n", genitive.FirstName, genitive.MiddleName, genitive.LastName)
// 输出: Родительный падеж: Ивана Ивановича Иванова
// 处理女性姓名
femaleName := "Мария Петровна Сидорова"
dative := struct {
FirstName string
MiddleName string
LastName string
}{}
dative.FirstName, _ = p.FirstName("Мария", petrovich.Dative, petrovich.Female)
dative.MiddleName, _ = p.MiddleName("Петровна", petrovich.Dative, petrovich.Female)
dative.LastName, _ = p.LastName("Сидорова", petrovich.Dative, petrovich.Female)
fmt.Printf("Дательный падеж: %s %s %s\n", dative.FirstName, dative.MiddleName, dative.LastName)
// 输出: Дательный падеж: Марии Петровне Сидоровой
}
petrovich库为处理俄语姓名格变位提供了简单而强大的工具,非常适合需要正确显示俄语姓名变位的应用场景。