golang文本资源与词表处理插件库go-words的使用
golang文本资源与词表处理插件库go-words的使用
简介
go-words是一个用于Golang项目的词表和文本资源库,为应用程序提供消息、警报、翻译、提示等文本内容。
安装
go get -u github.com/saleh-rahimzadeh/go-words
导入方式:
import (
"github.com/saleh-rahimzadeh/go-words"
"github.com/saleh-rahimzadeh/go-words/core"
)
/* 或者 */
import (
gowords "github.com/saleh-rahimzadeh/go-words"
core "github.com/saleh-rahimzadeh/go-words/core"
)
数据源格式
数据源是包含文本行的字符串或文件,每行由换行符分隔。每行必须包含一个键值对,键和值之间用分隔符字符分隔。
示例格式:
<key>=<value>
# 注释行
键值对示例:
示例 | 结果 |
---|---|
key1=value1 |
key1=value1 |
key2 =value2 |
key2=value2 |
key3= value3 |
key3=value3 |
key4 = value4 |
key4=value4 |
key5 = value5 |
key5=value5 |
key6 = value6 |
key6=value6 |
API类型
go-words包含3种不同类型的API:
API | 数据源 | 存储方式 | 数据源验证 | 资源使用 |
---|---|---|---|---|
WordsRepository |
string |
数组 | 实例化时 | 内存 |
WordsCollection |
string |
映射 | 实例化时 | 内存 |
WordsFile |
*os.File |
*os.File |
调用CheckError 时 |
CPU |
使用示例
基本使用示例
func main() {
const stringSource string = `
App = MyApp
Version = 1.0
Descriptin = An enterprise application
# Config Section
size = 100,200,300,400
left location = 10
right location = 20
load_position = top left
`
const separator = '='
const comment = '#'
var err error
// 创建WordsRepository实例
var wrd gowords.WordsRepository
wrd, err = gowords.NewWordsRepository(stringSource, separator, comment)
if err != nil {
panic(err)
}
// 获取值
value := wrd.Get("App")
println(value) // 输出: "MyApp"
// 查找值
value, found := wrd.Find("Version")
println(value, found) // 输出: "1.0", true
}
多语言支持示例
func main() {
const stringSource string = `
key1_EN = Value 1 English
key1_FA = Value 1 Farsi
key2_EN = Value 2 English
key2_FA = Value 2 Farsi
key3_EN = Value 3 English
key3_FA = Value 3 Farsi
`
const EN core.Suffix = "_EN"
const FA core.Suffix = "_FA"
var wrd gowords.WordsRepository
wrd, err := gowords.NewWordsRepository(stringSource, core.Separator, core.Comment)
if err != nil {
panic(err)
}
// 创建英文词表
wordsEN, err := gowords.NewWithSuffix(wrd, EN)
if err != nil {
panic(err)
}
// 创建波斯语词表
wordsFA, err := gowords.NewWithSuffix(wrd, FA)
if err != nil {
panic(err)
}
// 获取英文值
value1en := wordsEN.Get("key1")
println(value1en) // 输出: "Value 1 English"
// 获取波斯语值
value1fa := wordsFA.Get("key1")
println(value1fa) // 输出: "Value 1 Farsi"
}
注解格式化示例
func main() {
const stringSource string = `
key_named = Application {{name}} , Version {{ver}}.
key_indexed = Application {{1}} , Version {{2}}.
key_formatted = Application %s , Version %d.
`
var wRepository gowords.WordsRepository
wRepository, err := gowords.NewWordsRepository(stringSource, core.Separator, core.Comment)
if err != nil {
panic(err)
}
words, err := gowords.NewDoAnnotation(wRepository)
if err != nil {
panic(err)
}
// 命名注解
value1 := words.GetNamed("key_named", map[string]string{
"name": "MyAppX",
"ver": "111",
})
fmt.Println(value1) // 输出: "Application MyAppX , Version 111."
// 索引注解
value2 := words.GetIndexed("key_indexed", "MyAppQ", 333)
fmt.Println(value2) // 输出: "Application MyAppQ , Version 333."
// 格式化注解
value3 := words.GetFormatted("key_formatted", "MyAppN", 555)
fmt.Println(value3) // 输出: "Application MyAppN , Version 555."
}
性能基准测试
goos: linux
goarch: amd64
pkg: github.com/saleh-rahimzadeh/go-words
cpu: Intel(R) Core(TM) i3 CPU @ 2.93GHz
BenchmarkWordsCollection-4 20426679 62.60 ns/op 0 B/op 0 allocs/op
BenchmarkWordsRepository-4 65107 16248 ns/op 1 B/op 0 allocs/op
BenchmarkWordsFile-4 9357 191994 ns/op 19280 B/op 1001 allocs/op
总结
go-words提供了灵活的文本资源管理方案,支持多种存储方式和多语言处理,适用于各种Golang项目中的文本资源管理需求。
更多关于golang文本资源与词表处理插件库go-words的使用的实战教程也可以访问 https://www.itying.com/category-94-b0.html
1 回复
更多关于golang文本资源与词表处理插件库go-words的使用的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html
go-words: Golang 文本资源与词表处理插件库
go-words 是一个用于处理文本资源和词表的 Golang 库,它提供了多种功能来管理和操作词汇表、停用词、敏感词等文本资源。
主要功能
- 词表加载与管理
- 停用词过滤
- 敏感词检测与过滤
- 关键词提取
- 词频统计
安装
go get github.com/go-words/go-words
基本使用示例
1. 加载词表
package main
import (
"fmt"
"github.com/go-words/go-words"
)
func main() {
// 从文件加载词表
wordList, err := words.LoadFromFile("words.txt")
if err != nil {
panic(err)
}
// 或者从字符串切片创建
wordList = words.NewWordList([]string{"apple", "banana", "orange"})
fmt.Println("词表大小:", wordList.Size())
}
2. 停用词过滤
func stopWordsExample() {
// 加载停用词表
stopWords, _ := words.LoadStopWords("stopwords.txt")
text := "This is a sample text with some stop words"
tokens := strings.Fields(text)
// 过滤停用词
filtered := stopWords.Filter(tokens)
fmt.Println("原始:", tokens)
fmt.Println("过滤后:", filtered)
}
3. 敏感词检测
func sensitiveWordsExample() {
// 加载敏感词表
sensitiveWords, _ := words.LoadSensitiveWords("sensitive.txt")
text := "这是一段包含敏感词的文本,比如赌博和毒品"
// 检测敏感词
contains, foundWords := sensitiveWords.Contains(text)
if contains {
fmt.Println("发现敏感词:", foundWords)
} else {
fmt.Println("未发现敏感词")
}
// 替换敏感词
cleanText := sensitiveWords.Replace(text, "***")
fmt.Println("净化后文本:", cleanText)
}
4. 关键词提取
func keywordExtractionExample() {
text := "Golang是一种开源的编程语言,由Google开发,具有高效、简洁的特点"
// 创建关键词提取器
extractor := words.NewKeywordExtractor()
// 设置参数
extractor.SetTopK(5) // 提取前5个关键词
extractor.SetStopWords(words.DefaultChineseStopWords())
// 提取关键词
keywords := extractor.Extract(text)
fmt.Println("关键词:", keywords)
}
5. 词频统计
func wordFrequencyExample() {
text := "hello world hello golang world go go go"
// 创建词频统计器
counter := words.NewWordCounter()
// 统计词频
freq := counter.Count(text)
// 获取最常见的词
topWords := counter.MostCommon(3)
for _, word := range topWords {
fmt.Printf("%s: %d\n", word.Word, word.Count)
}
}
高级功能
1. 自定义词表处理
func customWordList() {
// 创建自定义词表处理器
processor := words.NewWordProcessor()
// 添加处理函数 - 转换为小写
processor.AddFunc(strings.ToLower)
// 添加处理函数 - 去除标点
processor.AddFunc(func(s string) string {
return strings.Trim(s, ".,!?;:")
})
words := []string{"Hello!", "World.", "GoLang"}
processed := processor.Process(words)
fmt.Println(processed) // ["hello", "world", "golang"]
}
2. 词表序列化与反序列化
func serializationExample() {
wordList := words.NewWordList([]string{"apple", "banana", "orange"})
// 序列化为JSON
jsonData, _ := wordList.ToJSON()
fmt.Println(string(jsonData))
// 从JSON反序列化
newWordList := &words.WordList{}
_ = newWordList.FromJSON(jsonData)
fmt.Println(newWordList.Words())
}
3. 组合使用多个词表
func combinedUsage() {
// 加载多个词表
techWords, _ := words.LoadFromFile("tech_words.txt")
productWords, _ := words.LoadFromFile("product_words.txt")
// 合并词表
combined := words.MergeWordLists(techWords, productWords)
// 去重
uniqueWords := combined.Unique()
fmt.Println("合并后词表大小:", uniqueWords.Size())
}
性能优化
对于大规模文本处理,go-words 提供了一些性能优化选项:
func performanceOptimization() {
// 使用并发处理的词频统计
counter := words.NewWordCounter().WithConcurrency(4)
largeText := "..." // 大文本数据
freq := counter.Count(largeText)
// 使用布隆过滤器优化敏感词检测
sensitiveWords := words.NewSensitiveWords().WithBloomFilter()
sensitiveWords.Load("sensitive_words.txt")
// 快速检测
contains := sensitiveWords.ContainsQuick("一些文本")
fmt.Println("包含敏感词:", contains)
}
总结
go-words 是一个功能丰富的 Golang 文本处理库,特别适合需要处理词表、过滤文本、提取关键词等场景。它的特点包括:
- 简单易用的 API 设计
- 支持多种词表格式
- 提供多种文本处理算法
- 良好的性能优化选项
- 可扩展的架构设计
通过合理使用 go-words,可以大大简化 Golang 项目中的文本处理任务,提高开发效率。