首页 > 解决方案 > 在 PyWeka 中使用包(Python Weka Wrapper)

问题描述

在 PyWeka 中使用已安装的软件包时,我需要一些帮助。我能够安装软件包,但我无法使用它们或找到它们的安装位置。当我尝试查找完整的类名时,我得到一个异常(当没有匹配的模块时发生)

例子:

import weka.core.classes as core
core.complete_classname("J48")

输出

  'weka.classifiers.trees.J48'

我正在尝试安装 DMNBtext 包。安装发生但找不到模块

import weka.core.classes as core
print(packages.is_installed("DMNBtext"))
core.complete_classname("DMNBtext")

输出

True
---------------------------------------------------------------------------
Exception                                 Traceback (most recent call last)
<ipython-input-25-7ea05097d6f1> in <module>()
      1 import weka.core.classes as core
      2 print(packages.is_installed("DMNBtext"))
----> 3 core.complete_classname("DMNBtext")

/usr/local/lib/python3.6/dist-packages/weka/core/classes.py in complete_classname(classname)
   1725         return str(result[0])
   1726     elif len(result) == 0:
-> 1727         raise Exception("No classname matches found for: " + classname)
   1728     else:
   1729         matches = []

Exception: No classname matches found for: DMNBtext

请注意 is_installed 给出 True 输出,这意味着软件包已安装。

知道如何解决这个问题吗?另外,我的 jvm 是从 packages=True 开始的,所以这应该不是问题。提前致谢。

标签: pythonwrapperweka

解决方案


我刚刚使用python-weka-wrapper3创建了一个新的虚拟环境:

virtualenv -p /usr/bin/python3.6 pww3
./pww3/bin/pip install numpy matplotlib pygraphviz javabridge python-weka-wrapper3

然后成功运行以下脚本(需要运行两次,如果DMNBtext尚未安装包):

import sys
import weka.core.jvm as jvm
import weka.core.packages as packages
from weka.core.classes import complete_classname

jvm.start(packages=True)

pkg = "DMNBtext"

# install package if necessary
if not packages.is_installed(pkg):
    print("Installing %s..." % pkg)
    packages.install_package(pkg)
    print("Installed %s, please re-run script!" % pkg)
    jvm.stop()
    sys.exit(0)

# testing classname completion
print(complete_classname(".J48"))
print(complete_classname(".DMNBtext"))

jvm.stop()

安装DMNBtext软件包后,脚本会输出以下内容:

weka.classifiers.trees.J48
weka.classifiers.bayes.DMNBtext

推荐阅读