<p>我知道这是一个老线程,但我最近遇到了同样的问题,并能够解决它,我认为解决方案应该在这里,以防将来有人碰到它。如上所述,Jython不能处理numpy的预编译c文件,但是在nltk中,numpy的使用非常有限,重写受影响的代码非常简单。这就是我所做的,我确信这不是计算上最有效的解决方案,但它是有效的。此代码位于nltk.metrics.分段,我只会粘贴相关的代码,但还是会有点多。在</p>
<pre><code>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)
</code></pre>
<p>同样在ghd的末尾,将return语句更改为</p>
^{pr2}$
<p>我希望这对某人有帮助!我不知道是否还有其他地方会有这样的问题,但这是我遇到的唯一一个问题。如果还有其他类似的问题可以用同样的方法解决(使用列表列表而不是numpy数组),同样,您可能会损失一些效率,但它是有效的。在</p>