jsd

package module
v0.0.0-...-5c44e7c Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Apr 29, 2023 License: MIT Imports: 0 Imported by: 2

README

go-jsd

Go Reference

Jaro-Winkler String Distance supporting unicode/multibyte strings.

Usage

distnace := jsd.StringDistance("こんにちわ世界", "こにゃにゃちわ世界")     // 0.0762
similarity := jsd.StringSimilarity("こんにちわ世界", "こにゃにゃちわ世界") // 0.9238
distnace := jsd.Distance([]rune("accomodate"), []rune("accommodate")))     // 0.0181
similarity := jsd.Similarity([]rune("accomodate"), []rune("accommodate"))) // 0.9818

Installation

$ go get github.com/mattn/go-jsd

License

MIT

Author

Yasuhiro Matsumoto (a.k.a. mattn)

Documentation

Overview

Package jsd provides string similarity metrics/string distance functions based on the Jaro-Winkler similarity.

This package supports unicode/multibyte strings.

Example (English)
package main

import (
	"fmt"

	"github.com/mattn/go-jsd"
)

func main() {
	for _, test := range []string{
		"accomodate", "accommodate", "accommodated", "accommodates", "accommodating",
		"accommodation", "ping ping",
	} {
		lhs := "accomodate"
		rhs := test
		dist := jsd.StringDistance(lhs, rhs)
		sim := jsd.StringSimilarity(lhs, rhs)

		fmt.Printf("%s <--> %s\n  Dist: %.04f, Sim: %.04f\n", lhs, rhs, dist, sim)
	}
}
Output:
accomodate <--> accomodate
  Dist: 0.0000, Sim: 1.0000
accomodate <--> accommodate
  Dist: 0.0182, Sim: 0.9818
accomodate <--> accommodated
  Dist: 0.0333, Sim: 0.9667
accomodate <--> accommodates
  Dist: 0.0333, Sim: 0.9667
accomodate <--> accommodating
  Dist: 0.0815, Sim: 0.9185
accomodate <--> accommodation
  Dist: 0.0815, Sim: 0.9185
accomodate <--> ping ping
  Dist: 1.0000, Sim: 0.0000
Example (Japanese)
package main

import (
	"fmt"

	"github.com/mattn/go-jsd"
)

func main() {
	for _, test := range []string{
		"こんにちわ世界", "こんちわ世界", "こにゃちわ世界", "こにゃにゃちわ世界",
		"こんばんわ世界", "ハロー・ワールド",
	} {
		lhs := "こんにちわ世界"
		rhs := test
		dist := jsd.StringDistance(lhs, rhs)
		sim := jsd.StringSimilarity(lhs, rhs)

		fmt.Printf("%s <--> %s\n  Dist: %.04f, Sim: %.04f\n", lhs, rhs, dist, sim)
	}
}
Output:
こんにちわ世界 <--> こんにちわ世界
  Dist: 0.0000, Sim: 1.0000
こんにちわ世界 <--> こんちわ世界
  Dist: 0.0381, Sim: 0.9619
こんにちわ世界 <--> こにゃちわ世界
  Dist: 0.0762, Sim: 0.9238
こんにちわ世界 <--> こにゃにゃちわ世界
  Dist: 0.1429, Sim: 0.8571
こんにちわ世界 <--> こんばんわ世界
  Dist: 0.1524, Sim: 0.8476
こんにちわ世界 <--> ハロー・ワールド
  Dist: 1.0000, Sim: 0.0000

Index

Examples

Constants

This section is empty.

Variables

This section is empty.

Functions

func Distance

func Distance(lhs, rhs []rune) float64

Distance is similar to StringDistance but takes rune slices instead of strings.

func Similarity

func Similarity(lhs, rhs []rune) float64

Similarity is similar to StringSimilarity but takes rune slices instead of strings.

func StringDistance

func StringDistance(lhs, rhs string) float64

StringDistance returns the edit distance between two strings in the range 0 to 1. 0 means an exact match and 1 means there is no similarity.

func StringSimilarity

func StringSimilarity(lhs, rhs string) float64

StringSimilarity returns the similarity score between two strings in the range 1 to 0. 1 means an exact match and 0 means there is no similarity.

Types

This section is empty.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL