SYNCER

SYNCER

levenshtein() - 2つの文字のレーベンシュタイン距離を計算する

公開日:

levenshteinは、指定した2つの文字のレーベンシュタイン距離を計算する関数です。レーベンシュタイン距離とは、一方の文字列をもう一方の文字列と同じにするためにしなければいけない、置換、挿入、削除の最小文字数です。レーベンシュタイン距離が小さいほど、似た文字ということになります。検索エンジンなどで「もしかして」というキーワード候補を表示する時などに利用されます。

構文

int levenshtein ( string $str1 , string $str2 )
int levenshtein ( string $str1 , string $str2 , int $cost_ins , int $cost_rep , int $cost_del )

パラメータ

$str1

対象の文字列。255文字まで対応。

$str2

目的の文字列。255文字まで対応。

$cost_ins

挿入のコスト。第3〜5引数は省略しない場合はセットで指定しなければいけない。

$cost_rep

置換のコスト。

$cost_del

削除のコスト。

返り値

int

第1引数の文字列を、第2引数の文字列にするためのレーベンシュタイン距離。計算できなかった場合は-1が返る。

サンプルコード

レーベンシュタイン距離を計算する

"CSYNER"という文字を"SYNCER"という文字にするために必要な、置換、挿入、削除の文字数を計算します。

php

<?php
	// 実行
	$result = levenshtein( "CSYNER", "SYNCER" ) ;

	// 結果
	var_dump( $result ) ;

結果 (出力内容) - PHP7.0.21

int(2)

処理のコストを定義する

第3引数は挿入、第4引数は置換、第5引数は削除にかかるコストを定義できます。例えば置換のコストだけ「なし」にしたい場合は第4引数に0を指定します。第3〜5引数は、まとめて省略するか、まとめて指定するかのどちらかでなければいけません。下記の2つの文字列は元々置換だけで変換できます。第4引数が0、つまり置換がコストにならないため、レーベンシュタイン距離が0になりました。

php

<?php
	// 実行
	$result = levenshtein( "CSYNER", "SYNCER", 1, 0, 1 ) ;

	// 結果
	var_dump( $result ) ;

結果 (出力内容) - PHP7.0.21

int(0)

サンドボックス

ソースコードを編集してlevenshtein()の挙動を確認して下さい。

int(2)

参考リンク

  • PHP - 公式マニュアル。