Weka and Snowball не працюють при експорті в JAR

Ця проблема дійсно веде мене з розуму,

ДОПОВІДИВАЄТЬСЯ НАЙБІЛЬШОМУ ЩО МАЄ НАСЛУГАЮТЬ: ТАК Я ДОДАТИ snowball.jar В КЛАССПАХТ

У мене є простий основний клас, який повинен стримувати слово "ідучи", щоб "йти":

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"));
    }
}

First when I run it in eclipse it works and I get the following output:

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

However when I export it as a runnable jar from eclipse "stem.jar" and execute it in the terminal "java -jar stem.jar" it doesn't work and I get the following output:

Refreshing GOE props...
[KnowledgeFlow] Loading properties and plugins...
[KnowledgeFlow] Initializing KF...
Stemmer 'porter' unknown!
Stemmer 'english' unknown!
going

Я не маю ідеї чому snowball.jar не визнається у експортованій банку ... Хоча як weka.jar, так і snowball.jar включені в експортовану банку. Ось структура файлу stem.jar:

stem.jar
       |
       |---META-INF
       |---org
       |---StemmerTest.class
       |---snowball.jar
       |---weka.jar

Будемо вдячні за будь-яку допомогу з проблемою

EDIT 1: Generated ANT Script:


<!--this file was created by Eclipse Runnable JAR Export Wizard-->
<!--ANT 1.7 is required                                        -->

    
        
            
            
            
            
        
        
        
        
        
        
    

EDIT 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: .

Спасибі заздалегідь, TeFa

1
Ну, це не скаржиться на весілля і сніжки, не будучи в класі, тому що вони є. Він скаржиться на драйвер JDBC, не перебуваючи в шляху до класу. Може бути, weka та snowball мають конфігураційні файли, які можна редагувати, і видалити залежність бази даних. Я нічого не знаю про веслую або сніжну кулю.
додано Автор NickJ, джерело
Коли висновок "Stemmer" porter "невідомий!" це означає, що пакунок сніжок в класі не знайшов. Вікі
додано Автор TeFa, джерело
Коли висновок "Stemmer" porter "невідомий!" це означає, що пакунок сніжок в класі не знайшов. Вікі
додано Автор TeFa, джерело
@DaveHowes Я використовую скрипт мураху, створеного затмідою ... Я включив його в моє запитання зараз ... Я не експерт в мурахах або воєводах на все це чому я використовую згенерований сценарій мура через затьмарення ... Якщо маю якусь ідею, як редагувати сценарій, щоб він працював, я б дуже вдячний :) ...
додано Автор TeFa, джерело
@DaveHowes Я використовую скрипт мураху, створеного затмідою ... Я включив його в моє запитання зараз ... Я не експерт в мурахах або воєводах на все це чому я використовую згенерований сценарій мура через затьмарення ... Якщо маю якусь ідею, як редагувати сценарій, щоб він працював, я б дуже вдячний :) ...
додано Автор TeFa, джерело
@ DaveHowes Готово, я оновив своє запитання ...
додано Автор TeFa, джерело
@ DaveHowes Готово, я оновив своє запитання ...
додано Автор TeFa, джерело
@ DaveHowes Готово, я оновив своє запитання ...
додано Автор TeFa, джерело
Запуск файлу jar, який також містить залежні банки, не є тривіальним. Це не просто питання експорту коду в jar файл. Необхідно виробити досить приголомшливий файл MANIFEST.MF і включити його. Це посилання ( docs.oracle.com /javase/1.5.0/docs/guide/jar/jar.html#Name-Va‌ lue пари та розділи) трохи старі, але вказує на правильний напрямок. Якщо ви використовуєте Maven, то це має хороші інструменти, щоб позбавити деяку біль
додано Автор DaveH, джерело
Не подобається зовнішній вигляд цього атрибута Rsrc-Class-Path: подивіться, чи допомагає це питання: stackoverflow.com/questions/858766/ …
додано Автор DaveH, джерело
Не подобається зовнішній вигляд цього атрибута Rsrc-Class-Path: подивіться, чи допомагає це питання: stackoverflow.com/questions/858766/ …
додано Автор DaveH, джерело
Ви можете опублікувати вміст вашого файлу manifest.mf?
додано Автор DaveH, джерело
Ви можете опублікувати вміст вашого файлу manifest.mf?
додано Автор DaveH, джерело
Запуск файлу jar, який також містить залежні банки, не є тривіальним. Це не просто питання експорту коду в jar файл. Необхідно виробити досить приголомшливий файл MANIFEST.MF і включити його. Це посилання ( docs.oracle.com /javase/1.5.0/docs/guide/jar/jar.html#Name-Va‌ lue пари та розділи) трохи старі, але вказує на правильний напрямок. Якщо ви використовуєте Maven, то це має хороші інструменти, щоб позбавити деяку біль
додано Автор DaveH, джерело

12 Відповіді

Хоча для мене це не зрозуміло, мені вдалося вирішити цю дратую проблему (через ~ 10 годин - .-), виконавши наступне: -

  • Використовуйте "zipgroupfileset" замість "fileset" для "snowball.jar", щоб згладити вміст у створеному файлі jar.

  • Виключіть "snowball.jar" з path classpath (оскільки він вже включений у сформований файл jar).

За деякою причиною НЕЗАВИСИМОСТІ, обгортка сніжок в weka.jar не вдалося знайти snowball.jar до її сплюснутої (витягнутої).

Ось сценарій мурашок, який працює для мене:

<?xml version="1.0" encoding="UTF-8" standalone="no"?>

    
        
            
            
        
    

    
        
    

    
        
            
                
                
            
            
            
        
    

Сподіваюся, що це допомагає, якщо хтось використовує сніжковий стовпчик.

2
додано
Привіт, я стикаюсь з тим же питанням. Я намагався використовувати те ж саме, що згадувалося вище. Але все одно виникає питання. У вас є ідеї, як я можу це вирішити.
додано Автор Neha, джерело

Хоча для мене це не зрозуміло, мені вдалося вирішити цю дратую проблему (через ~ 10 годин - .-), виконавши наступне: -

  • Використовуйте "zipgroupfileset" замість "fileset" для "snowball.jar", щоб згладити вміст у створеному файлі jar.

  • Виключіть "snowball.jar" з path classpath (оскільки він вже включений у сформований файл jar).

За деякою причиною НЕЗАВИСИМОСТІ, обгортка сніжок в weka.jar не вдалося знайти snowball.jar до її сплюснутої (витягнутої).

Ось сценарій мурашок, який працює для мене:

<?xml version="1.0" encoding="UTF-8" standalone="no"?>

    
        
            
            
        
    

    
        
    

    
        
            
                
                
            
            
            
        
    

Сподіваюся, що це допомагає, якщо хтось використовує сніжковий стовпчик.

2
додано
Привіт, я стикаюсь з тим же питанням. Я намагався використовувати те ж саме, що згадувалося вище. Але все одно виникає питання. У вас є ідеї, як я можу це вирішити.
додано Автор Neha, джерело

Хоча для мене це не зрозуміло, мені вдалося вирішити цю дратую проблему (через ~ 10 годин - .-), виконавши наступне: -

  • Використовуйте "zipgroupfileset" замість "fileset" для "snowball.jar", щоб згладити вміст у створеному файлі jar.

  • Виключіть "snowball.jar" з path classpath (оскільки він вже включений у сформований файл jar).

За деякою причиною НЕЗАВИСИМОСТІ, обгортка сніжок в weka.jar не вдалося знайти snowball.jar до її сплюснутої (витягнутої).

Ось сценарій мурашок, який працює для мене:

<?xml version="1.0" encoding="UTF-8" standalone="no"?>

    
        
            
            
        
    

    
        
    

    
        
            
                
                
            
            
            
        
    

Сподіваюся, що це допомагає, якщо хтось використовує сніжковий стовпчик.

2
додано
Привіт, я стикаюсь з тим же питанням. Я намагався використовувати те ж саме, що згадувалося вище. Але все одно виникає питання. У вас є ідеї, як я можу це вирішити.
додано Автор Neha, джерело

Я зробив це після 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 годину. Я витратив на це правильний шлях.

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 годину. Я витратив на це правильний шлях.

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);

Повідомлення про помилку "Stemmer" porter "невідомий!" залишиться, але правильно встановить, наприклад, німецький стовп.

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);

