私は文字列のリストを持っています/私は比較する必要があり、各文字列の間の距離の測定値を取得する。私が書いた現在のコードは動作しますが、大きなリストの場合は2 forループを使用してから時間がかかります。私は文字列間の距離を測定するためにlevenshtien距離を使用しました。Python/Pandas - 文字列の比較
文字列/説明のリストは、データフレームに格納されます。
def edit_distance(s1, s2):
m=len(s1)+1
n=len(s2)+1
tbl = {}
for i in range(m): tbl[i,0]=i
for j in range(n): tbl[0,j]=j
for i in range(1, m):
for j in range(1, n):
cost = 0 if s1[i-1] == s2[j-1] else 1
tbl[i,j] = min(tbl[i, j-1]+1, tbl[i-1, j]+1, tbl[i-1, j-1]+cost)
return tbl[i,j]
def narrative_feature_extraction(df):
startTime = time.time()
leven_matrix = np.zeros((len(df['Narrative']),len(df['Narrative'])))
for i in range(len(df['Narrative'])):
for j in range(len(df['Narrative'])):
leven_matrix[i][j] = edit_distance(df['Narrative'].iloc[i],df['Narrative'].iloc[j])
endTime = time.time()
total = (endTime - startTime)
print "Feature Extraction (Leven) Runtime:" + str(total)
return leven_matrix
X = narrative_feature_extraction(df)
リストがn個の物語を持っている場合、得られたXが行が物語と列であるN×Nの行列であり、その物語が比較されるものです。例えば、距離(i、j)については、それは物語iとjとの間のレベンション距離である。
このコードを最適化してforループをあまり必要としない方法がありますか?または、これを計算する無限の方法がありますか?
codereviewがこれに適している可能性があります – depperm