You can subscribe to this list here.
2001 |
Jan
|
Feb
|
Mar
|
Apr
|
May
|
Jun
|
Jul
|
Aug
(5) |
Sep
|
Oct
(14) |
Nov
(37) |
Dec
(13) |
---|---|---|---|---|---|---|---|---|---|---|---|---|
2002 |
Jan
(14) |
Feb
|
Mar
|
Apr
(15) |
May
|
Jun
|
Jul
|
Aug
|
Sep
|
Oct
|
Nov
(3) |
Dec
(2) |
2003 |
Jan
(4) |
Feb
|
Mar
(1) |
Apr
(2) |
May
|
Jun
|
Jul
|
Aug
|
Sep
|
Oct
|
Nov
|
Dec
(4) |
2004 |
Jan
(1) |
Feb
(3) |
Mar
|
Apr
|
May
(4) |
Jun
(3) |
Jul
(1) |
Aug
(6) |
Sep
|
Oct
|
Nov
|
Dec
|
2005 |
Jan
|
Feb
|
Mar
|
Apr
|
May
|
Jun
|
Jul
|
Aug
|
Sep
|
Oct
(17) |
Nov
(3) |
Dec
|
2006 |
Jan
|
Feb
|
Mar
|
Apr
|
May
|
Jun
|
Jul
|
Aug
|
Sep
|
Oct
|
Nov
(23) |
Dec
|
2007 |
Jan
|
Feb
|
Mar
(7) |
Apr
(17) |
May
(1) |
Jun
|
Jul
|
Aug
|
Sep
|
Oct
|
Nov
|
Dec
|
2008 |
Jan
|
Feb
|
Mar
|
Apr
(1) |
May
|
Jun
|
Jul
|
Aug
(3) |
Sep
(20) |
Oct
|
Nov
(15) |
Dec
(2) |
2009 |
Jan
(38) |
Feb
(4) |
Mar
(20) |
Apr
|
May
|
Jun
|
Jul
|
Aug
|
Sep
|
Oct
|
Nov
|
Dec
|
2010 |
Jan
|
Feb
|
Mar
|
Apr
|
May
|
Jun
(4) |
Jul
|
Aug
(17) |
Sep
(26) |
Oct
|
Nov
(2) |
Dec
|
Update of /cvsroot/maxent/maxent/src/java/opennlp/model In directory 23jxhf1.ch3.sourceforge.com:/tmp/cvs-serv1009/src/java/opennlp/model Modified Files: EventCollectorAsStream.java AbstractModelReader.java EvalParameters.java EventStream.java RealValueFileEventStream.java OnePassDataIndexer.java TwoPassDataIndexer.java AbstractModel.java FileEventStream.java Added Files: ObjectDataReader.java AbstractEventStream.java BinaryFileDataReader.java DataReader.java DynamicEvalParameters.java PlainTextFileDataReader.java GenericModelReader.java Log Message: Updates to support perceptron models. --- NEW FILE: ObjectDataReader.java --- package opennlp.model; import java.io.IOException; import java.io.ObjectInputStream; public class ObjectDataReader implements DataReader { protected ObjectInputStream ois; public ObjectDataReader(ObjectInputStream ois) { this.ois = ois; } public double readDouble() throws IOException { return ois.readDouble(); } public int readInt() throws IOException { return ois.readInt(); } public String readUTF() throws IOException { return ois.readUTF(); } } --- NEW FILE: AbstractEventStream.java --- package opennlp.model; public abstract class AbstractEventStream implements EventStream { public AbstractEventStream() { super(); } public void remove() { throw new UnsupportedOperationException(); } } --- NEW FILE: BinaryFileDataReader.java --- package opennlp.model; import java.io.DataInputStream; import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.io.InputStream; import java.util.zip.GZIPInputStream; public class BinaryFileDataReader implements DataReader { private DataInputStream input; public BinaryFileDataReader(File f) throws IOException { if (f.getName().endsWith(".gz")) { input = new DataInputStream( new GZIPInputStream(new FileInputStream(f))); } else { input = new DataInputStream(new FileInputStream(f)); } } public BinaryFileDataReader(InputStream in) { input = new DataInputStream(in); } public BinaryFileDataReader(DataInputStream in) { input = in; } public double readDouble() throws IOException { return input.readDouble(); } public int readInt() throws IOException { return input.readInt(); } public String readUTF() throws IOException { return input.readUTF(); } } --- NEW FILE: DataReader.java --- package opennlp.model; import java.io.IOException; public interface DataReader { public double readDouble() throws IOException; public int readInt() throws IOException; public String readUTF() throws IOException; } --- NEW FILE: DynamicEvalParameters.java --- package opennlp.model; import java.util.List; public class DynamicEvalParameters { /** Mapping between outcomes and paramater values for each context. * The integer representation of the context can be found using <code>pmap</code>.*/ private List<? extends Context> params; /** The number of outcomes being predicted. */ private final int numOutcomes; /** * Creates a set of paramters which can be evaulated with the eval method. * @param params The parameters of the model. * @param numOutcomes The number of outcomes. */ public DynamicEvalParameters(List<? extends Context> params, int numOutcomes) { this.params = params; this.numOutcomes = numOutcomes; } public Context[] getParams() { return params.toArray(new Context[params.size()]); } public int getNumOutcomes() { return numOutcomes; } } --- NEW FILE: PlainTextFileDataReader.java --- package opennlp.model; import java.io.BufferedReader; import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.util.zip.GZIPInputStream; public class PlainTextFileDataReader implements DataReader { private BufferedReader input; public PlainTextFileDataReader(File f) throws IOException { if (f.getName().endsWith(".gz")) { input = new BufferedReader(new InputStreamReader(new GZIPInputStream(new FileInputStream(f)))); } else { input = new BufferedReader(new InputStreamReader(new FileInputStream(f))); } } public PlainTextFileDataReader(InputStream in) { input = new BufferedReader(new InputStreamReader(in)); } public PlainTextFileDataReader(BufferedReader in) { input = in; } public double readDouble() throws IOException { return Double.parseDouble(input.readLine()); } public int readInt() throws IOException { return Integer.parseInt(input.readLine()); } public String readUTF() throws IOException { return input.readLine(); } } --- NEW FILE: GenericModelReader.java --- package opennlp.model; import java.io.File; import java.io.IOException; import opennlp.maxent.io.GISModelReader; import opennlp.perceptron.PerceptronModelReader; public class GenericModelReader extends AbstractModelReader { private AbstractModelReader delegateModelReader; public GenericModelReader (File f) throws IOException { super(f); } public void checkModelType() throws IOException { String modelType = readUTF(); if (modelType.equals("Perceptron")) { delegateModelReader = new PerceptronModelReader(this.dataReader); } else if (modelType.equals("Maxent")) { delegateModelReader = new GISModelReader(this.dataReader); } } public AbstractModel constructModel() throws IOException { return delegateModelReader.constructModel(); } } Index: EventCollectorAsStream.java =================================================================== RCS file: /cvsroot/maxent/maxent/src/java/opennlp/model/EventCollectorAsStream.java,v retrieving revision 1.1 retrieving revision 1.2 diff -C2 -d -r1.1 -r1.2 *** EventCollectorAsStream.java 28 Sep 2008 18:02:52 -0000 1.1 --- EventCollectorAsStream.java 6 Nov 2008 19:59:44 -0000 1.2 *************** *** 27,31 **** * @version $Revision$, $Date$ */ ! public final class EventCollectorAsStream implements EventStream { final Event[] events; final int numEvents; --- 27,31 ---- * @version $Revision$, $Date$ */ ! public final class EventCollectorAsStream extends AbstractEventStream { final Event[] events; final int numEvents; *************** *** 37,46 **** } ! public Event nextEvent () { ! return events[index++]; } public boolean hasNext () { ! return (index < numEvents); } --- 37,46 ---- } ! public Event next () { ! return events[index++]; } public boolean hasNext () { ! return (index < numEvents); } Index: AbstractModelReader.java =================================================================== RCS file: /cvsroot/maxent/maxent/src/java/opennlp/model/AbstractModelReader.java,v retrieving revision 1.1 retrieving revision 1.2 diff -C2 -d -r1.1 -r1.2 *** AbstractModelReader.java 28 Sep 2008 18:02:38 -0000 1.1 --- AbstractModelReader.java 6 Nov 2008 19:59:44 -0000 1.2 *************** *** 18,22 **** --- 18,27 ---- package opennlp.model; + import java.io.File; + import java.io.FileInputStream; + import java.io.IOException; + import java.io.InputStream; import java.util.StringTokenizer; + import java.util.zip.GZIPInputStream; *************** *** 27,53 **** */ protected int NUM_PREDS; ! public AbstractModelReader() { ! super(); } /** * Implement as needed for the format the model is stored in. */ ! public abstract int readInt() throws java.io.IOException; /** * Implement as needed for the format the model is stored in. */ ! public abstract double readDouble() throws java.io.IOException; /** * Implement as needed for the format the model is stored in. */ ! public abstract String readUTF() throws java.io.IOException; ! public abstract AbstractModel getModel () throws java.io.IOException; public abstract void checkModelType() throws java.io.IOException; protected String[] getOutcomes() throws java.io.IOException { --- 32,92 ---- */ protected int NUM_PREDS; + protected DataReader dataReader; + + public AbstractModelReader(File f) throws IOException { + String filename = f.getName(); + InputStream input; + // handle the zipped/not zipped distinction + if (filename.endsWith(".gz")) { + input = new GZIPInputStream(new FileInputStream(f)); + filename = filename.substring(0,filename.length()-3); + } + else { + input = new FileInputStream(f); + } ! // handle the different formats ! if (filename.endsWith(".bin")) { ! this.dataReader = new BinaryFileDataReader(input); ! } ! else { // filename ends with ".txt" ! this.dataReader = new PlainTextFileDataReader(input); ! } } + public AbstractModelReader(DataReader dataReader) { + super(); + this.dataReader = dataReader; + } + /** * Implement as needed for the format the model is stored in. */ ! public int readInt() throws java.io.IOException { ! return dataReader.readInt(); ! } /** * Implement as needed for the format the model is stored in. */ ! public double readDouble() throws java.io.IOException { ! return dataReader.readDouble(); ! } /** * Implement as needed for the format the model is stored in. */ ! public String readUTF() throws java.io.IOException { ! return dataReader.readUTF(); ! } ! public AbstractModel getModel() throws IOException { ! checkModelType(); ! return constructModel(); ! } public abstract void checkModelType() throws java.io.IOException; + + public abstract AbstractModel constructModel() throws java.io.IOException; protected String[] getOutcomes() throws java.io.IOException { Index: EvalParameters.java =================================================================== RCS file: /cvsroot/maxent/maxent/src/java/opennlp/model/EvalParameters.java,v retrieving revision 1.1 retrieving revision 1.2 diff -C2 -d -r1.1 -r1.2 *** EvalParameters.java 28 Sep 2008 18:02:37 -0000 1.1 --- EvalParameters.java 6 Nov 2008 19:59:44 -0000 1.2 *************** *** 30,49 **** /** Mapping between outcomes and paramater values for each context. * The integer representation of the context can be found using <code>pmap</code>.*/ ! public Context[] params; /** The number of outcomes being predicted. */ ! public final int numOutcomes; /** The maximum number of feattures fired in an event. Usually refered to a C. * This is used to normalize the number of features which occur in an event. */ ! public double correctionConstant; /** Stores inverse of the correction constant, 1/C. */ ! public final double constantInverse; /** The correction parameter of the model. */ ! public double correctionParam; ! /** Log of 1/C; initial value of probabilities. */ ! private final double iprob; - private String[] outcomeLabels; - /** * Creates a set of paramters which can be evaulated with the eval method. --- 30,45 ---- /** Mapping between outcomes and paramater values for each context. * The integer representation of the context can be found using <code>pmap</code>.*/ ! private Context[] params; /** The number of outcomes being predicted. */ ! private final int numOutcomes; /** The maximum number of feattures fired in an event. Usually refered to a C. * This is used to normalize the number of features which occur in an event. */ ! private double correctionConstant; /** Stores inverse of the correction constant, 1/C. */ ! private final double constantInverse; /** The correction parameter of the model. */ ! private double correctionParam; /** * Creates a set of paramters which can be evaulated with the eval method. *************** *** 59,63 **** this.correctionConstant = correctionConstant; this.constantInverse = 1.0 / correctionConstant; - this.iprob = Math.log(1.0/numOutcomes); } --- 55,58 ---- *************** *** 66,83 **** } ! public EvalParameters(Context[] params, int numOutcomes, String[] outcomeLabels) { ! this(params,0,0,numOutcomes); ! this.outcomeLabels = outcomeLabels; } ! ! public void setOutcomes(String[] outcomeLabels) { ! this.outcomeLabels = outcomeLabels; } ! public String getOutcomeLabel(int oi) { ! if (outcomeLabels != null) { ! return outcomeLabels[oi]; ! } ! return null; } } \ No newline at end of file --- 61,92 ---- } ! /* (non-Javadoc) ! * @see opennlp.model.EvalParameters#getParams() ! */ ! public Context[] getParams() { ! return params; } ! ! /* (non-Javadoc) ! * @see opennlp.model.EvalParameters#getNumOutcomes() ! */ ! public int getNumOutcomes() { ! return numOutcomes; ! } ! ! public double getCorrectionConstant() { ! return correctionConstant; ! } ! ! public double getConstantInverse() { ! return constantInverse; ! } ! ! public double getCorrectionParam() { ! return correctionParam; } ! public void setCorrectionParam(double correctionParam) { ! this.correctionParam = correctionParam; } } \ No newline at end of file Index: EventStream.java =================================================================== RCS file: /cvsroot/maxent/maxent/src/java/opennlp/model/EventStream.java,v retrieving revision 1.1 retrieving revision 1.2 diff -C2 -d -r1.1 -r1.2 *** EventStream.java 28 Sep 2008 18:02:36 -0000 1.1 --- EventStream.java 6 Nov 2008 19:59:44 -0000 1.2 *************** *** 18,21 **** --- 18,23 ---- package opennlp.model; + import java.util.Iterator; + /** * A object which can deliver a stream of training events for the GIS *************** *** 29,33 **** * */ ! public interface EventStream { /** --- 31,35 ---- * */ ! public interface EventStream extends Iterator<Event>{ /** *************** *** 36,40 **** * @return the Event object which is next in this EventStream */ ! public Event nextEvent (); /** --- 38,42 ---- * @return the Event object which is next in this EventStream */ ! public Event next (); /** *************** *** 44,47 **** --- 46,50 ---- */ public boolean hasNext (); + } Index: RealValueFileEventStream.java =================================================================== RCS file: /cvsroot/maxent/maxent/src/java/opennlp/model/RealValueFileEventStream.java,v retrieving revision 1.1 retrieving revision 1.2 diff -C2 -d -r1.1 -r1.2 *** RealValueFileEventStream.java 28 Sep 2008 18:02:38 -0000 1.1 --- RealValueFileEventStream.java 6 Nov 2008 19:59:44 -0000 1.2 *************** *** 75,79 **** } ! public Event nextEvent() { int si = line.indexOf(' '); String outcome = line.substring(0,si); --- 75,79 ---- } ! public Event next() { int si = line.indexOf(' '); String outcome = line.substring(0,si); Index: OnePassDataIndexer.java =================================================================== RCS file: /cvsroot/maxent/maxent/src/java/opennlp/model/OnePassDataIndexer.java,v retrieving revision 1.1 retrieving revision 1.2 diff -C2 -d -r1.1 -r1.2 *** OnePassDataIndexer.java 28 Sep 2008 18:02:42 -0000 1.1 --- OnePassDataIndexer.java 6 Nov 2008 19:59:44 -0000 1.2 *************** *** 105,109 **** LinkedList<Event> events = new LinkedList<Event>(); while (eventStream.hasNext()) { ! Event ev = eventStream.nextEvent(); events.addLast(ev); update(ev.getContext(),predicateSet,counter,cutoff); --- 105,109 ---- LinkedList<Event> events = new LinkedList<Event>(); while (eventStream.hasNext()) { ! Event ev = eventStream.next(); events.addLast(ev); update(ev.getContext(),predicateSet,counter,cutoff); Index: TwoPassDataIndexer.java =================================================================== RCS file: /cvsroot/maxent/maxent/src/java/opennlp/model/TwoPassDataIndexer.java,v retrieving revision 1.1 retrieving revision 1.2 diff -C2 -d -r1.1 -r1.2 *** TwoPassDataIndexer.java 28 Sep 2008 18:02:47 -0000 1.1 --- TwoPassDataIndexer.java 6 Nov 2008 19:59:44 -0000 1.2 *************** *** 113,117 **** Set predicateSet = new HashSet(); while (eventStream.hasNext()) { ! Event ev = eventStream.nextEvent(); eventCount++; eventStore.write(FileEventStream.toLine(ev)); --- 113,117 ---- Set predicateSet = new HashSet(); while (eventStream.hasNext()) { ! Event ev = eventStream.next(); eventCount++; eventStore.write(FileEventStream.toLine(ev)); *************** *** 136,140 **** List<Integer> indexedContext = new ArrayList<Integer>(); while (es.hasNext()) { ! Event ev = es.nextEvent(); String[] econtext = ev.getContext(); ComparableEvent ce; --- 136,140 ---- List<Integer> indexedContext = new ArrayList<Integer>(); while (es.hasNext()) { ! Event ev = es.next(); String[] econtext = ev.getContext(); ComparableEvent ce; Index: AbstractModel.java =================================================================== RCS file: /cvsroot/maxent/maxent/src/java/opennlp/model/AbstractModel.java,v retrieving revision 1.1 retrieving revision 1.2 diff -C2 -d -r1.1 -r1.2 *** AbstractModel.java 28 Sep 2008 18:02:34 -0000 1.1 --- AbstractModel.java 6 Nov 2008 19:59:44 -0000 1.2 *************** *** 32,41 **** protected Prior prior; ! public AbstractModel (Context[] params, String[] predLabels, String[] outcomeNames) { init(predLabels,outcomeNames); this.evalParams = new EvalParameters(params,ocNames.length); } ! public AbstractModel (Context[] params, String[] predLabels, String[] outcomeNames, int correctionConstant,double correctionParam) { init(predLabels,outcomeNames); this.evalParams = new EvalParameters(params,correctionConstant,correctionParam,ocNames.length); --- 32,41 ---- protected Prior prior; ! public AbstractModel(Context[] params, String[] predLabels, String[] outcomeNames) { init(predLabels,outcomeNames); this.evalParams = new EvalParameters(params,ocNames.length); } ! public AbstractModel(Context[] params, String[] predLabels, String[] outcomeNames, int correctionConstant,double correctionParam) { init(predLabels,outcomeNames); this.evalParams = new EvalParameters(params,correctionConstant,correctionParam,ocNames.length); *************** *** 122,126 **** public int getNumOutcomes() { ! return(evalParams.numOutcomes); } --- 122,126 ---- public int getNumOutcomes() { ! return(evalParams.getNumOutcomes()); } *************** *** 147,155 **** public final Object[] getDataStructures() { Object[] data = new Object[5]; ! data[0] = evalParams.params; data[1] = pmap; data[2] = ocNames; ! data[3] = new Integer((int)evalParams.correctionConstant); ! data[4] = new Double(evalParams.correctionParam); return data; } --- 147,155 ---- public final Object[] getDataStructures() { Object[] data = new Object[5]; ! data[0] = evalParams.getParams(); data[1] = pmap; data[2] = ocNames; ! data[3] = new Integer((int)evalParams.getCorrectionConstant()); ! data[4] = new Double(evalParams.getCorrectionParam()); return data; } Index: FileEventStream.java =================================================================== RCS file: /cvsroot/maxent/maxent/src/java/opennlp/model/FileEventStream.java,v retrieving revision 1.1 retrieving revision 1.2 diff -C2 -d -r1.1 -r1.2 *** FileEventStream.java 28 Sep 2008 18:02:42 -0000 1.1 --- FileEventStream.java 6 Nov 2008 19:59:44 -0000 1.2 *************** *** 35,39 **** * */ ! public class FileEventStream implements EventStream { BufferedReader reader; --- 35,39 ---- * */ ! public class FileEventStream extends AbstractEventStream { BufferedReader reader; *************** *** 77,81 **** } ! public Event nextEvent() { StringTokenizer st = new StringTokenizer(line); String outcome = st.nextToken(); --- 77,81 ---- } ! public Event next() { StringTokenizer st = new StringTokenizer(line); String outcome = st.nextToken(); |
Update of /cvsroot/maxent/maxent/src/java/opennlp/maxent/io In directory 23jxhf1.ch3.sourceforge.com:/tmp/cvs-serv1009/src/java/opennlp/maxent/io Modified Files: BinaryGISModelReader.java ObjectGISModelReader.java SuffixSensitiveGISModelReader.java PlainTextGISModelReader.java GISModelReader.java Log Message: Updates to support perceptron models. Index: BinaryGISModelReader.java =================================================================== RCS file: /cvsroot/maxent/maxent/src/java/opennlp/maxent/io/BinaryGISModelReader.java,v retrieving revision 1.2 retrieving revision 1.3 diff -C2 -d -r1.2 -r1.3 *** BinaryGISModelReader.java 28 Sep 2008 18:04:24 -0000 1.2 --- BinaryGISModelReader.java 6 Nov 2008 19:59:44 -0000 1.3 *************** *** 18,23 **** package opennlp.maxent.io; ! import java.io.*; ! import java.util.zip.*; /** --- 18,24 ---- package opennlp.maxent.io; ! import java.io.DataInputStream; ! ! import opennlp.model.BinaryFileDataReader; /** *************** *** 28,32 **** */ public class BinaryGISModelReader extends GISModelReader { - protected DataInputStream input; /** --- 29,32 ---- *************** *** 37,73 **** */ public BinaryGISModelReader (DataInputStream dis) { ! input = dis; ! } ! ! /** ! * Constructor which takes a File and creates a reader for it. Detects ! * whether the file is gzipped or not based on whether the suffix contains ! * ".gz" ! * ! * @param f The File in which the model is stored. ! */ ! public BinaryGISModelReader (File f) throws IOException { ! ! if (f.getName().endsWith(".gz")) { ! input = new DataInputStream( ! new GZIPInputStream(new FileInputStream(f))); ! } ! else { ! input = new DataInputStream(new FileInputStream(f)); ! } ! ! } ! ! public int readInt () throws java.io.IOException { ! return input.readInt(); ! } ! ! public double readDouble () throws java.io.IOException { ! return input.readDouble(); ! } ! ! public String readUTF () throws java.io.IOException { ! return input.readUTF(); } - } --- 37,41 ---- */ public BinaryGISModelReader (DataInputStream dis) { ! super(new BinaryFileDataReader(dis)); } } Index: ObjectGISModelReader.java =================================================================== RCS file: /cvsroot/maxent/maxent/src/java/opennlp/maxent/io/ObjectGISModelReader.java,v retrieving revision 1.2 retrieving revision 1.3 diff -C2 -d -r1.2 -r1.3 *** ObjectGISModelReader.java 28 Sep 2008 18:04:27 -0000 1.2 --- ObjectGISModelReader.java 6 Nov 2008 19:59:44 -0000 1.3 *************** *** 18,24 **** package opennlp.maxent.io; - import java.io.IOException; import java.io.ObjectInputStream; public class ObjectGISModelReader extends GISModelReader { --- 18,25 ---- package opennlp.maxent.io; import java.io.ObjectInputStream; + import opennlp.model.ObjectDataReader; + public class ObjectGISModelReader extends GISModelReader { *************** *** 32,51 **** */ ! public ObjectGISModelReader(ObjectInputStream dis) { ! super(); ! input = dis; ! } ! ! public int readInt() throws IOException { ! return input.readInt(); ! } ! ! public double readDouble() throws IOException { ! return input.readDouble(); ! } ! ! public String readUTF() throws IOException { ! return input.readUTF(); } - } --- 33,38 ---- */ ! public ObjectGISModelReader(ObjectInputStream ois) { ! super(new ObjectDataReader(ois)); } } Index: SuffixSensitiveGISModelReader.java =================================================================== RCS file: /cvsroot/maxent/maxent/src/java/opennlp/maxent/io/SuffixSensitiveGISModelReader.java,v retrieving revision 1.4 retrieving revision 1.5 diff -C2 -d -r1.4 -r1.5 *** SuffixSensitiveGISModelReader.java 28 Sep 2008 18:04:24 -0000 1.4 --- SuffixSensitiveGISModelReader.java 6 Nov 2008 19:59:44 -0000 1.5 *************** *** 52,91 **** */ public SuffixSensitiveGISModelReader (File f) throws IOException { ! InputStream input; ! String filename = f.getName(); ! ! // handle the zipped/not zipped distinction ! if (filename.endsWith(".gz")) { ! input = new GZIPInputStream(new FileInputStream(f)); ! filename = filename.substring(0,filename.length()-3); ! } ! else { ! input = new FileInputStream(f); ! } ! ! // handle the different formats ! if (filename.endsWith(".bin")) { ! suffixAppropriateReader = ! new BinaryGISModelReader(new DataInputStream(input)); ! } ! // add more else ifs here to add further Reader types, e.g. ! // else if (filename.endsWith(".xml")) ! // suffixAppropriateReader = new XmlGISModelReader(input); ! // of course, a BufferedReader may not be what is wanted here, ! // so you might have to do a bit more to get ! // SuffixSensitiveGISModelReader to work for xml or other formats. ! // However, the default should be plain text (.txt). ! else { // filename ends with ".txt" ! suffixAppropriateReader = ! new PlainTextGISModelReader( ! new BufferedReader(new InputStreamReader(input))); ! } ! } - protected SuffixSensitiveGISModelReader() { - super(); - } - // activate this if adding another type of reader which can't read model // information in the way that the default getModel() method in --- 52,58 ---- */ public SuffixSensitiveGISModelReader (File f) throws IOException { ! super(f); } // activate this if adding another type of reader which can't read model // information in the way that the default getModel() method in *************** *** 96,111 **** - public int readInt () throws IOException { - return suffixAppropriateReader.readInt(); - } - - public double readDouble () throws IOException { - return suffixAppropriateReader.readDouble(); - } - - public String readUTF () throws IOException { - return suffixAppropriateReader.readUTF(); - } - /** * To convert between different formats of the new style. --- 63,66 ---- Index: PlainTextGISModelReader.java =================================================================== RCS file: /cvsroot/maxent/maxent/src/java/opennlp/maxent/io/PlainTextGISModelReader.java,v retrieving revision 1.2 retrieving revision 1.3 diff -C2 -d -r1.2 -r1.3 *** PlainTextGISModelReader.java 28 Sep 2008 18:04:30 -0000 1.2 --- PlainTextGISModelReader.java 6 Nov 2008 19:59:44 -0000 1.3 *************** *** 18,23 **** package opennlp.maxent.io; ! import java.io.*; ! import java.util.zip.*; /** --- 18,26 ---- package opennlp.maxent.io; ! import java.io.BufferedReader; ! import java.io.File; ! import java.io.IOException; ! ! import opennlp.model.PlainTextFileDataReader; /** *************** *** 28,32 **** */ public class PlainTextGISModelReader extends GISModelReader { - private BufferedReader input; /** --- 31,34 ---- *************** *** 37,41 **** */ public PlainTextGISModelReader (BufferedReader br) { ! input = br; } --- 39,43 ---- */ public PlainTextGISModelReader (BufferedReader br) { ! super(new PlainTextFileDataReader(br)); } *************** *** 48,73 **** */ public PlainTextGISModelReader (File f) throws IOException { ! ! if (f.getName().endsWith(".gz")) { ! input = new BufferedReader(new InputStreamReader( ! new GZIPInputStream(new FileInputStream(f)))); ! } ! else { ! input = new BufferedReader(new FileReader(f)); ! } ! ! } ! ! public int readInt () throws IOException { ! return Integer.parseInt(input.readLine()); ! } ! ! public double readDouble () throws IOException { ! return Double.parseDouble(input.readLine()); ! } ! ! public String readUTF () throws IOException { ! return input.readLine(); } - } --- 50,54 ---- */ public PlainTextGISModelReader (File f) throws IOException { ! super(f); } } Index: GISModelReader.java =================================================================== RCS file: /cvsroot/maxent/maxent/src/java/opennlp/maxent/io/GISModelReader.java,v retrieving revision 1.8 retrieving revision 1.9 diff -C2 -d -r1.8 -r1.9 *** GISModelReader.java 28 Sep 2008 18:04:22 -0000 1.8 --- GISModelReader.java 6 Nov 2008 19:59:44 -0000 1.9 *************** *** 18,25 **** --- 18,29 ---- package opennlp.maxent.io; + import java.io.File; + import java.io.IOException; + import opennlp.maxent.GISModel; import opennlp.model.AbstractModel; import opennlp.model.AbstractModelReader; import opennlp.model.Context; + import opennlp.model.DataReader; /** *************** *** 29,33 **** * @version $Revision$, $Date$ */ ! public abstract class GISModelReader extends AbstractModelReader { /** * Retrieve a model from disk. It assumes that models are saved in the --- 33,46 ---- * @version $Revision$, $Date$ */ ! public class GISModelReader extends AbstractModelReader { ! ! public GISModelReader(File file) throws IOException { ! super(file); ! } ! ! public GISModelReader(DataReader dataReader) { ! super(dataReader); ! } ! /** * Retrieve a model from disk. It assumes that models are saved in the *************** *** 52,73 **** * @return The GISModel stored in the format and location specified to * this GISModelReader (usually via its the constructor). ! */ ! public AbstractModel getModel () throws java.io.IOException { ! checkModelType(); ! int correctionConstant = getCorrectionConstant(); ! double correctionParam = getCorrectionParameter(); ! String[] outcomeLabels = getOutcomes(); ! int[][] outcomePatterns = getOutcomePatterns(); ! String[] predLabels = getPredicates(); ! Context[] params = getParameters(outcomePatterns); ! ! return new GISModel(params, ! predLabels, ! outcomeLabels, ! correctionConstant, ! correctionParam); ! ! } public void checkModelType() throws java.io.IOException { String modelType = readUTF(); --- 65,84 ---- * @return The GISModel stored in the format and location specified to * this GISModelReader (usually via its the constructor). ! */ ! public AbstractModel constructModel() throws IOException { ! int correctionConstant = getCorrectionConstant(); ! double correctionParam = getCorrectionParameter(); ! String[] outcomeLabels = getOutcomes(); ! int[][] outcomePatterns = getOutcomePatterns(); ! String[] predLabels = getPredicates(); ! Context[] params = getParameters(outcomePatterns); + return new GISModel(params, + predLabels, + outcomeLabels, + correctionConstant, + correctionParam); + } + public void checkModelType() throws java.io.IOException { String modelType = readUTF(); |
From: Thomas M. <tsm...@us...> - 2008-11-06 19:59:29
|
Update of /cvsroot/maxent/maxent/src/java/opennlp/perceptron In directory 23jxhf1.ch3.sourceforge.com:/tmp/cvs-serv985/src/java/opennlp/perceptron Log Message: Directory /cvsroot/maxent/maxent/src/java/opennlp/perceptron added to the repository |
From: Thomas M. <tsm...@us...> - 2008-09-28 18:08:27
|
Update of /cvsroot/maxent/maxent/lib In directory sc8-pr-cvs16.sourceforge.net:/tmp/cvs-serv22995/lib Removed Files: trove.jar Log Message: Changed License to ASL Removed trove dependicies. Re-structured packages. --- trove.jar DELETED --- |
From: Thomas M. <tsm...@us...> - 2008-09-28 18:05:21
|
Update of /cvsroot/maxent/maxent/lib In directory sc8-pr-cvs16.sourceforge.net:/tmp/cvs-serv14012/lib Modified Files: LIBNOTES Log Message: Changed License to ASL Removed trove dependicies. Re-structured packages. Index: LIBNOTES =================================================================== RCS file: /cvsroot/maxent/maxent/lib/LIBNOTES,v retrieving revision 1.11 retrieving revision 1.12 diff -C2 -d -r1.11 -r1.12 *** LIBNOTES 2 Feb 2004 19:43:42 -0000 1.11 --- LIBNOTES 28 Sep 2008 18:04:35 -0000 1.12 *************** *** 25,36 **** A Java command line option parser. - ------------------------------------------------------------------------ - trove.jar - - GNU Trove, version 1.0.2 - Homepage: http://trove4j.sf.net - License: LGPL - - High performance collections for Java. - --- 25,27 ---- |
From: Thomas M. <tsm...@us...> - 2008-09-28 18:05:18
|
Update of /cvsroot/maxent/maxent/test/src/opennlp/maxent In directory sc8-pr-cvs16.sourceforge.net:/tmp/cvs-serv14012/test/src/opennlp/maxent Modified Files: RealValueModelTests.java Log Message: Changed License to ASL Removed trove dependicies. Re-structured packages. Index: RealValueModelTests.java =================================================================== RCS file: /cvsroot/maxent/maxent/test/src/opennlp/maxent/RealValueModelTests.java,v retrieving revision 1.1 retrieving revision 1.2 diff -C2 -d -r1.1 -r1.2 *** RealValueModelTests.java 26 Sep 2008 03:53:49 -0000 1.1 --- RealValueModelTests.java 28 Sep 2008 18:04:36 -0000 1.2 *************** *** 3,6 **** --- 3,10 ---- import java.io.IOException; + import opennlp.model.FileEventStream; + import opennlp.model.OnePassRealValueDataIndexer; + import opennlp.model.RealValueFileEventStream; + import junit.framework.TestCase; |
From: Thomas M. <tsm...@us...> - 2008-09-28 18:05:15
|
Update of /cvsroot/maxent/maxent/test/src/opennlp/maxent/io In directory sc8-pr-cvs16.sourceforge.net:/tmp/cvs-serv14012/test/src/opennlp/maxent/io Modified Files: RealValueFileEventStreamTests.java Log Message: Changed License to ASL Removed trove dependicies. Re-structured packages. Index: RealValueFileEventStreamTests.java =================================================================== RCS file: /cvsroot/maxent/maxent/test/src/opennlp/maxent/io/RealValueFileEventStreamTests.java,v retrieving revision 1.1 retrieving revision 1.2 diff -C2 -d -r1.1 -r1.2 *** RealValueFileEventStreamTests.java 1 Sep 2008 18:04:13 -0000 1.1 --- RealValueFileEventStreamTests.java 28 Sep 2008 18:04:35 -0000 1.2 *************** *** 4,9 **** import junit.framework.TestCase; ! import opennlp.maxent.OnePassRealValueDataIndexer; ! import opennlp.maxent.RealValueFileEventStream; public class RealValueFileEventStreamTests extends TestCase { --- 4,9 ---- import junit.framework.TestCase; ! import opennlp.model.OnePassRealValueDataIndexer; ! import opennlp.model.RealValueFileEventStream; public class RealValueFileEventStreamTests extends TestCase { |
From: Thomas M. <tsm...@us...> - 2008-09-28 18:05:12
|
Update of /cvsroot/maxent/maxent In directory sc8-pr-cvs16.sourceforge.net:/tmp/cvs-serv14012 Modified Files: LICENSE CHANGES build.xml Log Message: Changed License to ASL Removed trove dependicies. Re-structured packages. Index: LICENSE =================================================================== RCS file: /cvsroot/maxent/maxent/LICENSE,v retrieving revision 1.1.1.1 retrieving revision 1.2 diff -C2 -d -r1.1.1.1 -r1.2 *** LICENSE 23 Oct 2001 14:06:52 -0000 1.1.1.1 --- LICENSE 28 Sep 2008 18:04:19 -0000 1.2 *************** *** 1,421 **** ! GNU LESSER GENERAL PUBLIC LICENSE ! ! Version 2.1, February 1999 ! ! (The master copy of this license lives on the GNU website.) ! ! Copyright (C) 1991, 1999 Free Software Foundation, Inc. 59 Temple Place, Suite ! 330, Boston, MA 02111-1307 USA Everyone is permitted to copy and distribute ! verbatim copies of this license document, but changing it is not allowed. ! ! [This is the first released version of the Lesser GPL. It also counts as the ! successor of the GNU Library Public License, version 2, hence the version ! number 2.1.] ! ! Preamble ! ! The licenses for most software are designed to take away your freedom to share ! and change it. By contrast, the GNU General Public Licenses are intended to ! guarantee your freedom to share and change free software--to make sure the ! software is free for all its users. ! ! This license, the Lesser General Public License, applies to some specially ! designated software packages--typically libraries--of the Free Software ! Foundation and other authors who decide to use it. You can use it too, but we ! suggest you first think carefully about whether this license or the ordinary ! General Public License is the better strategy to use in any particular case, ! based on the explanations below. ! ! When we speak of free software, we are referring to freedom of use, not ! price. Our General Public Licenses are designed to make sure that you have the ! freedom to distribute copies of free software (and charge for this service if ! you wish); that you receive source code or can get it if you want it; that you ! can change the software and use pieces of it in new free programs; and that you ! are informed that you can do these things. ! ! To protect your rights, we need to make restrictions that forbid distributors to ! deny you these rights or to ask you to surrender these rights. These ! restrictions translate to certain responsibilities for you if you distribute ! copies of the library or if you modify it. ! ! For example, if you distribute copies of the library, whether gratis or for a ! fee, you must give the recipients all the rights that we gave ou. You must make ! sure that they, too, receive or can get the source code. If you link other code ! with the library, you must provide complete object files to the recipients, so ! that they can relink them with the library after making changes to the library ! and recompiling it. And you must show them these terms so they know their ! rights. ! ! We protect your rights with a two-step method: (1) we copyright the library, and ! (2) we offer you this license, which gives you legal permission to copy, ! distribute and/or modify the library. ! ! To protect each distributor, we want to make it very clear that there is no ! warranty for the free library. Also, if the library is modified by someone else ! and passed on, the recipients should know that what they have is not the ! original version, so that the original author's reputation will not be affected ! by problems that might be introduced by others. ! ! Finally, software patents pose a constant threat to the existence of any free ! program. We wish to make sure that a company cannot effectively restrict the ! users of a free program by obtaining a restrictive license from a patent ! holder. Therefore, we insist that any patent license obtained for a version of ! the library must be consistent with the full freedom of use specified in this ! license. ! ! Most GNU software, including some libraries, is covered by the ordinary GNU ! General Public License. This license, the GNU Lesser General Public License, ! applies to certain designated libraries, and is quite different from the ! ordinary General Public License. We use this license for certain libraries in ! order to permit linking those libraries into non-free programs. ! ! When a program is linked with a library, whether statically or using a shared ! library, the combination of the two is legally speaking a combined work, a ! derivative of the original library. The ordinary General Public License ! therefore permits such linking only if the entire combination fits its criteria ! of freedom. The Lesser General Public License permits more lax criteria for ! linking other code with the library. ! ! We call this license the "Lesser" General Public License because it does Less to ! protect the user's freedom than the ordinary General Public License. It also ! provides other free software developers Less of an advantage over competing ! non-free programs. These disadvantages are the reason we use the ordinary ! General Public License for many libraries. However, the Lesser license provides ! advantages in certain special circumstances. ! ! For example, on rare occasions, there may be a special need to encourage the ! widest possible use of a certain library, so that it becomes a de-facto ! standard. To achieve this, non-free programs must be allowed to use the ! library. A more frequent case is that a free library does the same job as widely ! used non-free libraries. In this case, there is little to gain by limiting the ! free library to free software only, so we use the Lesser General Public License. ! ! In other cases, permission to use a particular library in non-free programs ! enables a greater number of people to use a large body of free software. For ! example, permission to use the GNU C Library in non-free programs enables many ! more people to use the whole GNU operating system, as well as its variant, the ! GNU/Linux operating system. ! ! Although the Lesser General Public License is Less protective of the users' ! freedom, it does ensure that the user of a program that is linked with the ! Library has the freedom and the wherewithal to run that program using a modified ! version of the Library. ! ! The precise terms and conditions for copying, distribution and modification ! follow. Pay close attention to the difference between a "work based on the ! library" and a "work that uses the library". The former contains code derived ! from the library, whereas the latter must be combined with the library in order ! to run. ! ! TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION ! ! 0. This License Agreement applies to any software library or other program which ! contains a notice placed by the copyright holder or other authorized party ! saying it may be distributed under the terms of this Lesser General Public ! License (also called "this License"). Each licensee is addressed as "you". ! ! A "library" means a collection of software functions and/or data prepared so as ! to be conveniently linked with application programs (which use some of those ! functions and data) to form executables. ! ! The "Library", below, refers to any such software library or work which has been ! distributed under these terms. A "work based on the Library" means either the ! Library or any derivative work under copyright law: that is to say, a work ! containing the Library or a portion of it, either verbatim or with modifications ! and/or translated straightforwardly into another language. (Hereinafter, ! translation is included without limitation in the term "modification".) ! ! "Source code" for a work means the preferred form of the work for making ! modifications to it. For a library, complete source code means all the source ! code for all modules it contains, plus any associated interface definition ! files, plus the scripts used to control compilation and installation of the ! library. ! ! Activities other than copying, distribution and modification are not covered by ! this License; they are outside its scope. The act of running a program using the ! Library is not restricted, and output from such a program is covered only if its ! contents constitute a work based on the Library (independent of the use of the ! Library in a tool for writing it). Whether that is true depends on what the ! Library does and what the program that uses the Library does. ! ! 1. You may copy and distribute verbatim copies of the Library's complete source ! code as you receive it, in any medium, provided that you conspicuously and ! appropriately publish on each copy an appropriate copyright notice and ! disclaimer of warranty; keep intact all the notices that refer to this License ! and to the absence of any warranty; and distribute a copy of this License along ! with the Library. ! ! You may charge a fee for the physical act of transferring a copy, and you may at ! your option offer warranty protection in exchange for a fee. ! ! 2. You may modify your copy or copies of the Library or any portion of it, thus ! forming a work based on the Library, and copy and distribute such modifications ! or work under the terms of Section 1 above, provided that you also meet all of ! these conditions: ! ! a) The modified work must itself be a software library. ! b) You must cause the files modified to carry prominent notices stating ! that you changed the files and the date of any change. ! c) You must cause the whole of the work to be licensed at no charge to all ! third parties under the terms of this License. ! d) If a facility in the modified Library refers to a function or a table of ! data to be supplied by an application program that uses the facility, other ! than as an argument passed when the facility is invoked, then you must make ! a good faith effort to ensure that, in the event an application does not ! supply such function or table, the facility still operates, and performs ! whatever part of its purpose remains meaningful. ! ! (For example, a function in a library to compute square roots has a purpose ! that is entirely well-defined independent of the application. Therefore, ! Subsection 2d requires that any application-supplied function or table used ! by this function must be optional: if the application does not supply it, ! the square root function must still compute square roots.) ! ! These requirements apply to the modified work as a whole. If identifiable ! sections of that work are not derived from the Library, and can be ! reasonably considered independent and separate works in themselves, then ! this License, and its terms, do not apply to those sections when you ! distribute them as separate works. But when you distribute the same ! sections as part of a whole which is a work based on the Library, the ! distribution of the whole must be on the terms of this License, whose ! permissions for other licensees extend to the entire whole, and thus to ! each and every part regardless of who wrote it. ! ! Thus, it is not the intent of this section to claim rights or contest your ! rights to work written entirely by you; rather, the intent is to exercise ! the right to control the distribution of derivative or collective works ! based on the Library. ! ! In addition, mere aggregation of another work not based on the Library with ! the Library (or with a work based on the Library) on a volume of a storage ! or distribution medium does not bring the other work under the scope of ! this License. ! ! 3. You may opt to apply the terms of the ordinary GNU General Public License ! instead of this License to a given copy of the Library. To do this, you must ! alter all the notices that refer to this License, so that they refer to the ! ordinary GNU General Public License, version 2, instead of to this License. (If ! a newer version than version 2 of the ordinary GNU General Public License has ! appeared, then you can specify that version instead if you wish.) Do not make ! any other change in these notices. ! ! Once this change is made in a given copy, it is irreversible for that copy, so ! the ordinary GNU General Public License applies to all subsequent copies and ! derivative works made from that copy. ! ! This option is useful when you wish to copy part of the code of the Library into ! a program that is not a library. ! ! 4. You may copy and distribute the Library (or a portion or derivative of it, ! under Section 2) in object code or executable form under the terms of Sections 1 ! and 2 above provided that you accompany it with the complete corresponding ! machine-readable source code, which must be distributed under the terms of ! Sections 1 and 2 above on a medium customarily used for software interchange. ! ! If distribution of object code is made by offering access to copy from a ! designated place, then offering equivalent access to copy the source code from ! the same place satisfies the requirement to distribute the source code, even ! though third parties are not compelled to copy the source along with the object ! code. ! 5. A program that contains no derivative of any portion of the Library, but is ! designed to work with the Library by being compiled or linked with it, is called ! a "work that uses the Library". Such a work, in isolation, is not a derivative ! work of the Library, and therefore falls outside the scope of this License. ! However, linking a "work that uses the Library" with the Library creates an ! executable that is a derivative of the Library (because it contains portions of ! the Library), rather than a "work that uses the library". The executable is ! therefore covered by this License. Section 6 states terms for distribution of ! such executables. ! When a "work that uses the Library" uses material from a header file that is ! part of the Library, the object code for the work may be a derivative work of ! the Library even though the source code is not. Whether this is true is ! especially significant if the work can be linked without the Library, or if the ! work is itself a library. The threshold for this to be true is not precisely ! defined by law. ! If such an object file uses only numerical parameters, data structure layouts ! and accessors, and small macros and small inline functions (ten lines or less in ! length), then the use of the object file is unrestricted, regardless of whether ! it is legally a derivative work. (Executables containing this object code plus ! portions of the Library will still fall under Section 6.) ! Otherwise, if the work is a derivative of the Library, you may distribute the ! object code for the work under the terms of Section 6. Any executables ! containing that work also fall under Section 6, whether or not they are linked ! directly with the Library itself. ! 6. As an exception to the Sections above, you may also combine or link a "work ! that uses the Library" with the Library to produce a work containing portions of ! the Library, and distribute that work under terms of your choice, provided that ! the terms permit modification of the work for the customer's own use and reverse ! engineering for debugging such modifications. ! You must give prominent notice with each copy of the work that the Library is ! used in it and that the Library and its use are covered by this License. You ! must supply a copy of this License. If the work during execution displays ! copyright notices, you must include the copyright notice for the Library among ! them, as well as a reference directing the user to the copy of this ! License. Also, you must do one of these things: ! a) Accompany the work with the complete corresponding machine-readable ! source code for the Library including whatever changes were used in the ! work (which must be distributed under Sections 1 and 2 above); and, if the ! work is an executable linked with the Library, with the complete ! machine-readable "work that uses the Library", as object code and/or source ! code, so that the user can modify the Library and then relink to produce a ! modified executable containing the modified Library. (It is understood that ! the user who changes the contents of definitions files in the Library will ! not necessarily be able to recompile the application to use the modified ! definitions.) ! b) Use a suitable shared library mechanism for linking with the Library. A ! suitable mechanism is one that (1) uses at run time a copy of the library ! already present on the user's computer system, rather than copying library ! functions into the executable, and (2) will operate properly with a ! modified version of the library, if the user installs one, as long as the ! modified version is interface-compatible with the version that the work was ! made with. ! c) Accompany the work with a written offer, valid for at least three years, ! to give the same user the materials specified in Subsection 6a, above, for ! a charge no more than the cost of performing this distribution. ! d) If distribution of the work is made by offering access to copy from a ! designated place, offer equivalent access to copy the above specified ! materials from the same place. ! e) Verify that the user has already received a copy of these materials or ! that you have already sent this user a copy. ! For an executable, the required form of the "work that uses the Library" must ! include any data and utility programs needed for reproducing the executable from ! it. However, as a special exception, the materials to be distributed need not ! include anything that is normally distributed (in either source or binary form) ! with the major components (compiler, kernel, and so on) of the operating system ! on which the executable runs, unless that component itself accompanies the ! executable. ! It may happen that this requirement contradicts the license restrictions of ! other proprietary libraries that do not normally accompany the operating ! system. Such a contradiction means you cannot use both them and the Library ! together in an executable that you distribute. ! 7. You may place library facilities that are a work based on the Library ! side-by-side in a single library together with other library facilities not ! covered by this License, and distribute such a combined library, provided that ! the separate distribution of the work based on the Library and of the other ! library facilities is otherwise permitted, and provided that you do these two ! things: ! a) Accompany the combined library with a copy of the same work based on the ! Library, uncombined with any other library facilities. This must be ! distributed under the terms of the Sections above. ! b) Give prominent notice with the combined library of the fact that part of ! it is a work based on the Library, and explaining where to find the ! accompanying uncombined form of the same work. ! 8. You may not copy, modify, sublicense, link with, or distribute the Library ! except as expressly provided under this License. Any attempt otherwise to copy, ! modify, sublicense, link with, or distribute the Library is void, and will ! automatically terminate your rights under this License. However, parties who ! have received copies, or rights, from you under this License will not have their ! licenses terminated so long as such parties remain in full compliance. ! 9. You are not required to accept this License, since you have not signed ! it. However, nothing else grants you permission to modify or distribute the ! Library or its derivative works. These actions are prohibited by law if you do ! not accept this License. Therefore, by modifying or distributing the Library (or ! any work based on the Library), you indicate your acceptance of this License to ! do so, and all its terms and conditions for copying, distributing or modifying ! the Library or works based on it. ! 10. Each time you redistribute the Library (or any work based on the Library), ! the recipient automatically receives a license from the original licensor to ! copy, distribute, link with or modify the Library subject to these terms and ! conditions. You may not impose any further restrictions on the recipients' ! exercise of the rights granted herein. You are not responsible for enforcing ! compliance by third parties with this License. ! 11. If, as a consequence of a court judgment or allegation of patent ! infringement or for any other reason (not limited to patent issues), conditions ! are imposed on you (whether by court order, agreement or otherwise) that ! contradict the conditions of this License, they do not excuse you from the ! conditions of this License. If you cannot distribute so as to satisfy ! simultaneously your obligations under this License and any other pertinent ! obligations, then as a consequence you may not distribute the Library at ! all. For example, if a patent license would not permit royalty-free ! redistribution of the Library by all those who receive copies directly or ! indirectly through you, then the only way you could satisfy both it and this ! License would be to refrain entirely from distribution of the Library. ! If any portion of this section is held invalid or unenforceable under any ! particular circumstance, the balance of the section is intended to apply, and ! the section as a whole is intended to apply in other circumstances. ! It is not the purpose of this section to induce you to infringe any patents or ! other property right claims or to contest validity of any such claims; this ! section has the sole purpose of protecting the integrity of the free software ! distribution system which is implemented by public license practices. Many ! people have made generous contributions to the wide range of software ! distributed through that system in reliance on consistent application of that ! system; it is up to the author/donor to decide if he or she is willing to ! distribute software through any other system and a licensee cannot impose that ! choice. ! This section is intended to make thoroughly clear what is believed to be a ! consequence of the rest of this License. ! 12. If the distribution and/or use of the Library is restricted in certain ! countries either by patents or by copyrighted interfaces, the original copyright ! holder who places the Library under this License may add an explicit ! geographical distribution limitation excluding those countries, so that ! distribution is permitted only in or among countries not thus excluded. In such ! case, this License incorporates the limitation as if written in the body of this ! License. ! 13. The Free Software Foundation may publish revised and/or new versions of the ! Lesser General Public License from time to time. Such new versions will be ! similar in spirit to the present version, but may differ in detail to address ! new problems or concerns. ! Each version is given a distinguishing version number. If the Library specifies ! a version number of this License which applies to it and "any later version", ! you have the option of following the terms and conditions either of that version ! or of any later version published by the Free Software Foundation. If the ! Library does not specify a license version number, you may choose any version ! ever published by the Free Software Foundation. ! 14. If you wish to incorporate parts of the Library into other free programs ! whose distribution conditions are incompatible with these, write to the author ! to ask for permission. For software which is copyrighted by the Free Software ! Foundation, write to the Free Software Foundation; we sometimes make exceptions ! for this. Our decision will be guided by the two goals of preserving the free ! status of all derivatives of our free software and of promoting the sharing and ! reuse of software generally. ! NO WARRANTY ! 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE ! LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED ! IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE LIBRARY "AS ! IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT ! NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A ! PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE ! LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME THE COST OF ! ALL NECESSARY SERVICING, REPAIR OR CORRECTION. ! 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ! ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE ! LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, ! SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY ! TO USE THE LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING ! RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF ! THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF SUCH HOLDER OR OTHER ! PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. ! END OF TERMS AND CONDITIONS \ No newline at end of file --- 1,202 ---- ! Apache License ! Version 2.0, January 2004 ! http://www.apache.org/licenses/ ! TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION ! 1. Definitions. ! "License" shall mean the terms and conditions for use, reproduction, ! and distribution as defined by Sections 1 through 9 of this document. ! "Licensor" shall mean the copyright owner or entity authorized by ! the copyright owner that is granting the License. ! "Legal Entity" shall mean the union of the acting entity and all ! other entities that control, are controlled by, or are under common ! control with that entity. For the purposes of this definition, ! "control" means (i) the power, direct or indirect, to cause the ! direction or management of such entity, whether by contract or ! otherwise, or (ii) ownership of fifty percent (50%) or more of the ! outstanding shares, or (iii) beneficial ownership of such entity. ! "You" (or "Your") shall mean an individual or Legal Entity ! exercising permissions granted by this License. ! "Source" form shall mean the preferred form for making modifications, ! including but not limited to software source code, documentation ! source, and configuration files. ! "Object" form shall mean any form resulting from mechanical ! transformation or translation of a Source form, including but ! not limited to compiled object code, generated documentation, ! and conversions to other media types. ! "Work" shall mean the work of authorship, whether in Source or ! Object form, made available under the License, as indicated by a ! copyright notice that is included in or attached to the work ! (an example is provided in the Appendix below). ! "Derivative Works" shall mean any work, whether in Source or Object ! form, that is based on (or derived from) the Work and for which the ! editorial revisions, annotations, elaborations, or other modifications ! represent, as a whole, an original work of authorship. For the purposes ! of this License, Derivative Works shall not include works that remain ! separable from, or merely link (or bind by name) to the interfaces of, ! the Work and Derivative Works thereof. ! "Contribution" shall mean any work of authorship, including ! the original version of the Work and any modifications or additions ! to that Work or Derivative Works thereof, that is intentionally ! submitted to Licensor for inclusion in the Work by the copyright owner ! or by an individual or Legal Entity authorized to submit on behalf of ! the copyright owner. For the purposes of this definition, "submitted" ! means any form of electronic, verbal, or written communication sent ! to the Licensor or its representatives, including but not limited to ! communication on electronic mailing lists, source code control systems, ! and issue tracking systems that are managed by, or on behalf of, the ! Licensor for the purpose of discussing and improving the Work, but ! excluding communication that is conspicuously marked or otherwise ! designated in writing by the copyright owner as "Not a Contribution." ! "Contributor" shall mean Licensor and any individual or Legal Entity ! on behalf of whom a Contribution has been received by Licensor and ! subsequently incorporated within the Work. ! 2. Grant of Copyright License. Subject to the terms and conditions of ! this License, each Contributor hereby grants to You a perpetual, ! worldwide, non-exclusive, no-charge, royalty-free, irrevocable ! copyright license to reproduce, prepare Derivative Works of, ! publicly display, publicly perform, sublicense, and distribute the ! Work and such Derivative Works in Source or Object form. ! 3. Grant of Patent License. Subject to the terms and conditions of ! this License, each Contributor hereby grants to You a perpetual, ! worldwide, non-exclusive, no-charge, royalty-free, irrevocable ! (except as stated in this section) patent license to make, have made, ! use, offer to sell, sell, import, and otherwise transfer the Work, ! where such license applies only to those patent claims licensable ! by such Contributor that are necessarily infringed by their ! Contribution(s) alone or by combination of their Contribution(s) ! with the Work to which such Contribution(s) was submitted. If You ! institute patent litigation against any entity (including a ! cross-claim or counterclaim in a lawsuit) alleging that the Work ! or a Contribution incorporated within the Work constitutes direct ! or contributory patent infringement, then any patent licenses ! granted to You under this License for that Work shall terminate ! as of the date such litigation is filed. ! 4. Redistribution. You may reproduce and distribute copies of the ! Work or Derivative Works thereof in any medium, with or without ! modifications, and in Source or Object form, provided that You ! meet the following conditions: ! (a) You must give any other recipients of the Work or ! Derivative Works a copy of this License; and ! (b) You must cause any modified files to carry prominent notices ! stating that You changed the files; and ! (c) You must retain, in the Source form of any Derivative Works ! that You distribute, all copyright, patent, trademark, and ! attribution notices from the Source form of the Work, ! excluding those notices that do not pertain to any part of ! the Derivative Works; and ! (d) If the Work includes a "NOTICE" text file as part of its ! distribution, then any Derivative Works that You distribute must ! include a readable copy of the attribution notices contained ! within such NOTICE file, excluding those notices that do not ! pertain to any part of the Derivative Works, in at least one ! of the following places: within a NOTICE text file distributed ! as part of the Derivative Works; within the Source form or ! documentation, if provided along with the Derivative Works; or, ! within a display generated by the Derivative Works, if and ! wherever such third-party notices normally appear. The contents ! of the NOTICE file are for informational purposes only and ! do not modify the License. You may add Your own attribution ! notices within Derivative Works that You distribute, alongside ! or as an addendum to the NOTICE text from the Work, provided ! that such additional attribution notices cannot be construed ! as modifying the License. ! You may add Your own copyright statement to Your modifications and ! may provide additional or different license terms and conditions ! for use, reproduction, or distribution of Your modifications, or ! for any such Derivative Works as a whole, provided Your use, ! reproduction, and distribution of the Work otherwise complies with ! the conditions stated in this License. ! 5. Submission of Contributions. Unless You explicitly state otherwise, ! any Contribution intentionally submitted for inclusion in the Work ! by You to the Licensor shall be under the terms and conditions of ! this License, without any additional terms or conditions. ! Notwithstanding the above, nothing herein shall supersede or modify ! the terms of any separate license agreement you may have executed ! with Licensor regarding such Contributions. ! 6. Trademarks. This License does not grant permission to use the trade ! names, trademarks, service marks, or product names of the Licensor, ! except as required for reasonable and customary use in describing the ! origin of the Work and reproducing the content of the NOTICE file. ! 7. Disclaimer of Warranty. Unless required by applicable law or ! agreed to in writing, Licensor provides the Work (and each ! Contributor provides its Contributions) on an "AS IS" BASIS, ! WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or ! implied, including, without limitation, any warranties or conditions ! of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A ! PARTICULAR PURPOSE. You are solely responsible for determining the ! appropriateness of using or redistributing the Work and assume any ! risks associated with Your exercise of permissions under this License. ! 8. Limitation of Liability. In no event and under no legal theory, ! whether in tort (including negligence), contract, or otherwise, ! unless required by applicable law (such as deliberate and grossly ! negligent acts) or agreed to in writing, shall any Contributor be ! liable to You for damages, including any direct, indirect, special, ! incidental, or consequential damages of any character arising as a ! result of this License or out of the use or inability to use the ! Work (including but not limited to damages for loss of goodwill, ! work stoppage, computer failure or malfunction, or any and all ! other commercial damages or losses), even if such Contributor ! has been advised of the possibility of such damages. ! 9. Accepting Warranty or Additional Liability. While redistributing ! the Work or Derivative Works thereof, You may choose to offer, ! and charge a fee for, acceptance of support, warranty, indemnity, ! or other liability obligations and/or rights consistent with this ! License. However, in accepting such obligations, You may act only ! on Your own behalf and on Your sole responsibility, not on behalf ! of any other Contributor, and only if You agree to indemnify, ! defend, and hold each Contributor harmless for any liability ! incurred by, or claims asserted against, such Contributor by reason ! of your accepting any such warranty or additional liability. ! END OF TERMS AND CONDITIONS ! APPENDIX: How to apply the Apache License to your work. ! To apply the Apache License to your work, attach the following ! boilerplate notice, with the fields enclosed by brackets "[]" ! replaced with your own identifying information. (Don't include ! the brackets!) The text should be enclosed in the appropriate ! comment syntax for the file format. We also recommend that a ! file or class name and description of purpose be included on the ! same "printed page" as the copyright notice for easier ! identification within third-party archives. ! Copyright [yyyy] [name of copyright owner] ! Licensed under the Apache License, Version 2.0 (the "License"); ! you may not use this file except in compliance with the License. ! You may obtain a copy of the License at ! http://www.apache.org/licenses/LICENSE-2.0 ! Unless required by applicable law or agreed to in writing, software ! distributed under the License is distributed on an "AS IS" BASIS, ! WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. ! See the License for the specific language governing permissions and ! limitations under the License. Index: CHANGES =================================================================== RCS file: /cvsroot/maxent/maxent/CHANGES,v retrieving revision 1.23 retrieving revision 1.24 diff -C2 -d -r1.23 -r1.24 *** CHANGES 26 Sep 2008 03:54:39 -0000 1.23 --- CHANGES 28 Sep 2008 18:04:20 -0000 1.24 *************** *** 1,2 **** --- 1,8 ---- + 3.0.0 + ----- + Removed trove dependency. + Changed license to ASL. + Re-organized package structure to support upcomming work. + 2.5.1 ----- Index: build.xml =================================================================== RCS file: /cvsroot/maxent/maxent/build.xml,v retrieving revision 1.26 retrieving revision 1.27 diff -C2 -d -r1.26 -r1.27 *** build.xml 28 Sep 2008 16:57:01 -0000 1.26 --- build.xml 28 Sep 2008 18:04:21 -0000 1.27 *************** *** 10,14 **** <property name="Name" value="Maxent" /> <property name="name" value="maxent" /> ! <property name="version" value="2.5.1" /> <property name="year" value="2008"/> --- 10,14 ---- <property name="Name" value="Maxent" /> <property name="name" value="maxent" /> ! <property name="version" value="3.0.0" /> <property name="year" value="2008"/> |
From: Thomas M. <tsm...@us...> - 2008-09-28 18:01:57
|
Update of /cvsroot/maxent/maxent/.settings In directory sc8-pr-cvs16.sourceforge.net:/tmp/cvs-serv12702/.settings Log Message: Directory /cvsroot/maxent/maxent/.settings added to the repository |
From: Thomas M. <tsm...@us...> - 2008-09-28 18:01:56
|
Update of /cvsroot/maxent/maxent/src/java/opennlp/model In directory sc8-pr-cvs16.sourceforge.net:/tmp/cvs-serv12702/src/java/opennlp/model Log Message: Directory /cvsroot/maxent/maxent/src/java/opennlp/model added to the repository |
From: Thomas M. <tsm...@us...> - 2008-09-28 16:57:09
|
Update of /cvsroot/maxent/maxent In directory sc8-pr-cvs16.sourceforge.net:/tmp/cvs-serv27679 Modified Files: build.xml Log Message: update build file. Index: build.xml =================================================================== RCS file: /cvsroot/maxent/maxent/build.xml,v retrieving revision 1.25 retrieving revision 1.26 diff -C2 -d -r1.25 -r1.26 *** build.xml 15 Nov 2006 21:42:44 -0000 1.25 --- build.xml 28 Sep 2008 16:57:01 -0000 1.26 *************** *** 10,15 **** <property name="Name" value="Maxent" /> <property name="name" value="maxent" /> ! <property name="version" value="2.5.0" /> ! <property name="year" value="2005"/> <echo message="----------- ${Name} ${version} [${year}] ------------"/> --- 10,15 ---- <property name="Name" value="Maxent" /> <property name="name" value="maxent" /> ! <property name="version" value="2.5.1" /> ! <property name="year" value="2008"/> <echo message="----------- ${Name} ${version} [${year}] ------------"/> |
From: Thomas M. <tsm...@us...> - 2008-09-01 18:04:46
|
Update of /cvsroot/maxent/maxent/test/data/opennlp/maxent/io In directory sc8-pr-cvs16.sourceforge.net:/tmp/cvs-serv6659/test/data/opennlp/maxent/io Added Files: rvfes-bug-data-broken.txt rvfes-bug-data-ok.txt Log Message: data for real valued features test case. --- NEW FILE: rvfes-bug-data-broken.txt --- C goodbye=1.0 C goodbye --- NEW FILE: rvfes-bug-data-ok.txt --- C goodbye C goodbye=1.0 |
From: Thomas M. <tsm...@us...> - 2008-09-01 18:04:41
|
Update of /cvsroot/maxent/maxent/test/data/opennlp/maxent In directory sc8-pr-cvs16.sourceforge.net:/tmp/cvs-serv6577/test/data/opennlp/maxent Log Message: Directory /cvsroot/maxent/maxent/test/data/opennlp/maxent added to the repository |
From: Thomas M. <tsm...@us...> - 2008-09-01 18:04:41
|
Update of /cvsroot/maxent/maxent/test/data/opennlp/maxent/io In directory sc8-pr-cvs16.sourceforge.net:/tmp/cvs-serv6577/test/data/opennlp/maxent/io Log Message: Directory /cvsroot/maxent/maxent/test/data/opennlp/maxent/io added to the repository |
From: Thomas M. <tsm...@us...> - 2008-09-01 18:04:41
|
Update of /cvsroot/maxent/maxent/test/data/opennlp In directory sc8-pr-cvs16.sourceforge.net:/tmp/cvs-serv6577/test/data/opennlp Log Message: Directory /cvsroot/maxent/maxent/test/data/opennlp added to the repository |
From: Thomas M. <tsm...@us...> - 2008-09-01 18:04:40
|
Update of /cvsroot/maxent/maxent/test/data In directory sc8-pr-cvs16.sourceforge.net:/tmp/cvs-serv6577/test/data Log Message: Directory /cvsroot/maxent/maxent/test/data added to the repository |
From: Thomas M. <tsm...@us...> - 2008-09-01 18:04:17
|
Update of /cvsroot/maxent/maxent/test/src/opennlp/maxent/io In directory sc8-pr-cvs16.sourceforge.net:/tmp/cvs-serv6168/test/src/opennlp/maxent/io Added Files: RealValueFileEventStreamTests.java Log Message: Test case for mixed real-valued features. --- NEW FILE: RealValueFileEventStreamTests.java --- package opennlp.maxent.io; import java.io.IOException; import junit.framework.TestCase; import opennlp.maxent.OnePassRealValueDataIndexer; import opennlp.maxent.RealValueFileEventStream; public class RealValueFileEventStreamTests extends TestCase { public void testLastLineBug() throws IOException { RealValueFileEventStream rvfes = new RealValueFileEventStream("test/data/opennlp/maxent/io/rvfes-bug-data-ok.txt"); OnePassRealValueDataIndexer indexer = new OnePassRealValueDataIndexer(rvfes, 1); assertEquals(1, indexer.getOutcomeLabels().length); rvfes = new RealValueFileEventStream("test/data/opennlp/maxent/io/rvfes-bug-data-broken.txt"); indexer = new OnePassRealValueDataIndexer(rvfes, 1); assertEquals(1, indexer.getOutcomeLabels().length); } } |
From: Thomas M. <tsm...@us...> - 2008-09-01 18:04:13
|
Update of /cvsroot/maxent/maxent/test/src/opennlp/maxent/io In directory sc8-pr-cvs16.sourceforge.net:/tmp/cvs-serv6073/test/src/opennlp/maxent/io Log Message: Directory /cvsroot/maxent/maxent/test/src/opennlp/maxent/io added to the repository |
From: Thomas M. <tsm...@us...> - 2008-09-01 18:04:13
|
Update of /cvsroot/maxent/maxent/test/src/opennlp In directory sc8-pr-cvs16.sourceforge.net:/tmp/cvs-serv6073/test/src/opennlp Log Message: Directory /cvsroot/maxent/maxent/test/src/opennlp added to the repository |
From: Thomas M. <tsm...@us...> - 2008-09-01 18:04:12
|
Update of /cvsroot/maxent/maxent/test In directory sc8-pr-cvs16.sourceforge.net:/tmp/cvs-serv6073/test Log Message: Directory /cvsroot/maxent/maxent/test added to the repository |
From: Thomas M. <tsm...@us...> - 2008-09-01 18:04:12
|
Update of /cvsroot/maxent/maxent/test/src In directory sc8-pr-cvs16.sourceforge.net:/tmp/cvs-serv6073/test/src Log Message: Directory /cvsroot/maxent/maxent/test/src added to the repository |
From: Thomas M. <tsm...@us...> - 2008-09-01 18:04:12
|
Update of /cvsroot/maxent/maxent/test/src/opennlp/maxent In directory sc8-pr-cvs16.sourceforge.net:/tmp/cvs-serv6073/test/src/opennlp/maxent Log Message: Directory /cvsroot/maxent/maxent/test/src/opennlp/maxent added to the repository |
From: Thomas M. <tsm...@us...> - 2008-09-01 18:03:26
|
Update of /cvsroot/maxent/maxent/src/java/opennlp/maxent In directory sc8-pr-cvs16.sourceforge.net:/tmp/cvs-serv5450/src/java/opennlp/maxent Modified Files: ComparableEvent.java Log Message: Fix to comparison of mixed features (some with value, some without) Index: ComparableEvent.java =================================================================== RCS file: /cvsroot/maxent/maxent/src/java/opennlp/maxent/ComparableEvent.java,v retrieving revision 1.5 retrieving revision 1.6 diff -C2 -d -r1.5 -r1.6 *** ComparableEvent.java 13 Apr 2007 16:13:00 -0000 1.5 --- ComparableEvent.java 1 Sep 2008 18:03:21 -0000 1.6 *************** *** 62,69 **** if (predIndexes[i] < ce.predIndexes[i]) return -1; else if (predIndexes[i] > ce.predIndexes[i]) return 1; ! if (values != null) { if (values[i] < ce.values[i]) return -1; else if (values[i] > ce.values[i]) return 1; } } --- 62,77 ---- if (predIndexes[i] < ce.predIndexes[i]) return -1; else if (predIndexes[i] > ce.predIndexes[i]) return 1; ! if (values != null && ce.values != null) { if (values[i] < ce.values[i]) return -1; else if (values[i] > ce.values[i]) return 1; } + else if (values != null) { + if (values[i] < 1) return -1; + else if (values[i] > 1) return 1; + } + else if (ce.values != null) { + if (1 < ce.values[i]) return -1; + else if (1 > ce.values[i]) return 1; + } } |
From: Thomas M. <tsm...@us...> - 2008-08-30 17:47:10
|
Update of /cvsroot/maxent/maxent/docs In directory sc8-pr-cvs16.sourceforge.net:/tmp/cvs-serv6277/docs Modified Files: about.html howto.html Log Message: updated howto to be current and changed email in about. Index: about.html =================================================================== RCS file: /cvsroot/maxent/maxent/docs/about.html,v retrieving revision 1.2 retrieving revision 1.3 diff -C2 -d -r1.2 -r1.3 *** about.html 3 Jan 2002 16:14:41 -0000 1.2 --- about.html 30 Aug 2008 17:46:59 -0000 1.3 *************** *** 189,194 **** <h3> ! Email: <a href="mailto:jm...@co...">jm...@co...</a><br> ! 2001 October 29 <br> <br> <A href="http://sourceforge.net"> <IMG src="http://sourceforge.net/sflogo.php?group_id=5961&type=1" width="88" height="31" border="0"></A> <br> --- 189,201 ---- <h3> ! Email: <a href="mailto:tsm...@us...">tsm...@us...</a> ! <br> ! <script language="JavaScript"> ! <!---// ! var Months = new Array('January','February','March','April','May','June','July','August','September','October','November','December'); ! var lm = new Date (document.lastModified); ! document.write(Months[lm.getMonth()]+" "+lm.getDate()+" "+lm.getFullYear()); ! //---> ! </script> <br> <A href="http://sourceforge.net"> <IMG src="http://sourceforge.net/sflogo.php?group_id=5961&type=1" width="88" height="31" border="0"></A> <br> Index: howto.html =================================================================== RCS file: /cvsroot/maxent/maxent/docs/howto.html,v retrieving revision 1.2 retrieving revision 1.3 diff -C2 -d -r1.2 -r1.3 *** howto.html 30 Oct 2001 09:52:44 -0000 1.2 --- howto.html 30 Aug 2008 17:47:02 -0000 1.3 *************** *** 44,76 **** </center> ! ! ! <blockquote> ! <b>Warning!</b> This HOWTO is now out of date with respect to the maxent ! implementation, though it still should be helpful for newcomers ! because it explains a bit how to use the maxent framework as well as ! the OpenNLP Maxent implementation. To mention some of the ! implementation differences just briefly, you should have a look at the ! EventStream interface and consider using that instead of the ! EventCollector class. Actually, the ! opennlp.grok.preprocess.sentdetect package discussed in this HOWTO has ! been updated to work with the maxent 1.2.0 as of Grok version 0.5.2, ! so you can download <a href="http://grok.sf.net">Grok</a> and have a ! look at that to see what is different. I'll see if I can update this ! document sometime in the near future, but it isn't a high priority ! just now. If you have any questions, do not hesitate to post them on ! the ! <a href="https://sourceforge.net/forum/forum.php?forum_id=18385">help ! forum</a>. <br> ! <center> Jason, ! 2001 October 29 ! </center> ! </blockquote> ! <p> We've tried to make it fairly easy to build and use maxent models, but ! you need two things to start with: 1) an understanding of feature ! selection for maxent modeling, and 2) Java skills or the ability ! to read some example Java code and turn it into what you need. I'll write a very basic summary of what goes on with feature selection. For more details refer to some of the papers --- 44,58 ---- </center> ! <h2>Introduction</h2> <p> We've tried to make it fairly easy to build and use maxent models, but ! you need two things to start with: ! <ol> ! <li>An understanding of feature selection for maxent modeling. ! </li> ! <li> Java skills or the ability to read some example Java code and turn it into what you need. ! </li> ! </ol> ! <p> I'll write a very basic summary of what goes on with feature selection. For more details refer to some of the papers *************** *** 114,118 **** understand). </p> ! <p> So, say you want to implement a program which uses maxent to find --- 96,100 ---- understand). </p> ! <h2>Using a Model</h2> <p> So, say you want to implement a program which uses maxent to find *************** *** 171,415 **** <b>public String getBestOutcome(double[] outcomes);</b> </blockquote> - - <p> And this will return the String name of that most likely outcome. - <br> <p>In order to make context collection process nicely - modularized, you need to implement the ContextGenerator interface: - </p> - - <blockquote> - <b>public interface - ContextGenerator {</b> <p><b> /**</b> - <br><b> * Builds up the list of contextual - predicates given an Object.</b> <br><b> */</b> - <br><b> public String[] getContext(Object o);</b> - <p><b>}</b> - </blockquote> - <p> ! In Grok, the Object that we usually pass is a opennlp.common.util.Pair ! which contains a StringBuffer and the Integer index of the position we ! are currently at in the StringBuffer. However, you can pass ! whatever Object you like as long as your implementation of ! ContextGenerator can deal with it. and produce a String[] with all of ! the relevant features (contextual predicates) in it. An example ! is given from the ! opennlp.grok.preprocess.sentdetect.SDContextGenerator implementation ! of the opennlp.maxent.ContextGenerator interface. </p> ! ! <blockquote> ! <b> /**</b> <br><b> * </b>Builds up the list of ! features, anchored around a position within the <br> * ! StringBuffer. <br><b> */</b> <br><b> public String[] ! getContext(Object o) {</b> <br><b> ! StringBuffer sb = (StringBuffer)((Pair)o).a;</b> ! <br><b> int position = ! ((Integer)((Pair)o).b).intValue();</b> <p><b> ! int lastIndex = sb.length()-1;</b> <p><b> int ! prefixStart = PerlHelp.previousSpaceIndex(sb, position);</b> ! <br><b> int prevStart = ! PerlHelp.previousSpaceIndex(sb, prefixStart);</b> ! <p><b> int suffixEnd = ! PerlHelp.nextSpaceIndex(sb, position, lastIndex);</b> ! <br><b> int nextEnd = ! PerlHelp.nextSpaceIndex(sb, suffixEnd, lastIndex);</b> ! <p><b> String prefix, previous, suffix, ! next;</b> <p><b> prefix = ! sb.substring(prefixStart, position).trim();</b> ! <p><b> previous = sb.substring(prevStart, ! prefixStart).trim();</b> <p><b> if (position ! == lastIndex) {</b> ! <br><b> suffix = ! "";</b> <br><b> next = ! "";</b> <br><b> } else {</b> ! <br><b> suffix = ! sb.substring(position+1,suffixEnd).trim();</b> ! <br><b> next = ! sb.substring(suffixEnd, nextEnd).trim();</b> ! <br><b> }</b> <p><b> ! ArrayList collectFeats = new ArrayList();</b> ! <br><b> if (!prefix.equals("")) ! collectFeats.add("x="+prefix);</b> <br><b> if ! (PerlHelp.capRE.isMatch(prefix)) collectFeats.add("xcap");</b> ! <br><b> if (!previous.equals("")) ! collectFeats.add("v="+previous);</b> <br><b> ! if (!suffix.equals("")) collectFeats.add("s="+suffix);</b> ! <br><b> if ! (!next.equals("")) ! collectFeats.add("n="+next);</b> <p><b> ! String[] context = new String[collectFeats.size()];</b> ! <br><b> for (int i=0; ! i<collectFeats.size(); i++)</b> ! <br><b> context[i] = ! (String)collectFeats.get(i);</b> <p><b> return ! context;</b> <br><b>}</b> ! </blockquote> ! ! <p> ! Basically, it just runs around the StringBuffer collecting features ! that we thought would be useful for the end of sentence detection ! task. <br>You might notice some odd things such as "v=" and "n=" --- ! these are just abbreviations for "previous" and "next". It is a good ! idea to use abbreviations for such features since they are generated ! from the data, and when you train your model, there may be several ! thousand of features with the form "previous=X" where X is the word ! preceding a possible sentence ending punctuation mark in the training ! data. All of these feature names must then be saved to disk ! eventually, and if you use, for example, "v" instead of "previous", ! you'll save a significant amount of disk space. <p>The ! SDContextGenerator and the sentence detection model are then used by ! the method <b>sentDetect </b>in ! opennlp.grok.preprocess.SentenceDetectorME method as follows ! (the ContextGenerator has the name "cgen"): ! </p> ! <blockquote> ! <b> public String[] sentDetect(String s) {</b> ! <br><b> StringBuffer sb = new ! StringBuffer(s);</b> <br><b> REMatch[] enders ! = PerlHelp.peqRE.getAllMatches(sb);</b> <p><b> ! int index = 0;</b> <br><b> String sent;</b> ! <br><b> for (int i=0; i<enders.length; i++) ! {</b> <br><b> int j = ! enders[i].getStartIndex();</b> ! <br><b> probs = ! <u>model.eval(cgen.getContext(new Pair(sb,new Integer(j))));</u></b> ! <br><b> if ! (model.getBestOutcome(probs).equals("T")) {</b> ! <br><b> ! sent = sb.substring(index, j+1).trim();</b> ! <br><b> ! if (sent.length() > 0) sents.add(sent);</b> ! <br><b> ! index=j+1;</b> <br><b> ! }</b> <br><b> }</b> ! <p><b> if (index < sb.length()) {</b> ! <br><b> sent = ! sb.substring(index).trim();</b> ! <br><b> if ! (sent.length() > 0) sents.add(sent);</b> ! <br><b> }</b> <p><b> ! String[] sentSA = new String[sents.size()];</b> ! <br><b> for (int i=0; i<sents.size(); ! i++)</b> <br><b> ! sentSA[i] = ((String)sents.get(i)).trim();</b> ! <br><b> sents.clear();</b> ! <br><b> return sentSA;</b> ! <br><b>}</b></blockquote> So that is basically what you need to know ! to use models! Now, how do you train a new model? For this, ! you'll want to implement the EventCollector interface: ! <blockquote>p<b>ublic interface EventCollector {</b> ! <br><b> public Event[] getEvents();</b> ! <br><b> public Event[] getEvents(boolean ! evalMode);</b> <br><b>}</b></blockquote> A class which implements ! EventCollector should take the data (which it is organizing into ! events) as an argument to a constructor. For most packages in ! opennlp.grok.preprocess, we use java.io.Reader objects, as the ! following segment of the opennlp.grok.preprocess.SDEventCollector ! shows: <br><b></b> <blockquote><b>public class SDEventCollector ! implements EventCollector {</b> <br><b> private ! ContextGenerator cg = new SDContextGenerator();</b> ! <br><b> private BufferedReader br;</b> ! <br><b> </b> <br><b> public ! SDEventCollector(Reader data) {</b> ! <br><b> br = new ! BufferedReader(data);</b> <br><b> }</b></blockquote> ! <b> ! ...</b><b></b> <p>The <b>getEvents</b> methods required by the ! interface are then implemented as follows: <blockquote><b>public ! Event[] getEvents() {</b> <br><b> return ! getEvents(false);</b> <br><b> }</b><b></b> <p><b>public Event[] ! getEvents(boolean evalMode) {</b> <br><b> ! ArrayList elist = new ArrayList();</b> <br><b> ! int numMatches;</b> <br><b> </b> <br><b> ! try {</b> <br><b> ! String s = br.readLine();</b> ! <br><b> while (s != ! null) {</b> ! <br><b> ! StringBuffer sb = new StringBuffer(s);</b> ! <br><b> ! REMatch[] enders = PerlHelp.peqRE.getAllMatches(sb);</b> ! <br><b> ! numMatches = enders.length;</b> ! <br><b> ! for (int i=0; i<numMatches; i++) {</b> ! <br><b> ! int j = enders[i].getStartIndex();</b><b></b> ! <p><b> ! Event e;</b> ! <br><b> ! String[] context =</b> ! <br><b> ! cg.getContext(new Pair(sb, new Integer(j)));</b> <br><b> </b> ! <br><b> ! if (i == numMatches-1) {</b> ! <br><b> ! e = new Event("T", context);</b> ! <br><b> ! } else {</b> ! <br><b> ! e = new Event("F", context);</b> ! <br><b> ! }</b> <br><b> </b> ! <br><b> ! elist.add(e);</b> ! <br><b> ! }</b> ! <br><b> ! s = br.readLine();</b> ! <br><b> }</b> ! <br><b> } catch (Exception e) { e.printStackTrace(); ! }</b><b></b> <p><b> Event[] events = new ! Event[elist.size()];</b> <br><b> for(int i=0; ! i<events.length; i++)</b> ! <br><b> events[i] = ! (Event)elist.get(i);</b><b></b> <p><b> return ! events;</b> <br><b>}</b> ! </blockquote> ! ! <p> ! Basically, this just walks through the data, asks the ContextGenerator ! for contexts, and throws an event outcome onto it to create a ! opennlp.maxent.Event object. Notice that we ignore the boolean ! <b>evalMode</b> in this implementation, which is because the ! SentenceDetectorME has not yet been set up for the nice automatic ! evaluation stuff made possible by the Evalable interface and TrainEval ! class. See the opennlp.grok.preprocess.namefind and ! opennlp.grok.preprocess.postag packages for examples which take ! advantage of the evaluation code. ! </p> ! <p> ! Once you have both your ContextGenerator and EventCollector ! implementations as well as your training data in hand, you can train up a model. opennlp.maxent has an implementation of Generalized Iterative Scaling (opennlp.maxent.GIS) which you can use for this purpose. Write some code somewhere to make a call to the method ! <b>GIS.trainModel</b>, which will ultimately save a model in a ! location which you have specified. </p> - <blockquote> ! <b>public static void trainModel(String modelpath, String ! modelname, DataIndexer di, int iterations) { ... }</b> </blockquote> - <p> ! The <i>modelpath</i> is the directory where you want the model saved, ! the <i>modelname</i> is however you want to call the model, and the ! <i>iterations</i> are the number of times the training procedure should iterate when finding the model's parameters. You shouldn't need more than 100 iterations, and when you are first trying to create your model, you'll probably want to use fewer so that you can iron out problems without waiting each time for all those iterations, which can ! be quite a while depending on the task. The DataIndexer is an ! object that pulls in all those events that your EventCollector has gathered and then manipulates them into a format that is much more efficient for the training procedure to work with. There is ! nothing complicated here --- you just need to create a DataIndexer ! with the events and an integer that is the cutoff for the number of times a feature must have been seen in order to be considered in the model. --- 153,198 ---- <b>public String getBestOutcome(double[] outcomes);</b> </blockquote> And this will return the String name of that most likely outcome. <p> ! You can find many examples of these methods being used to make predictions for ! natural language processing tasks in the <a href="opennlp.sourceforge.net">OpenNLP Tools</a> project </p> ! <h2>Training a Model</h2> <p> ! In order to train a model, you need some way to produce a set of events which serve as examples for your model. ! This is typically done by using data that has been annotated by someone with the outcomes that ! your model is trying to predict. ! This is done with an EventStream object. An event stream is just an iterator over a set of events. ! An event consists of an outcome and a context. For the example above, an event might look like: <blockquote> ! <i>outcome</i>: T <br> ! <i>context</i>: previous=succeeds current=Terrence next=D. currentWordIsCapitalized ! </blockquote> <p> ! Once you have both your EventStream implementation as well as your training data in hand, you can train up a model. opennlp.maxent has an implementation of Generalized Iterative Scaling (opennlp.maxent.GIS) which you can use for this purpose. Write some code somewhere to make a call to the method ! <b>GIS.trainModel</b>. </p> <blockquote> ! <b>public static MaxentModel trainModel(DataIndexer di, int iterations) { ... }</b> </blockquote> <p> ! The <i>iterations</i> are the number of times the training procedure should iterate when finding the model's parameters. You shouldn't need more than 100 iterations, and when you are first trying to create your model, you'll probably want to use fewer so that you can iron out problems without waiting each time for all those iterations, which can ! be quite a while depending on the task. ! </p> ! <p> ! The DataIndexer is an ! abstract object that pulls in all those events that your EventStream has gathered and then manipulates them into a format that is much more efficient for the training procedure to work with. There is ! nothing complicated here --- you just need to create an instance of ! a DataIndexer, typically the OnePassDataIndexer, with the events ! and an integer that is the cutoff for the number of times a feature must have been seen in order to be considered in the model. *************** *** 417,478 **** <blockquote> ! <b>public DataIndexer(Event[] events, int cutoff){ ... }</b> </blockquote> <p> ! You can also call the constructor <b>DataIndexer(Event[] events)</b>, ! which assumes a cutoff of 0. An example of code which does all ! of these steps to create a model follows (from ! opennlp.grok.preprocess.sentdetect.SentenceDetectorME): </p> ! <blockquote> ! <b>public static void main(String[] args) {</b> ! <br><b> try {</b> ! <br><b> FileReader ! datafr = new FileReader(new File(args[0]));</b> ! <br><b> String outdir ! = args[1];</b> <br><b> ! String modelname = args[2];</b> ! <br><b> DataIndexer di ! = new DataIndexer(new SDEventCollector(datafr).getEvents(), ! 3);</b> <br><b> ! GIS.trainModel(outdir, modelname, di, 100);</b> ! <br><b> } catch (Exception e) {</b> ! <br><b> ! e.printStackTrace();</b> <br><b> }</b> ! <br><b> </b> <br><b>}</b> ! ! </blockquote> <p> ! Once the training is done, GIS dumps the model out as two files, ! one containing the model's parameters in binary format and the other ! containing information such as the different outcomes, the outcomes ! which have been associated with particular features, and the features ! themselves. They are saved (automatically gzipped) with the ! names <i>modelname</i>.mep.gz and <i>modelname</i>.mei.gz, ! respectively ("mep" for maxent parameters and "mei" for maxent info). ! <p>Now that you have your models dumped to disk, you can create an ! instance of opennlp.maxent.MaxentModel by called the constructor ! <b>GISModel(String modellocation, String modelname)</b>, which assumes ! that the two files for the model are gzipped with the mei and mep ! suffixes that GIS saved them as. So if you had just ! trained a model called "MyClassificationTask" which is saved in the ! directory /myproject/classify/ (as the files ! MyClassificationTask.mep.gz and MyClassificationTask.mep.gz) , you ! would create your model instance by calling ! <b>GISModel("/myproject/classify/", "MyClassificationTask").</b> ! Make sure that you have the trailing directory separator '/' on ! the location. (Note: we use a Unix example here, but it ! should work for other OS types as well.) Alternatively, you can ! create the model by using the constructor which takes InputStreams for ! the parameters and info files: <b>GISModel(InputStream modelinfo, ! InputStream modelparams)</b>. See ! opennlp.grok.preprocess.sentdetect.EnglishSentenceDetectorME for an ! example of this. </p> <p> That's it! Hopefully, with this little HOWTO and the example implementations available in opennlp.grok.preprocess, you'll be able --- 200,243 ---- <blockquote> ! <b>public OnePassDataIndexer(EventStream es, int cutoff){ ... }</b> </blockquote> <p> ! You can also call the constructor <b>OnePassDataIndexer(EventStream events)</b>, ! which assumes a cutoff of 0. </p> ! <p> ! Once the model is returned you can write it to disk using the following code: ! </p> + <blockquote> + <b> + File outputFile = new File(modelFileName+".bin.gz"); + <br> + GISModelWriter writer = new SuffixSensiiveGISModelWriter(model, outputFile); + <br> + writer.persist(); + </b> + </blockquote> <p> ! This will save you're model in a compressed binary format (using the BinaryGISModelWriter class) ! based on the file extension. ! </p> ! <p> ! Likewise you can load your model from disk using: </p> + <blockquote> + <b> + GISModel m = new SuffixSensitiveGISModelReader(new File(modelFileName)).getModel(); + </b> + </blockquote> <p> + A more detailed example is available in the "samples/sports" section of the distribution + which comes with training data, code to build a model, data to test the model on, and code + to make predictions and evaluate to model against the test data. + </p> + <p> That's it! Hopefully, with this little HOWTO and the example implementations available in opennlp.grok.preprocess, you'll be able *************** *** 481,488 **** confusing and I'll try to make things more clear. I would also welcome "patches" to this document if you feel like making ! changes yourself. Also, feel free to take the ! opennlp.grok.preprocess implementations of ContextGenerator and ! EventCollector and modify and use them for your own purposes (they are ! LGPL'ed). </p> --- 246,256 ---- confusing and I'll try to make things more clear. I would also welcome "patches" to this document if you feel like making ! changes yourself. ! </p> ! <p> ! If you have any questions, do not hesitate to post them on ! the ! <a href="https://sourceforge.net/forum/forum.php?forum_id=18385">help ! forum</a>. </p> *************** *** 500,505 **** <h3> ! Email: <a href="mailto:jm...@co...">jm...@co...</a><br> ! 2001 October 29 <br> <br> <A href="http://sourceforge.net"> <IMG src="http://sourceforge.net/sflogo.php?group_id=5961&type=1" width="88" height="31" border="0"></A> <br> --- 268,279 ---- <h3> ! Email: <a href="mailto:tsm...@us...">tsm...@us...</a><br> ! <script language="JavaScript"> ! <!---// ! var Months = new Array('January','February','March','April','May','June','July','August','September','October','November','December'); ! var lm = new Date (document.lastModified); ! document.write(Months[lm.getMonth()]+" "+lm.getDate()+" "+lm.getFullYear()); ! //---> ! </script> <br> <A href="http://sourceforge.net"> <IMG src="http://sourceforge.net/sflogo.php?group_id=5961&type=1" width="88" height="31" border="0"></A> <br> |
From: Thomas M. <tsm...@us...> - 2008-08-22 01:17:08
|
Update of /cvsroot/maxent/maxent/src/java/opennlp/maxent/io In directory sc8-pr-cvs16.sourceforge.net:/tmp/cvs-serv8877/src/java/opennlp/maxent/io Modified Files: SuffixSensitiveGISModelReader.java Log Message: added usage information. Index: SuffixSensitiveGISModelReader.java =================================================================== RCS file: /cvsroot/maxent/maxent/src/java/opennlp/maxent/io/SuffixSensitiveGISModelReader.java,v retrieving revision 1.2 retrieving revision 1.3 diff -C2 -d -r1.2 -r1.3 *** SuffixSensitiveGISModelReader.java 10 May 2004 03:11:54 -0000 1.2 --- SuffixSensitiveGISModelReader.java 22 Aug 2008 01:17:04 -0000 1.3 *************** *** 110,116 **** */ public static void main(String[] args) throws IOException { ! opennlp.maxent.GISModel m = ! new SuffixSensitiveGISModelReader(new File(args[0])).getModel(); ! new SuffixSensitiveGISModelWriter(m, new File(args[1])).persist(); } --- 110,123 ---- */ public static void main(String[] args) throws IOException { ! if (args.length == 2) { ! opennlp.maxent.GISModel m = ! new SuffixSensitiveGISModelReader(new File(args[0])).getModel(); ! new SuffixSensitiveGISModelWriter(m, new File(args[1])).persist(); ! } ! else { ! System.err.println("Usage: SuffixSensitiveGISModelReader model1 mode2"); ! System.err.println("Load model1 and converts it into the model file format specified by the model2 name."); ! ! } } |