obeckham 发表于 2018-9-21 06:23:14

golang 实现海明距离 demo

package main  

  
import (
"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]
查看完整版本: golang 实现海明距离 demo