这个问题真让我疯狂,
回答大多数人都在想:是的,我加入了snowball.jar到CLASSPATH
我有一个简单的主类,它应该阻止“去”到“去”这个词:
import weka.core.stemmers.SnowballStemmer;
public class StemmerTest {
public static void main(String[] args) {
SnowballStemmer stemmer = new SnowballStemmer();
stemmer.setStemmer("english");
System.out.println(stemmer.stem("going"));
}
}
首先当我在eclipse中运行它时,它可以工作,我得到以下输出:
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
然而当我从eclipse“stem.jar”将其导出为可运行的jar并在终端“java -jar stem.jar”中执行它时它不起作用我得到以下内容输出:
Refreshing GOE props...
[KnowledgeFlow] Loading properties and plugins...
[KnowledgeFlow] Initializing KF...
Stemmer 'porter' unknown!
Stemmer 'english' unknown!
going
我不知道为什么导出的jar中没有识别出snowball.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>
编辑2:
以下是MANIFEST.MF的内容。
Manifest-Version: 1.0
Ant-Version: Apache Ant 1.7.1
Created-By: 23.25-b01 (Oracle Corporation)
Main-Class: org.eclipse.jdt.internal.jarinjarloader.JarRsrcLoader
Rsrc-Main-Class: StemmerTest
Rsrc-Class-Path: ./ weka.jar snowball.jar
Class-Path: .
先谢谢, 特发
答案 0 :(得分:2)
虽然我不清楚,但我设法通过以下方式解决了这个恼人的问题(大约10个小时后.-) -
使用“zipgroupfileset”代替“snowset.jar”的“fileset”来展平生成的jar文件中的内容。
从类路径中排除“snowball.jar”(因为它已包含在生成的jar文件中)。
对于一些未知的原因,weka.jar中的雪球包装器找不到snowball.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>
希望如果有人使用雪球塞,这会有所帮助。
答案 1 :(得分:0)
我在经过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小时的时间,这是正确的。
答案 2 :(得分:0)
我使用多线程与Snowball有同样的问题。我这样解决了:
SnowballStemmer st = new SnowballStemmer();
do{
//wait until the German stemmer is initialized
}while(!st.stemmerTipText().contains("german"));
st.setStemmer("german");
filter.setStemmer(st);
错误消息&#34; Stemmer&#39; porter&#39; !未知#&34;将留下来,但它将正确设置德国干扰器。
答案 3 :(得分:0)
我已经按照这种方法运行了。我的IDE是NetBeans。我从here下载了jar。这是Snowball词干的标题下的第二个选项。我已将它添加到我的类路径中,并使用以下代码将stemmer添加到过滤器中。
SnowballStemmer stemmer = new SnowballStemmer();
stemmer.setStemmer("english");
StringToWordVector filter = new StringToWordVector();
filter.setStemmer(stemmer);