golang代码实例库

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 3845|回复: 0

golang:stringosim比较两个字符串距离/相似度

[复制链接]

82

主题

82

帖子

486

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
486
发表于 2022-6-10 00:01:58 | 显示全部楼层 |阅读模式
实例说明
我们有时候需要比较两个字符串的相似性,这里介绍一个包stringosim
翻译一下就是:
这个包的计划是实现不同的字符串距离/相似度函数,如列文什坦(标准化、加权、达梅罗)、贾罗-温克勒、贾卡德索引、欧几里德距离、汉明距离。
通过实例,我们可以看到,stringosim包提供了好几种比较的方法。
1)我们需要根据自己业务实际情况,通过测试,看那种方法效果好,然后再使用哪种。
2)支持中文比对,当然,我们也可以将中文转换为拼音后再进行比较。转换方法如:http://www.golangcodes.com/forum ... &extra=page%3D1

更多实例参见:https://github.com/dexyk/stringosim

实例代码
[Golang] 纯文本查看 复制代码
package main

import (
	"fmt"
	"github.com/dexyk/stringosim"
)

func main() {
	// Jaccard
	// Jaccard距离可以通过设置n-gram的大小来计算,这将用于比较。如果省略了该大小,则将使用默认值1。
	// 输出分值越小表示两者越接近
	srcTxt := "我是中国人"
	targetTxt := "我美国人"
	fmt.Println(stringosim.Jaccard([]rune(srcTxt), []rune(targetTxt), []int{1}))
	// 0.4666666666666667
	fmt.Println(stringosim.Jaccard([]rune(srcTxt), []rune(targetTxt), []int{2}))
	// 0.6111111111111112
	fmt.Println(stringosim.Jaccard([]rune(srcTxt), []rune(targetTxt), []int{3}))
	// 0.7222222222222222

	srcTxt = "我是中国人"
	targetTxt = "我中国人"
	fmt.Println(stringosim.Jaccard([]rune(srcTxt), []rune(targetTxt), []int{1}))
	// 0.16666666666666663
	fmt.Println(stringosim.Jaccard([]rune(srcTxt), []rune(targetTxt), []int{2}))
	// 0.33333333333333337
	fmt.Println(stringosim.Jaccard([]rune(srcTxt), []rune(targetTxt), []int{3}))
	// 0.4666666666666667

	// Jaro and Jaro-Winkler
	// 值越大,则越相似
	fmt.Println(stringosim.Jaro([]rune(srcTxt), []rune(targetTxt)))
	// 0.9333333333333332
	fmt.Println(stringosim.JaroWinkler([]rune(srcTxt), []rune(targetTxt)))
	// 0.94

	// QGram
	// 越小越相似
	fmt.Println(stringosim.QGram([]rune(srcTxt), []rune(targetTxt)))
	// 5

	// Cosine
	// 越小越相似
	fmt.Println(stringosim.Cosine([]rune(srcTxt), []rune(targetTxt)))
	// 0.19417703597461977

	// Levenshtein
	// 越小越相似
	fmt.Println(stringosim.Levenshtein([]rune(srcTxt), []rune(targetTxt)))
	// 1
}



回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|golang代码实例库 ( 粤ICP备2021162396号 )

GMT+8, 2024-11-3 06:05 , Processed in 0.033317 second(s), 29 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表