|
|
|
|
Bonjour,
j'essaye de compiler un programme java et il m'affiche l'erreur "cannot find symbol"
public class TrecTerrier {
/** The logger used */
public static Logger logger=Logger.getRootLogger();///////c'est cette ligne qui pose probleme
/** The unkown option*/
protected String unknownOption;
/** The file to evaluation, if any */
}....
Configuration: Windows XP Firefox 3.0.10
Bonjour,
import uk.ac.gla.terrier.terms.SnowballStemmer;
public class lem{
public static void lem(String s, String s1,String s2) throws Throwable{
Class stemClass = Class.forName("org.tartarus.snowball.ext."+s+"Stemmer");
SnowballStemmer stemmer = (SnowballStemmer)stemClass.newInstance();
StringBuffer input = new StringBuffer();
OutputStream outstream;
outstream = new FileOutputStream(s2);
Writer output = new OutputStreamWriter(outstream);
output = new BufferedWriter(output);
int repeat = 1;
Object [] emptyArgs = new Object[0];
int character;
while ((character = reader.read()) != -1) {
char ch = (char) character;
if (Character.isWhitespace((char) ch)) {
if (input.length() > 0) {
stemmer.setCurrent(input.toString());////ligne à probleme
for (int i = repeat; i != 0; i--) {
stemmer.stem("");
}
output.write(stemmer.getCurrent());////2éme ligne à probleme
output.write('\n');
input.delete(0, input.length());
}
} else {
input.append(Character.toLowerCase(ch));
}
}
output.flush();
}
Et voici le code de la classe SnowballStemmer qui est dans le package 'terrier' package terrier;
import org.tartarus.snowball.SnowballProgram;
import java.lang.reflect.Method;
import uk.ac.gla.terrier.terms.TermPipeline;
/**
* @author Craig Macdonald <craigm{a.}dcs.gla.ac.uk>
* @version $Revision: 1.2 $
*/
abstract public class SnowballStemmer implements TermPipeline {
/** The actual snowball object that does the stemming */
protected SnowballProgram stemmer = null;
/** The appropriate method. Damn reflection APIs. */
protected Method stemMethod = null;
/** The next object in the term pipeline to pass stemmed terms to */
protected TermPipeline next = null;
/** The language that we're currently stemming in */
protected String language = null;
protected final static Object [] emptyArgs = new Object[0];
private String courant;
/** Creates a new stemmer object for the language StemLanguage.
* @param StemLanguage Name of the language to generate the stemmer for. Must be a valid snowball stemmer language.
* @param next The next object in the term pipeline
*/
protected SnowballStemmer(String StemLanguage, TermPipeline next)
{
StemLanguage = StemLanguage.toLowerCase();
try{
Class stemClass = Class.forName("org.tartarus.snowball.ext." + StemLanguage + "Stemmer");
stemmer = (SnowballProgram) stemClass.newInstance();
stemMethod = stemClass.getMethod("stem", new Class[0]);
}catch(Exception e){
System.err.println("ERROR: Cannot generate snowball stemmer "+StemLanguage+" : "+e);
e.printStackTrace();
}
language = StemLanguage;
this.next = next;
}
/**
* Stems the given term and passes onto the next object in the term pipeline.
* @param t String the term to stem.
*/
public void processTerm(String t)
{
if (t == null)
return;
next.processTerm(stem(t));
}
/** Stems the given term and returns the stem
* @param term the term to be stemmed.
* @return the stemmed form of term */
public String stem(String term) {
stemmer.setCurrent(term);
/* one can only imagine why a stemmer abstract class wouldn't
wouldn't have a stem() method. */
try{
stemMethod.invoke(stemmer, emptyArgs); //stemmer.stem();
}catch (Exception e) {
System.err.println("ERROR: Cannot use snowball stemmer "+language+" : "+e);
e.printStackTrace();
}
return stemmer.getCurrent();
}
public void setCurrent(String value)
{ courant=value;
}
public String getCurrent(){
return courant;
}
}
vous remarquez que les methodes "setCurrent" et "getCurrent" ont été bien définies et le 'import' est bien placé .......j'comprend pas comment il peut pas trouver le symbole! |
Hi there,
while ((character = reader.read()) != -1) {: où est-ce que tu déclares l'objet reader? Pas de trace dans ton code posté...
2. Fais attention tit chaperon rouge, comme d'habitude lorsque l'on utilise le Class.forName() il y a des dangers... Pour SnowballStemmer tu as le choix: org.tartarus.snowball.SnowballStemmer ou bien terrier.SnowballStemmer ? Ce choix (lorsque tu fais l'import) va se révéler capital au runtime. ++ |
Merci sandul d'étre toujours là!
package lem;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.io.Reader;
import java.io.Writer;
import uk.ac.gla.terrier.terms.SnowballStemmer;
public class lem{
public static void lem(String s, String s1,String s2) throws Throwable{
Class stemClass = Class.forName("org.tartarus.snowball.ext."+s+"Stemmer");
SnowballStemmer stemmer = (SnowballStemmer)stemClass.newInstance();
Reader reader;
reader = new InputStreamReader(new FileInputStream(s1));
reader = new BufferedReader(reader);
StringBuffer input = new StringBuffer();
OutputStream outstream;
outstream = new FileOutputStream(s2);
Writer output = new OutputStreamWriter(outstream);
output = new BufferedWriter(output);
int repeat = 1;
Object [] emptyArgs = new Object[0];
int character;
while ((character = reader.read()) != -1) {
char ch = (char) character;
if (Character.isWhitespace((char) ch)) {
if (input.length() > 0) {
stemmer.setCurrent(input.toString());
for (int i = repeat; i != 0; i--) {
stemmer.stem("");
}
output.write(stemmer.getCurrent());
output.write('\n');
input.delete(0, input.length());
}
} else {
input.append(Character.toLowerCase(ch));
}
}
output.flush();
}
public static void main(String[] args) throws Throwable {
// TODO code application logic here
//french est la langue des mots à lemmatiser parceque le package permet de le faire dans plusieurs langues
// entree est le fichier à entrer pour la lemmatisation
//resultat est le fichier contenant tout les mots lemmatisés
lem("french","entree.txt","resultat.txt");
}
}
et pour la classe SnowballStemmer, son code est dans le package que j'ai téléchargé, je te donne son code: package terrier;
import org.tartarus.snowball.SnowballProgram;
import java.lang.reflect.Method;
import uk.ac.gla.terrier.terms.TermPipeline;
/**
* @author Craig Macdonald <craigm{a.}dcs.gla.ac.uk>
* @version $Revision: 1.2 $
*/
abstract public class SnowballStemmer implements TermPipeline {
/** The actual snowball object that does the stemming */
protected SnowballProgram stemmer = null;
/** The appropriate method. Damn reflection APIs. */
protected Method stemMethod = null;
/** The next object in the term pipeline to pass stemmed terms to */
protected TermPipeline next = null;
/** The language that we're currently stemming in */
protected String language = null;
protected final static Object [] emptyArgs = new Object[0];
private String courant;
/** Creates a new stemmer object for the language StemLanguage.
* @param StemLanguage Name of the language to generate the stemmer for. Must be a valid snowball stemmer language.
* @param next The next object in the term pipeline
*/
protected SnowballStemmer(String StemLanguage, TermPipeline next)
{
StemLanguage = StemLanguage.toLowerCase();
try{
Class stemClass = Class.forName("org.tartarus.snowball.ext." + StemLanguage + "Stemmer");
stemmer = (SnowballProgram) stemClass.newInstance();
stemMethod = stemClass.getMethod("stem", new Class[0]);
}catch(Exception e){
System.err.println("ERROR: Cannot generate snowball stemmer "+StemLanguage+" : "+e);
e.printStackTrace();
}
language = StemLanguage;
this.next = next;
}
/**
* Stems the given term and passes onto the next object in the term pipeline.
* @param t String the term to stem.
*/
public void processTerm(String t)
{
if (t == null)
return;
next.processTerm(stem(t));
}
/** Stems the given term and returns the stem
* @param term the term to be stemmed.
* @return the stemmed form of term */
public String stem(String term) {
stemmer.setCurrent(term);
/* one can only imagine why a stemmer abstract class wouldn't
wouldn't have a stem() method. */
try{
stemMethod.invoke(stemmer, emptyArgs); //stemmer.stem();
}catch (Exception e) {
System.err.println("ERROR: Cannot use snowball stemmer "+language+" : "+e);
e.printStackTrace();
}
return stemmer.getCurrent();
}
}
c'est le code de la classe tel qu'il a été défini par 'terrier' mais comme on doit appliquer les methodes setCurrent et getCurrent à un objet de type SnowballStemmer, j'ai jugé utile de rajouté ces 2 methodes dans cette classe comme tel: public void setCurrent(String value)
{ courant=value;
}
public String getCurrent(){
return courant;
}
mais le probleme persiste, 'cannot find symbol' |
Je viens d'echanger mon import "import uk.ac.gla.terrier.terms.SnowballStemmer;" contre "import terrier.SnowballStemmer;"
|