Closed Neuw84 closed 9 years ago
Los modelos los puedes cargar desde donde quieras, no hace falta cambiar el código, simplemente darle el path del modelo a las Properties. De todas maneras, no puedo ver lo que has cambiado porque en el diff me aparecen cambiadas las dos clases enteras.
El modelo ya veo que si via lo de las Properties si, pero si no me equivocado a la hora de cargar los diccionarios lo hace desde un directorio por defecto. Al final he añadido un parametro más a las Properties (opcional) llamado directory. Luego si esta definido a la hora de cargar los diccionarios he añadido dos metodos en la clase resources.
public final URL getBinaryTaggerDictFromDir(String directory, String lang) {
URL dictURL = null;
try {
if (lang.equalsIgnoreCase("es")) {
dictURL = new File(directory + "/lemmatizer-dicts/freeling/spanish-monosemic.dict").toURI().toURL();
}
if (lang.equalsIgnoreCase("gl")) {
dictURL = new File(directory + "/lemmatizer-dicts/ctag/galician-monosemic.dict").toURI().toURL();
}
} catch (MalformedURLException ex) {
ex.printStackTrace();
}
return dictURL;
} }
y el otro
public final URL getBinaryDictFromDir(String directory, final String lang) {
URL dictURL = null;
try {
if (lang.equalsIgnoreCase("en")) {
dictURL = new File(directory + "lemmatizer-dicts/language-tool/english.dict").toURI().toURL();
}
if (lang.equalsIgnoreCase("es")) {
dictURL = new File(directory + "lemmatizer-dicts/freeling/spanish.dict").toURI().toURL();
}
if (lang.equalsIgnoreCase("gl")) {
dictURL = new File(directory + "lemmatizer-dicts/ctag/galician.dict").toURI().toURL();
}
} catch (MalformedURLException ex) {
ex.printStackTrace();
}
return dictURL;
}
a la hora de cargarlos en la clase Annotate lo que hago es ver si en properties esta definido el Dir, y si lo esta a la hora de cargar los diccionarios llamo a estos metodos en vez de a los de por defecto
La modificacion del constructor (un if al fin y al cabo)
public Annotate(final Properties properties) throws IOException {
this.lang = properties.getProperty("language");
this.multiwords = Boolean.valueOf(properties.getProperty("multiwords"));
this.dictag = Boolean.valueOf(properties.getProperty("dictag"));
if (properties.getProperty("directory") != null) {
directory = properties.getProperty("directory");
}
if (this.multiwords) {
this.multiWordMatcher = new MultiWordMatcher(properties);
}
if (this.dictag) {
loadMorphoTaggerDicts(properties);
}
loadLemmatizerDicts(properties);
this.morphoFactory = new MorphoFactory();
this.posTagger = new MorphoTagger(properties, this.morphoFactory);
}
A la hora de cargar los diccionarios un if else sencillo tambien
private void loadLemmatizerDicts(final Properties props) {
final Resources resources = new Resources();
final URL binLemmatizerURL;
if (directory == null) {
binLemmatizerURL = resources.getBinaryDict(this.lang);
} else {
binLemmatizerURL = resources.getBinaryDictFromDir(directory, this.lang);
}
if (binLemmatizerURL == null) {
System.err
.println("ERROR: No binary lemmatizer dictionary available for language "
+ this.lang + " in src/main/resources!!");
System.exit(1);
}
try {
this.dictLemmatizer = new MorfologikLemmatizer(binLemmatizerURL,
this.lang);
} catch (final IOException e) {
e.printStackTrace();
}
}
No se que ha pasado que se ha movido toda la clase supongo que igual alguna linea que igual he quitado y asi es imposible ver los cambios
Closed.
He añadido la carga de modelos desde directorios externos, tocando lo menos posible tu código (dos metodos en resources) y en las properties del annotatte una variable más.