python - Jython:导入错误:没有名为 multiarray 的模块

标签 python numpy nlp jython nltk

当我尝试使用 Jython 调用文件及其方法时,它显示以下错误,而我的 Numpy、Python 和 NLTK 已正确安装,并且如果我直接从 Python shell 直接运行,它可以正常工作

File "C:\Python26\Lib\site-packages\numpy\core\__init__.py", line 5, in <module>
import multiarray
ImportError: No module named multiarray

我使用的代码很简单:

PyInstance hello = ie.createClass("PreProcessing", "None");  
PyString str = new PyString("my name is abcd");
PyObject po = hello.invoke("preprocess", str);
System.out.println(po);

当我仅运行包含类 PreProcessing 的 python 文件并调用方法 preprocess 时,它工作正常,但使用 Jython 时会抛出错误。

Jython 无法导入仅保存在文件夹中的编译版本而不是类代码本身的所有库。就像代替 multiarray.py 一样,它只有 multiarray.pyd 这是编译版本,因此在 Jython 中不会检测到它。

为什么会出现这种行为?如何解决?

请帮忙!

最佳答案

我知道这是一个旧线程,但我最近遇到了同样的问题并且能够解决它,我认为解决方案应该在这里,以防将来有人遇到它。如上所述,Jython 无法处理 numpy 的预编译 c 文件,但在 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]

我希望这对某人有帮助!我不知道是否还有其他地方存在此问题,但这是我遇到的唯一一个。如果还有任何其他此类问题,可以用相同的方式解决(使用列表列表而不是 numpy 数组),同样,您可能会损失一些效率,但它是有效的。

关于python - Jython:导入错误:没有名为 multiarray 的模块,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6956306/

相关文章:

python - 无法向 Gmail 验证 Google 服务帐户的身份

python - Python 中的自定义聚合函数

python - Numpy/Scipy 中大气数据的快速 3D 插值

python - Poly1d 对象数组的 Numpy 问题

lucene - 单词共现 - 在一组 n-gram 中找到一个术语的共现

algorithm - 自然语言 CFG 生成器算法

machine-learning - NLP 中的答案类型检测

python - matplotlib 基线倾斜的 3d 多边形图

python - 将 bincount 应用于二维 numpy 数组的每一行

Python上升/下降沿示波器式触发器