Я знаю, что это старая ветка, но недавно я столкнулся с этой же проблемой и смог ее решить, и я считаю, что решение должно быть здесь на случай, если кто-нибудь в будущем столкнется с ней.Как сказано выше, Jython не может работать с предварительно скомпилированными c-файлами numpy, но в nltk использование numpy очень ограничено, и довольно просто переписать затронутые биты кода.Это то, что я сделал, и я уверен, что это не самое эффективное в вычислительном отношении решение, но оно работает.Этот код находится в nltk.metrics.Segmentation, и я буду вставлять только соответствующий код, но он будет немного больше.
def _init_mat(nrows, ncols, ins_cost, del_cost):
mat = [[4.97232652e-299 for x in xrange(ncols)] for x in xrange(nrows)]
for x in range(0,ncols):
mat[0][x] = x * ins_cost
for x in range(0, nrows):
mat[x][0] = x * del_cost
return mat
def _ghd_aux(mat, rowv, colv, ins_cost, del_cost, shift_cost_coeff):
for i, rowi in enumerate(rowv):
for j, colj in enumerate(colv):
shift_cost = shift_cost_coeff * abs(rowi - colj) + mat[i][j]
if rowi == colj:
# boundaries are at the same location, no transformation required
tcost = mat[i][j]
elif rowi > colj:
# boundary match through a deletion
tcost = del_cost + mat[i][j + 1]
else:
# boundary match through an insertion
tcost = ins_cost + mat[i + 1][j]
mat[i + 1][j + 1] = min(tcost, shift_cost)
Также в конце ghd измените инструкцию return на
return mat[-1][-1]
Надеюсь, это кому-нибудь поможет!Я не знаю, есть ли другие места, где это имеет какое-либо значение, но это единственное, с чем я столкнулся.Если есть какие-либо другие проблемы такого рода, они могут быть решены таким же образом (используя список списков вместо простого массива), опять же, вы, вероятно, потеряете некоторую эффективность, но это работает.