golang 实现海明距离 demo
package mainimport (
"fmt" "math"
"strconv"
"strings"
)
type SimHash struct {
IntSimHash int64
HashBits int
}
func main() {
str := "夜空中最亮的星是否记清那仰望的人 心里的孤独和叹息夜空中最亮的星是否记清那仰望的人 心里的孤独和叹息夜空中最亮的星是否记清那仰望的人 心里的孤独和叹息夜空中最亮的星是否记清那仰望的人 心里的孤独和叹息夜空中最亮的星是否记清那仰望的人心里的孤独和叹息夜空中最亮的星是否记清那仰望的人 心里的孤独和叹息"
str2 := "夜空中最亮的星是否记清那仰望的人 心里的孤独和叹息夜空中最亮的星是否记清那仰望的人 心里的孤独和叹息夜空中最亮的星是否记清那仰望的人 心里的孤独和叹息夜空中最亮的星是否记清那仰望的人 心里的孤独和叹息夜空中最亮的星是否记清那仰望的人心里的孤独和叹息夜空中最亮的星是否记清那仰望的人 心里的孤独和叹息"
//str3:="nai nai ge xiong cao"
s := params()
//str hash 值
hash := s.Simhash(str)
fmt.Println(hash)
//str2 距离
hash2 := s.Simhash(str2)
fmt.Println(hash2)
//计算相似度
sm := s.Similarity(hash, hash2)
fmt.Println(sm)
//距离
ts := s.HammingDistance(hash, hash2)
fmt.Println(ts)
}
/**
距离 补偿
*/
func (s *SimHash) HammingDistance(hash, other int64) int {
x := (hash ^ other) & ((1b {
return b / a
}
return a / b
}
/**
海明距离hash
*/
func (s *SimHash) Simhash(str string) int64 {
m := strings.Split(str, " ")
token_int := make([]int, s.HashBits)
for i := 0; i < len(m); i++ {
temp :=m
t := s.Hash(temp)
for j := 0; j < s.HashBits; j++ {
bitMask := int64(1 = 0 {
fingerprint += 1
页:
[1]