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 库,它提供了多种功能来管理和操作词汇表、停用词、敏感词等文本资源。

主要功能

  1. 词表加载与管理
  2. 停用词过滤
  3. 敏感词检测与过滤
  4. 关键词提取
  5. 词频统计

安装

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 文本处理库,特别适合需要处理词表、过滤文本、提取关键词等场景。它的特点包括:

  1. 简单易用的 API 设计
  2. 支持多种词表格式
  3. 提供多种文本处理算法
  4. 良好的性能优化选项
  5. 可扩展的架构设计

通过合理使用 go-words,可以大大简化 Golang 项目中的文本处理任务,提高开发效率。

回到顶部