Java Weka和Snowball don';在JAR中导出时无法工作
这个问题真的快把我逼疯了 回答大多数人的想法:是的,我在类路径中添加了snowball.jar 我有一个简单的主类,应该将“going”这个词词干到“go”: 首先当我在eclipse中运行它时,它会工作,并得到以下输出:Java Weka和Snowball don';在JAR中导出时无法工作,java,weka,snowball,Java,Weka,Snowball,这个问题真的快把我逼疯了 回答大多数人的想法:是的,我在类路径中添加了snowball.jar 我有一个简单的主类,应该将“going”这个词词干到“go”: 首先当我在eclipse中运行它时,它会工作,并得到以下输出: Refreshing GOE props... ---Registering Weka Editors--- Trying to add database driver (JDBC): RmiJdbc.RJDriver - Warning, not in CLASSPATH?
Refreshing GOE props...
---Registering Weka Editors---
Trying to add database driver (JDBC): RmiJdbc.RJDriver - Warning, not in CLASSPATH?
Trying to add database driver (JDBC): jdbc.idbDriver - Warning, not in CLASSPATH?
Trying to add database driver (JDBC): org.gjt.mm.mysql.Driver - Warning, not in CLASSPATH?
Trying to add database driver (JDBC): com.mckoi.JDBCDriver - Warning, not in CLASSPATH?
Trying to add database driver (JDBC): org.hsqldb.jdbcDriver - Warning, not in CLASSPATH?
[KnowledgeFlow] Loading properties and plugins...
[KnowledgeFlow] Initializing KF...
go
Refreshing GOE props...
[KnowledgeFlow] Loading properties and plugins...
[KnowledgeFlow] Initializing KF...
Stemmer 'porter' unknown!
Stemmer 'english' unknown!
going
但是当我从eclipse“stem.jar”中将其导出为可运行jar并在终端“java-jar stem.jar”中执行时,它不工作,我得到以下输出:
Refreshing GOE props...
---Registering Weka Editors---
Trying to add database driver (JDBC): RmiJdbc.RJDriver - Warning, not in CLASSPATH?
Trying to add database driver (JDBC): jdbc.idbDriver - Warning, not in CLASSPATH?
Trying to add database driver (JDBC): org.gjt.mm.mysql.Driver - Warning, not in CLASSPATH?
Trying to add database driver (JDBC): com.mckoi.JDBCDriver - Warning, not in CLASSPATH?
Trying to add database driver (JDBC): org.hsqldb.jdbcDriver - Warning, not in CLASSPATH?
[KnowledgeFlow] Loading properties and plugins...
[KnowledgeFlow] Initializing KF...
go
Refreshing GOE props...
[KnowledgeFlow] Loading properties and plugins...
[KnowledgeFlow] Initializing KF...
Stemmer 'porter' unknown!
Stemmer 'english' unknown!
going
我不知道为什么snowball.jar在导出的jar中无法识别。。。
虽然weka.jar和snowball.jar都包含在导出的jar中。下面是stem.jar文件结构:
stem.jar
|
|---META-INF
|---org
|---StemmerTest.class
|---snowball.jar
|---weka.jar
如果您能帮我解决这个问题,我将不胜感激
编辑1:
生成的ANT脚本:
<project default="create_run_jar" name="Create Runnable Jar for Project StemmerTest with Jar-in-Jar Loader">
<!--this file was created by Eclipse Runnable JAR Export Wizard-->
<!--ANT 1.7 is required -->
<target name="create_run_jar">
<jar destfile="stem.jar">
<manifest>
<attribute name="Main-Class" value="org.eclipse.jdt.internal.jarinjarloader.JarRsrcLoader"/>
<attribute name="Rsrc-Main-Class" value="StemmerTest"/>
<attribute name="Class-Path" value="."/>
<attribute name="Rsrc-Class-Path" value="./ snowball-2012.jar weka.jar snowball.jar"/>
</manifest>
<zipfileset src="jar-in-jar-loader.zip"/>
<zipfileset dir="resources/lib" includes="snowball-2012.jar"/>
<fileset dir="bin"/>
<zipfileset dir="." includes="weka.jar"/>
<zipfileset dir="." includes="snowball.jar"/>
</jar>
</target>
提前感谢,,
TeFa虽然我不清楚,但我还是通过以下方法解决了这个恼人的问题(大约10小时后-。-):-
- 使用“zipgroupfileset”而不是“snowball.jar”的“fileset”来展平生成的jar文件中的内容
- 从类路径中排除“snowball.jar”(因为它已经包含在生成的jar文件中)
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<project default="jar">
<path id="dep.runtime">
<fileset dir="./libs">
<include name="**/*.jar" />
<exclude name="**/snowball.jar"/>
</fileset>
</path>
<manifestclasspath property="manifest_cp" jarfile="stem.jar">
<classpath refid="dep.runtime" />
</manifestclasspath>
<target name="jar">
<jar destfile="stem.jar">
<manifest>
<attribute name="Main-Class" value="StemmerTest"/>
<attribute name="Class-Path" value="${manifest_cp}"/>
</manifest>
<zipgroupfileset dir="./libs" includes="snowball.jar"/>
<fileset dir="bin"/>
</jar>
</target>
</project>
如果有人在使用snowball词干分析器,希望这能有所帮助。我是在测试了1小时后做的,因为维基上没有这方面的内容。解决方案如下:
SnowballStemmer stemmer = new SnowballStemmer();
stemmer.setStemmer("English");
StringToWordVector STWfilter = new StringToWordVector(1000);
STWfilter.setUseStoplist(true);
STWfilter.setIDFTransform(true);
STWfilter.setTFTransform(true);
STWfilter.setNormalizeDocLength(new SelectedTag(StringToWordVector.FILTER_NORMALIZE_ALL, StringToWordVector.TAGS_FILTER));
STWfilter.setOutputWordCounts(true);
STWfilter.setStemmer(stemmer);
STWfilter.setInputFormat(train);
我发布了整个示例,这样可以节省我用正确的方法进行此操作所花费的1小时。我在使用多线程进行Snowball时也遇到了同样的问题。我是这样解决的:
SnowballStemmer st = new SnowballStemmer();
do{
//wait until the German stemmer is initialized
}while(!st.stemmerTipText().contains("german"));
st.setStemmer("german");
filter.setStemmer(st);
错误消息“Stemmer'porter'unknown!”将保留,但它将正确设置,即德国Stemmer。我遵循了此方法,并且它已经工作。我的IDE是NetBeans。我已经从下载了jar。这是“雪球词干分析器”标题下的第二个选项。我已经将其添加到我的类路径中,并使用以下代码将词干分析器添加到过滤器中
SnowballStemmer stemmer = new SnowballStemmer();
stemmer.setStemmer("english");
StringToWordVector filter = new StringToWordVector();
filter.setStemmer(stemmer);
这并不是说weka和snowball不在课堂上,因为他们在。它抱怨JDBC驱动程序不在类路径中。也许weka和snowball有配置文件,您可以编辑这些文件,并删除数据库依赖项。我对weka或snowball一无所知。运行一个包含依赖jar的jar文件是非常重要的。这不仅仅是将代码导出到jar文件的问题。用户必须创建一个相当可怕的MANIFEST.MF文件并将其包含在内。这个链接(成对和部分)有点旧,但指向正确的方向。如果您使用的是Maven,那么当输出为“Stemmer'porter'unknown!”时,这就有了很好的工具来消除一些痛苦,这意味着weka没有在类路径中找到snowball包@DaveHowes我正在使用eclipse生成的ant脚本。。。我现在把它包括在我的问题中。。。我根本不是ant或maven方面的专家,这就是为什么我使用eclipse生成的ant脚本。。。如果您知道如何编辑脚本以使其正常工作,我将非常感激:)…您可以发布manifest.mf文件的内容吗?您好,我也面临同样的问题。我试着用上面提到的同样的东西。但还是有问题。你知道我该怎么解决吗。