Pythonで距離計算!レーベンシュタインでテキスト類似度判定

Pythonで距離計算 レーベンシュタインで類似度判定

レーベンシュタイン距離というアルゴリズムを利用すると、2文章間の距離がどのくらい離れているか算出でき、テキスト類似度判定に使えます。

テキストの類似度判定手法は自然言語解析後のコサイン類似度などいくつかの方法がありますが、使い方によってはレーベンシュタイン距離の方がよい場合があります。本記事ではPythonk環境でレーベンシュタインを用いてテキスト間の距離を判定するコードをご紹介致します。

目次

レーベンシュタイン距離アルゴリズムとは

レーベンシュタイン距離の由来

1965年にロシアの学者ウラジーミル・レーベンシュタインさんが考案したのでこの名前が使われております。かなり昔からある考えのアルゴリズムになります。

レーベンシュタイン距離の算出概要

レーベンシュタイン距離アルゴリズムは2つのテキストを比較してどのくらい距離が離れているか数字で算出するロジックです。「編集距離」とも言われており、1つ目のテキストにするためには「追加・更新・削除」を何回行えばそのテキストになるかという観点で処理した数だけ足されて結果をだします。つまり、追加2回、更新1回、削除2回ならば距離は5として表示されます。

PythonでLevenshtein(レーベンシュタイン)を使う準備

Python環境の構築

Python環境がない方は公式Pythonインストールで時短!venv仮想環境構築も紹介をご覧くださいませ。

必用ライブラリのインストール

下記のpipコマンドで必要ライブラリをインストールします。

#コマンドプロンプトなら
pip install python-Levenshtein

#jupyter上のセルで実行なら
!pip install python-Levenshtein

もう1つインストールします。

#コマンドプロンプトなら
pip install python-Levenshtein-wheels

#jupyter上のセルで実行なら
!pip install python-Levenshtein-wheels

これで必要ライブラリのインストールは完了です。

もしpipでライブラリのインストールができない場合はPythonでpip installが使えない時のプロキシとSSL無視をご覧くださいませ。

Levenshteinでテキスト間距離を比較するコード

単純にテキスト間距離を比較

Levenshteinライブラリを呼び出します。

import Levenshtein

テキスト1とテキスト2の距離をLevenshteinで比較したい場合下記のように記述します。

Levenshtein.distance(テキスト1,テキスト2)

a="東京らいふ"
b="東京Life"


##実行
Levenshtein.distance(a,b)

上記を実行するとaとbの距離がどのくらい離れているか数値で抽出されます。数字が0なら完全一致で、数値が離れる程、テキスト間の類似度が低いことになります。

文字の半角全角を合わせてからLevenshteinを実行すると結果が変わるので、用途に応じてクレンジングしてから実行するとよいでしょう。

テキストクレンジングして距離を比較

jaconvを使って全て半角にしたあとに比較するコードは下記です。

pip install jaconv
import jaconv

a=jaconv.z2h(a,digit=True,ascii=True)
b=jaconv.z2h(b,digit=True,ascii=True)

Levenshtein.distance(a,b)

レーベンシュタインの距離を割合にする

レーベンシュタインは文字距離を割合にして使うことが有効です。レーベンシュタインの特徴から文字列が長い程数字が大きくでます。このデメリットを緩和するために文字列を足して割って割合にします。

a="東京らいふ"
b="東京Life"

x=Levenshtein.distance(a,b)

try:
    y=x/(len(a)) + (len(b))
except ZeroDivisionError:
    y=0
    
y
#6.8

0除算エラーを回避するためにtry~exceptで強引に0に置き換えています。

ご質問やご依頼について

記事やDX化のご質問や依頼はServiceをご覧くださいませ。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

著者:ブロガー2つ(につ)

■サイト設立目的
人海戦術の時代からテクノロジー活用による自動化促進の時代に変化。テクノロジー活用を促進するための情報共有やテクノロジー支援を行います。

目次