Go 正在查找2语句之间的匹配百分比

Go 正在查找2语句之间的匹配百分比,go,Go,我有以下两个字符串,这实际上意味着相同: GLOVES: LENGTH: 32 CM MATERIAL: NEOPRENE RUBBER FREE FLOW TEXT: RESISTANT TO WIDE RANGE OF GLOVES, TYPE: CHEMICAL RESISTANT, SIZE: 7, MATERIAL: NEOPRENE RUBBER, STANDARD: BS EN 388/BS EN 374, FFT: RESISTANT TO WIDE RANGE OF CHEMI

我有以下两个字符串,这实际上意味着相同:

GLOVES: LENGTH: 32 CM MATERIAL: NEOPRENE RUBBER FREE FLOW TEXT: RESISTANT TO WIDE RANGE OF GLOVES, TYPE: CHEMICAL RESISTANT, SIZE: 7, MATERIAL: NEOPRENE RUBBER, STANDARD: BS EN 388/BS EN 374, FFT: RESISTANT TO WIDE RANGE OF CHEMICALS SUCH AS ETHYLENE OXIDE IDEAL FOR LONG TERM HEAVY WORK IN CHEMICAL ENVIRONMENT MANUFACTURER REFERENCES: ORIGINAL_MNFR: POLYCO

我有1000多台这样的设备,手动操作非常困难,我尝试如下操作:

主程序包
进口(
“fmt”
“字符串”
)
func main(){
var str1=“氯丁橡胶耐化学品手套,尺寸:7;长度:32 cm;标准:BS EN 388;耐多种化学品,如环氧乙烷。品牌:Polyco,型号:Duraprene III或同等产品”
变量str2="手套:长度:32 CM材料:氯丁橡胶自由流动文本:耐多种手套,类型:耐化学性,尺寸:7,材料:氯丁橡胶,标准:BS EN 388/BS EN 374,FFT:耐多种化学品,如环氧乙烷,适用于化学环境中的长期繁重工作制造商参考:原装R:POLYCO“
cnt:=0
对于u,i:=范围字符串.字段(str1){
对于uj:=范围字符串.Fields(str2){
如果strings.ToLower(i)=strings.ToLower(j){
cnt+=1
}
}
}
fmt.Printf(“str1是:%d长度,str2是:%d长度,它们有;%d个常用词。”,len(str1),len(str2),cnt)
}
但是比赛很低,我得到:

str1的长度为:197,str2的长度为:358,它们有29个常用词。
我还尝试使用as:


//Golang的Levenshtein距离
包干管
输入“fmt”
func levenshtein(str1,str2[]符文)int{
s1len:=len(str1)
s2len:=len(str2)
列:=make([]int,len(str1)+1)

对于y:=1;y它们可能描述了相同的东西,但您使用的是不了解这一点的算法来比较它们

例如,它只是衡量一个字符串与另一个字符串相等所需的插入、删除和替换次数的一个指标。它在“敏捷的棕色狐狸跳过懒灰狗”上的效果与在“Dlkj adlkjll o824hs aldkj ladhfj adlbcvhiuywe”上的效果一样好。它对词汇或语法没有理解

相比之下,再多的字符串处理都无法识别“我面前的亮红色房子”描述的是“我面前是一座闪亮的玫瑰色住宅”


你需要寻找算法或NLP。它们使用起来并不简单,需要一些技巧。我不是NLP专家,我建议从搜索开始并从那里开始。

好吧,这两个字符串看起来确实一点都不相似。@SergioTulentsev实际上它们是对同一产品的相同描述。
Neoprene Rubber Chemical Resistant Gloves, Size: 7; Length: 32 cm; Standard: BS EN 388; Resistant to wide range of Chemicals such as Ethylene Oxide. Make: Polyco, Model: Duraprene III or Equivalent