0
書誌データから同様のレコードを持つリストを返すアルゴリズムを実装しました。 BuscarParecidosがあるPython 2.7よりもPython 3よりアルゴリズムの方が遅い
def Find_top(rank,structure, cp):
global contadorGrupos
global contadorValor
datos=[]
for clave in rank:
aux=[]
vectorName=[]
if clave["Analizado"]==0:
for x in structure:
if clave["Name"]!=x["Name"]:
if x["Analizado"]==0:
jac=jaccard_similarity(clave["Name"],x["Name"])
if jac > 0.4:
jar=jellyfish.jaro_winkler(unicode(clave["Name"], 'utf-8'),unicode(x["Name"], 'utf-8'))
valor=(jac+jar)/2
if valor > 0.5:
if cp=="Authors":
if valor> 0.8 and Comparador(clave["Name"], x["Name"])==1:
if Verificar_Key(clave["Afiliation"], x["Afiliation"])>0.7:
aux.append(x)
vectorName.append(x["Name"])
x["Analizado"]=1
else:
if cp == "Afiliation":
if valor >= 0.983 :
aux.append(x)
vectorName.append(x["Name"])
x["Analizado"]=1
else:
if valor >= 0.93:
aux.append(x)
vectorName.append(x["Name"])
x["Analizado"]=1
clave["Analizado"]=1
aux = aux+BuscarParecidos(vectorName,structure, cp)
BuscarT(vectorName, rank)
if len(aux)!=0:
contadorGrupos = contadorGrupos + 1
aux.append(clave)
datos.append(aux)
contadorValor = contadorValor + 1
return datos
:
def BuscarParecidos(vector, lista , cp):
vectorAuxiliar=[]
nombres=[]
for ax in vector:
for i in lista:
if i["Analizado"]==0:
if not i["Name"] in vector:
vx=jaccard_similarity(ax,i["Name"])
vy=jellyfish.jaro_winkler(unicode(ax, 'utf-8'),unicode(i["Name"], 'utf-8'))
vt=(vx+vy)/2
if cp=="Authors":
if vt > 0.8 and Comparador(ax,i["Name"])==1:
i["Analizado"]=1
vectorAuxiliar.append(i)
nombres.append(i["Name"])
else:
if cp == "Afiliation":
if vt >= 0.983:
i["Analizado"]=1
vectorAuxiliar.append(i)
nombres.append(i["Name"])
else:
if vt >= 0.93:
i["Analizado"]=1
vectorAuxiliar.append(i)
nombres.append(i["Name"])
vector = vector + nombres
return vectorAuxiliar
jaccard_similarity
は、私自身のアルゴリズムとjaro_winkler
はクラゲライブラリで実装されています。
問題は、Python 3.4でアルゴリズムを実行すると、およそ3310レコードで40秒で完全に実行されるということです。しかし、私がPython 2.7でアルゴリズムを実行すると、4分と数秒で終了します。なぜそれが起こるのか分かりません。
可能性のある容疑者は 'ユニコードある - 、utf8'取り扱い、およびのpython3に自生している' generators'(範囲は発電機である)が、あなたのコードをすばやくスキャンしても何もわかりませんでした。 –
@ cricket_007この質問はコードレビューを求めていません。 Python 2.7と3.4の動作上の違いについて具体的に質問しています。これは特定のプログラミングに関する質問であり、したがってSOに属しています(どこにいても)。 – Kaz
アルゴリズムはPython 2.7とPython 3.4の両方で同じように実行されました。エラーコードを除外するためにコードをコピーしました。 –