我有一個字符串/敘述的列表,我需要比較並獲得每個字符串之間的距離度量值。我寫的當前代碼的作品,但是因爲我使用2 for循環,所以需要更長的列表。我用levenshtien距離來衡量琴絃之間的距離。Python /熊貓 - 字符串比較
字符串/敘述的列表存儲在數據框中。
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之間的levenshtien距離。
有沒有一種方法來優化此代碼,以便不需要有太多for循環?或者有沒有計算這個的pythonic方式?
codereview可能是一個更好的地方 – depperm