Повідомлення про помилку "Stemmer" porter "невідомий!" залишиться, але правильно встановить, наприклад, німецький стовп.

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);

Повідомлення про помилку "Stemmer" porter "невідомий!" залишиться, але правильно встановить, наприклад, німецький стовп.

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);

Повідомлення про помилку "Stemmer" porter "невідомий!" залишиться, але правильно встановить, наприклад, німецький стовп.

0
додано

Я прослідкував за цим методом, і він працював. Моя IDE - це NetBeans. Я завантажив банку з тут . Це другий варіант під назвою "Сніжок". Я додав його до мого шляху до класу і використовував наступний код, щоб додати стовпчик у фільтр.

SnowballStemmer stemmer = new SnowballStemmer();
stemmer.setStemmer("english");
StringToWordVector filter = new StringToWordVector();
filter.setStemmer(stemmer);
0
додано

Я прослідкував за цим методом, і він працював. Моя IDE - це NetBeans. Я завантажив банку з тут . Це другий варіант під назвою "Сніжок". Я додав його до мого шляху до класу і використовував наступний код, щоб додати стовпчик у фільтр.

SnowballStemmer stemmer = new SnowballStemmer();
stemmer.setStemmer("english");
StringToWordVector filter = new StringToWordVector();
filter.setStemmer(stemmer);
0
додано

Я прослідкував за цим методом, і він працював. Моя IDE - це NetBeans. Я завантажив банку з тут . Це другий варіант під назвою "Сніжок". Я додав його до мого шляху до класу і використовував наступний код, щоб додати стовпчик у фільтр.

SnowballStemmer stemmer = new SnowballStemmer();
stemmer.setStemmer("english");
StringToWordVector filter = new StringToWordVector();
filter.setStemmer(stemmer);
0
додано
ІТ КПІ - Java
ІТ КПІ - Java
436 учасників