golang俄语姓名格变位处理插件库petrovich的使用

Golang俄语姓名格变位处理插件库petrovich的使用

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) // 输出: Джона

注意事项

  1. 库主要针对俄语姓名设计,处理其他斯拉夫语系姓名可能不准确
  2. 某些罕见的姓名形式可能无法正确处理
  3. 性别必须正确指定,否则变位可能不正确
  4. 对于外来姓名(非斯拉夫语系),结果可能不符合预期

性能考虑

petrovich使用预定义的规则进行变位,性能较高。对于批量处理大量姓名,建议:

  1. 重用petrovich实例
  2. 并行处理独立的姓名变位
  3. 缓存常见姓名的变位结果

完整示例

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库为处理俄语姓名格变位提供了简单而强大的工具,非常适合需要正确显示俄语姓名变位的应用场景。

回到顶部