golang自然语言检测支持84种语言的插件库whatlanggo的使用

Golang自然语言检测支持84种语言的插件库whatlanggo的使用

简介

whatlanggo是一个用于Go语言的自然语言检测库,支持84种语言的识别。它具有以下特点:

  • 支持84种语言
  • 100%使用Go编写
  • 无外部依赖
  • 快速高效
  • 不仅能识别语言,还能识别文字脚本(拉丁文、西里尔文等)

安装

使用以下命令安装whatlanggo:

go get -u github.com/abadojack/whatlanggo

基本用法

下面是一个简单的使用示例:

package main

import (
	"fmt"

	"github.com/abadojack/whatlanggo"
)

func main() {
	// 检测文本语言
	info := whatlanggo.Detect("Foje funkcias kaj foje ne funkcias")
	
	// 输出检测结果:语言、脚本和置信度
	fmt.Println("Language:", info.Lang.String(), " Script:", whatlanggo.Scripts[info.Script], " Confidence: ", info.Confidence)
}

黑名单和白名单功能

whatlanggo支持通过黑名单和白名单来限制检测的语言范围:

package main

import (
	"fmt"

	"github.com/abadojack/whatlanggo"
)

func main() {
	// 黑名单示例 - 排除意第绪语(Ydd)
	options := whatlanggo.Options{
		Blacklist: map[whatlanggo.Lang]bool{
			whatlanggo.Ydd: true,
		},
	}

	info := whatlanggo.DetectWithOptions("האקדמיה ללשון העברית", options)
	fmt.Println("Language:", info.Lang.String(), "Script:", whatlanggo.Scripts[info.Script])

	// 白名单示例 - 只检测世界语(Epo)和乌克兰语(Ukr)
	options1 := whatlanggo.Options{
		Whitelist: map[whatlanggo.Lang]bool{
			whatlanggo.Epo: true,
			whatlanggo.Ukr: true,
		},
	}

	info = whatlanggo.DetectWithOptions("Mi ne scias", options1)
	fmt.Println("Language:", info.Lang.String(), " Script:", whatlanggo.Scripts[info.Script])
}

工作原理

语言识别原理

whatlanggo使用基于三元组语言模型的算法进行语言识别。这种算法是n-gram的一种特殊情况。核心思想来自Cavnar和Trenkle在1994年发表的论文《N-Gram-Based Text Categorization》。

可靠性计算

whatlanggo通过以下因素计算检测结果的可靠性:

  1. 给定文本中唯一三元组的数量
  2. 第一候选语言和第二候选语言之间的差异(代码中称为"rate")

这些因素构成了一个二维空间,通过阈值函数将其划分为"可靠"和"不可靠"区域。这个函数是一个双曲线,如下图所示:

Language recognition whatlang rust

系统要求

Go 1.8或更高版本

许可证

MIT许可证

致谢

whatlanggo是基于JavaScript的Franc库(MIT许可证)的衍生作品,由Titus Wormer开发。同时感谢greyblake(Potapov Sergey)创建了whatlang-rs,从中获得了灵感和算法。


更多关于golang自然语言检测支持84种语言的插件库whatlanggo的使用的实战教程也可以访问 https://www.itying.com/category-94-b0.html

1 回复

更多关于golang自然语言检测支持84种语言的插件库whatlanggo的使用的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


使用whatlanggo进行自然语言检测

whatlanggo是一个用Go编写的轻量级自然语言检测库,支持84种语言的识别。它基于n-gram算法和统计方法,具有快速、准确的特点。

安装

go get github.com/abadojack/whatlanggo

基本用法

1. 简单语言检测

package main

import (
	"fmt"
	"github.com/abadojack/whatlanggo"
)

func main() {
	text := "这是一段中文文本"
	info := whatlanggo.Detect(text)
	
	fmt.Printf("检测结果:\n")
	fmt.Printf("语言: %s\n", info.Lang.String())
	fmt.Printf("脚本: %s\n", info.Script.String())
	fmt.Printf("置信度: %.2f\n", info.Confidence)
	fmt.Printf("是否可靠: %v\n", info.IsReliable())
}

2. 带选项的检测

func detectWithOptions() {
	text := "This is a sample text in English with some 中文 mixed in."
	
	// 限制检测的语言范围
	options := whatlanggo.Options{
		Whitelist: map[whatlanggo.Lang]bool{
			whatlanggo.Eng: true,
			whatlanggo.Cmn: true,
		},
	}
	
	info := whatlanggo.DetectWithOptions(text, options)
	fmt.Printf("混合文本检测结果: %s (%.2f)\n", info.Lang.String(), info.Confidence)
}

3. 批量检测

func batchDetection() {
	texts := []string{
		"Bonjour tout le monde",  // 法语
		"こんにちは世界",          // 日语
		"Hola mundo",            // 西班牙语
		"Привет мир",            // 俄语
	}
	
	for _, text := range texts {
		info := whatlanggo.Detect(text)
		fmt.Printf("'%s' -> %s (%.2f)\n", text, info.Lang.String(), info.Confidence)
	}
}

高级功能

1. 获取所有支持的语言

func listAllLanguages() {
	fmt.Println("支持的84种语言:")
	for _, lang := range whatlanggo.Langs() {
		fmt.Println(lang.String())
	}
}

2. 自定义阈值

func detectionWithThreshold() {
	text := "This is a very short text"
	
	// 默认最小文本长度是10,可以修改
	whatlanggo.MinTextLength = 5
	
	info := whatlanggo.Detect(text)
	if info.IsReliable() {
		fmt.Printf("检测到语言: %s\n", info.Lang.String())
	} else {
		fmt.Println("文本太短或不可靠")
	}
}

性能优化

对于大量文本检测,可以重用Options对象:

func efficientBatchDetection() {
	texts := []string{
		"Lorem ipsum dolor sit amet",
		"天地玄黄 宇宙洪荒",
		"На берегу пустынных волн",
	}
	
	// 创建一次Options对象
	opts := whatlanggo.Options{
		Whitelist: map[whatlanggo.Lang]bool{
			whatlanggo.Eng: true,
			whatlanggo.Cmn: true,
			whatlanggo.Rus: true,
		},
	}
	
	for _, text := range texts {
		info := whatlanggo.DetectWithOptions(text, opts)
		fmt.Printf("检测结果: %s\n", info.Lang.String())
	}
}

注意事项

  1. whatlanggo对短文本(少于10个字符)的检测可能不可靠
  2. 混合语言的文本会返回主要语言的检测结果
  3. 对于某些相似语言(如塞尔维亚语和克罗地亚语),可能需要更长的文本来区分
  4. 置信度低于0.5的结果通常不可靠

whatlanggo是一个简单高效的库,适用于大多数语言检测场景。如果需要更高级的功能(如语言概率分布),可以考虑其他更复杂的库。

回到顶部