2017-11-07 9 views
-1

私は1つの列とその列に1000行だけのデータフレームを持っています。 すべての行を比較し、すべての行についてLevenshtein距離を見つける必要があります。私はPythonでその比率または距離を計算するにはどうすればよいPythonで私の列の行のLevenshtein率/距離を計算するには?

は、私は次のようにデータフレームを持っている:

#Df 
    StepDescription 
    click confirm button when done 
    you have logged on 
    please log in to proceed 
    click on confirm button 
    Dolb was released successfully 
    Enter your details 
    validate the statement 
    Aval was released sucessfully 

は何をするどのように私は、私は、ループを反復処理するために書かれているすべてのこれらの

コードのためのレーベンシュタイン比を計算しますどのように進めるかを反復した後である。

import Levenshtein 
    import pandas as pd 
    data_dist = pd.read_csv('path\Data_TestDescription.csv') 
    df = pd.DataFrame(data_dist) 
    for index, row in df.iterrows(): 
+0

期待される出力?あなたは何も試したことがないようです。 –

+0

私はパーセンテージ、つまり各行と各行の比率を取得する必要があります。私はこれらの行の間のこの距離を計算する方法を反復した後に私が知らないので試していません。 –

+0

私はまだ何らかの期待される出力を見たいと思っています。 –

答えて

0

コメントで尋ねたとおり、割合が望まれている、私はacceptedsが答えておくとちょうど新しいパーツを追加します:

import numpy as np 
import pandas as pd 
from Levenshtein import distance 
from itertools import product 

#df = ... 

dist = [distance(*x) for x in product(df.StepDescription, repeat=2)] 

dist_df = pd.DataFrame(np.array(dist).reshape(df.shape[0], df.shape[0])) 
dist_df 

    0 1 2 3 4 5 6 7 
0 0 23 23 13 29 25 25 28 
1 23 0 18 18 23 18 18 23 
2 23 18 0 20 25 21 19 24 
3 13 18 20 0 27 19 21 26 
4 29 23 25 27 0 26 23 5 
5 25 18 21 19 26 0 19 25 
6 25 18 19 21 23 19 0 21 
7 28 23 24 26 5 25 21 0 

dist_df_percentage = dist_df // min(x for x in dist if x > 0) * 100 

    0 1 2 3 4 5 6 7 
0 0 460 460 260 580 500 500 560 
1 460 0 360 360 460 360 360 460 
2 460 360 0 400 500 420 380 480 
3 260 360 400 0 540 380 420 520 
4 580 460 500 540 0 520 460 100 
5 500 360 420 380 520 0 380 500 
6 500 360 380 420 460 380 0 420 
7 560 460 480 520 100 500 420 0 
0

は、最後に例の多くの後、私は正確な比率を持って試してみましたまたはファジーを使用したパーセンテージ

from itertools import product 
import numpy as np 
import difflib 
from fuzzywuzzy import fuzz 
from fuzzywuzzy import process 
import editdistance 
dist = np.empty(df.shape[0]**2, dtype=int) 
for i, x in enumerate(product(df.Stepdescription, repeat=2)): 
    dist[i] = fuzz.ratio(*x) 
dist_df = pd.DataFrame(dist.reshape(-1, df.shape[0])) 
out_csv= dist_df.to_csv('FuzzyRatio.csv', sep='\t') 
関連する問題