You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@opennlp.apache.org by co...@apache.org on 2011/07/12 06:10:51 UTC
svn commit: r1145449 - in
/incubator/opennlp/trunk/opennlp-tools/src/main/java/opennlp/tools/cmdline/sentdetect:
SentenceDetectorCrossValidatorTool.java SentenceDetectorEvaluatorTool.java
Author: colen
Date: Tue Jul 12 04:10:51 2011
New Revision: 1145449
URL: http://svn.apache.org/viewvc?rev=1145449&view=rev
Log:
OPENNLP-221 Refactored the evaluator and cross validator CLI tools of the SentenceDetector to use the Parameters interface. Please review. If it is OK I will do the same with the other tools
Modified:
incubator/opennlp/trunk/opennlp-tools/src/main/java/opennlp/tools/cmdline/sentdetect/SentenceDetectorCrossValidatorTool.java
incubator/opennlp/trunk/opennlp-tools/src/main/java/opennlp/tools/cmdline/sentdetect/SentenceDetectorEvaluatorTool.java
Modified: incubator/opennlp/trunk/opennlp-tools/src/main/java/opennlp/tools/cmdline/sentdetect/SentenceDetectorCrossValidatorTool.java
URL: http://svn.apache.org/viewvc/incubator/opennlp/trunk/opennlp-tools/src/main/java/opennlp/tools/cmdline/sentdetect/SentenceDetectorCrossValidatorTool.java?rev=1145449&r1=1145448&r2=1145449&view=diff
==============================================================================
--- incubator/opennlp/trunk/opennlp-tools/src/main/java/opennlp/tools/cmdline/sentdetect/SentenceDetectorCrossValidatorTool.java (original)
+++ incubator/opennlp/trunk/opennlp-tools/src/main/java/opennlp/tools/cmdline/sentdetect/SentenceDetectorCrossValidatorTool.java Tue Jul 12 04:10:51 2011
@@ -19,7 +19,11 @@ package opennlp.tools.cmdline.sentdetect
import java.io.File;
import java.io.IOException;
+import java.nio.charset.Charset;
+import opennlp.tools.cmdline.ArgumentParser;
+import opennlp.tools.cmdline.ArgumentParser.ParameterDescription;
+import opennlp.tools.cmdline.BasicTrainingParametersI;
import opennlp.tools.cmdline.CLI;
import opennlp.tools.cmdline.CmdLineTool;
import opennlp.tools.cmdline.CmdLineUtil;
@@ -30,6 +34,16 @@ import opennlp.tools.util.ObjectStream;
import opennlp.tools.util.eval.FMeasure;
public final class SentenceDetectorCrossValidatorTool implements CmdLineTool {
+
+ /**
+ * Create a list of expected parameters.
+ */
+ interface Parameters extends BasicTrainingParametersI {
+
+ @ParameterDescription(valueName = "data")
+ String getData();
+
+ }
public String getName() {
return "SentenceDetectorCrossValidator";
@@ -40,40 +54,37 @@ public final class SentenceDetectorCross
}
public String getHelp() {
- return "Usage: " + CLI.CMD + " " + getName() + " " + TrainingParameters.getParameterUsage() +
- " -data trainData\n" +
- TrainingParameters.getDescription();
+ return "Usage: " + CLI.CMD + " " + getName() + " " + ArgumentParser.createUsage(Parameters.class);
}
public void run(String[] args) {
- if (args.length < 5) {
- System.out.println(getHelp());
+
+ if (!ArgumentParser.validateArguments(args, Parameters.class)) {
+ System.err.println(getHelp());
throw new TerminateToolException(1);
}
- TrainingParameters parameters = new TrainingParameters(args);
+ Parameters params = ArgumentParser.parse(args, Parameters.class);
- if(!parameters.isValid()) {
- System.out.println(getHelp());
- throw new TerminateToolException(1);
- }
opennlp.tools.util.TrainingParameters mlParams =
- CmdLineUtil.loadTrainingParameters(CmdLineUtil.getParameter("-params", args), false);
+ CmdLineUtil.loadTrainingParameters(params.getParams(), false);
- File trainingDataInFile = new File(CmdLineUtil.getParameter("-data", args));
+ File trainingDataInFile = new File(params.getData());
CmdLineUtil.checkInputFile("Training Data", trainingDataInFile);
+ Charset encoding = Charset.forName(params.getEncoding());
+
ObjectStream<SentenceSample> sampleStream = SentenceDetectorTrainerTool.openSampleData("Training Data",
- trainingDataInFile, parameters.getEncoding());
+ trainingDataInFile, encoding);
SDCrossValidator validator;
if (mlParams == null) {
- validator = new SDCrossValidator(parameters.getLanguage(), parameters.getCutoff(), parameters.getNumberOfIterations());
+ validator = new SDCrossValidator(params.getLang(), params.getCutoff(), params.getIterations());
}
else {
- validator = new SDCrossValidator(parameters.getLanguage(), mlParams);
+ validator = new SDCrossValidator(params.getLang(), mlParams);
}
try {
Modified: incubator/opennlp/trunk/opennlp-tools/src/main/java/opennlp/tools/cmdline/sentdetect/SentenceDetectorEvaluatorTool.java
URL: http://svn.apache.org/viewvc/incubator/opennlp/trunk/opennlp-tools/src/main/java/opennlp/tools/cmdline/sentdetect/SentenceDetectorEvaluatorTool.java?rev=1145449&r1=1145448&r2=1145449&view=diff
==============================================================================
--- incubator/opennlp/trunk/opennlp-tools/src/main/java/opennlp/tools/cmdline/sentdetect/SentenceDetectorEvaluatorTool.java (original)
+++ incubator/opennlp/trunk/opennlp-tools/src/main/java/opennlp/tools/cmdline/sentdetect/SentenceDetectorEvaluatorTool.java Tue Jul 12 04:10:51 2011
@@ -21,6 +21,9 @@ import java.io.File;
import java.io.IOException;
import java.nio.charset.Charset;
+import opennlp.tools.cmdline.ArgumentParser;
+import opennlp.tools.cmdline.ArgumentParser.OptionalParameter;
+import opennlp.tools.cmdline.ArgumentParser.ParameterDescription;
import opennlp.tools.cmdline.CLI;
import opennlp.tools.cmdline.CmdLineTool;
import opennlp.tools.cmdline.CmdLineUtil;
@@ -31,6 +34,22 @@ import opennlp.tools.sentdetect.Sentence
import opennlp.tools.util.ObjectStream;
public final class SentenceDetectorEvaluatorTool implements CmdLineTool {
+
+ /**
+ * Create a list of expected parameters.
+ */
+ interface Parameters {
+
+ @ParameterDescription(valueName = "charsetName", description = "specifies the encoding which should be used for reading and writing text")
+ @OptionalParameter(defaultValue="UTF-8")
+ String getEncoding();
+
+ @ParameterDescription(valueName = "model")
+ String getModel();
+
+ @ParameterDescription(valueName = "data")
+ String getData();
+ }
public String getName() {
return "SentenceDetectorEvaluator";
@@ -41,25 +60,28 @@ public final class SentenceDetectorEvalu
}
public String getHelp() {
- return "Usage: " + CLI.CMD + " " + getName() + " -encoding charset -model model -data testData";
+ return "Usage: " + CLI.CMD + " " + getName() + " " + ArgumentParser.createUsage(Parameters.class);
}
public void run(String[] args) {
- if (args.length != 6) {
- System.out.println(getHelp());
+
+ if (!ArgumentParser.validateArguments(args, Parameters.class)) {
+ System.err.println(getHelp());
throw new TerminateToolException(1);
}
- Charset encoding = CmdLineUtil.getEncodingParameter(args);
+ Parameters params = ArgumentParser.parse(args, Parameters.class);
+
+ Charset encoding = Charset.forName(params.getEncoding());
if (encoding == null) {
System.out.println(getHelp());
throw new TerminateToolException(1);
}
- SentenceModel model = new SentenceModelLoader().load(new File(CmdLineUtil.getParameter("-model", args)));
+ SentenceModel model = new SentenceModelLoader().load(new File(params.getModel()));
- File trainingDataInFile = new File(CmdLineUtil.getParameter("-data", args));
+ File trainingDataInFile = new File(params.getData());
CmdLineUtil.checkInputFile("Training Data", trainingDataInFile);
opennlp.tools.sentdetect.SentenceDetectorEvaluator evaluator =
Re: svn commit: r1145449 - in /incubator/opennlp/trunk/opennlp-tools/src/main/java/opennlp/tools/cmdline/sentdetect:
SentenceDetectorCrossValidatorTool.java SentenceDetectorEvaluatorTool.java
Posted by "william.colen@gmail.com" <wi...@gmail.com>.
Thank you Jörn.
I will do the same with Tokenizer, Name Finder, POS Tagger and Chunker.
William
On Tue, Jul 12, 2011 at 8:43 AM, Jörn Kottmann <ko...@gmail.com> wrote:
> I did the same for Charset, but compared to a file that can also go wrong.
>
> ArgumentParser.**validateArguments now checks that the passed arguments
> are valid
> in terms of the requested arguments.
>
> ArgumentParser.parse now throws a TerminateToolException with an error
> message
> when the argument value is invalid, e.g. not a number, charset does not
> exist.
>
> Jörn
>
>
> On 7/12/11 10:41 AM, Jörn Kottmann wrote:
>
>> Hi William,
>>
>> the code looks good, I think we should improve the Argument Parser also a
>> little
>> to make it more convenient to use.
>>
>> You need to write this:
>>
>> File trainingDataInFile = new File(params.getData());
>>
>>
>> I will extend to Argument Parser to also understand "File" as a return
>> type then you can write:
>>
>> File trainingDataInFile = params.getData();
>>
>>
>> In the long term I would like to do much more parameter checking and
>> validation
>> with annotations, because this a good way we to avoid code duplication.
>>
>> Jörn
>>
>> On 7/12/11 6:10 AM, colen@apache.org wrote:
>>
>>> Author: colen
>>> Date: Tue Jul 12 04:10:51 2011
>>> New Revision: 1145449
>>>
>>> URL: http://svn.apache.org/viewvc?**rev=1145449&view=rev<http://svn.apache.org/viewvc?rev=1145449&view=rev>
>>> Log:
>>> OPENNLP-221 Refactored the evaluator and cross validator CLI tools of the
>>> SentenceDetector to use the Parameters interface. Please review. If it is OK
>>> I will do the same with the other tools
>>>
>>> Modified:
>>> incubator/opennlp/trunk/**opennlp-tools/src/main/java/**
>>> opennlp/tools/cmdline/**sentdetect/**SentenceDetectorCrossValidator**
>>> Tool.java
>>> incubator/opennlp/trunk/**opennlp-tools/src/main/java/**
>>> opennlp/tools/cmdline/**sentdetect/**SentenceDetectorEvaluatorTool.**
>>> java
>>>
>>> Modified: incubator/opennlp/trunk/**opennlp-tools/src/main/java/**
>>> opennlp/tools/cmdline/**sentdetect/**SentenceDetectorCrossValidator**
>>> Tool.java
>>> URL: http://svn.apache.org/viewvc/**incubator/opennlp/trunk/**
>>> opennlp-tools/src/main/java/**opennlp/tools/cmdline/**sentdetect/**
>>> SentenceDetectorCrossValidator**Tool.java?rev=1145449&r1=**
>>> 1145448&r2=1145449&view=diff<http://svn.apache.org/viewvc/incubator/opennlp/trunk/opennlp-tools/src/main/java/opennlp/tools/cmdline/sentdetect/SentenceDetectorCrossValidatorTool.java?rev=1145449&r1=1145448&r2=1145449&view=diff>
>>> ==============================**==============================**==================
>>>
>>> --- incubator/opennlp/trunk/**opennlp-tools/src/main/java/**
>>> opennlp/tools/cmdline/**sentdetect/**SentenceDetectorCrossValidator**Tool.java
>>> (original)
>>> +++ incubator/opennlp/trunk/**opennlp-tools/src/main/java/**
>>> opennlp/tools/cmdline/**sentdetect/**SentenceDetectorCrossValidator**Tool.java
>>> Tue Jul 12 04:10:51 2011
>>> @@ -19,7 +19,11 @@ package opennlp.tools.cmdline.**sentdetect
>>>
>>> import java.io.File;
>>> import java.io.IOException;
>>> +import java.nio.charset.Charset;
>>>
>>> +import opennlp.tools.cmdline.**ArgumentParser;
>>> +import opennlp.tools.cmdline.**ArgumentParser.**ParameterDescription;
>>> +import opennlp.tools.cmdline.**BasicTrainingParametersI;
>>> import opennlp.tools.cmdline.CLI;
>>> import opennlp.tools.cmdline.**CmdLineTool;
>>> import opennlp.tools.cmdline.**CmdLineUtil;
>>> @@ -30,6 +34,16 @@ import opennlp.tools.util.**ObjectStream;
>>> import opennlp.tools.util.eval.**FMeasure;
>>>
>>> public final class SentenceDetectorCrossValidator**Tool implements
>>> CmdLineTool {
>>> +
>>> + /**
>>> + * Create a list of expected parameters.
>>> + */
>>> + interface Parameters extends BasicTrainingParametersI {
>>> +
>>> + @ParameterDescription(**valueName = "data")
>>> + String getData();
>>> +
>>> + }
>>>
>>> public String getName() {
>>> return "**SentenceDetectorCrossValidator**";
>>> @@ -40,40 +54,37 @@ public final class SentenceDetectorCross
>>> }
>>>
>>> public String getHelp() {
>>> - return "Usage: " + CLI.CMD + " " + getName() + " " +
>>> TrainingParameters.**getParameterUsage() +
>>> - " -data trainData\n" +
>>> - TrainingParameters.**getDescription();
>>> + return "Usage: " + CLI.CMD + " " + getName() + " " +
>>> ArgumentParser.createUsage(**Parameters.class);
>>> }
>>>
>>> public void run(String[] args) {
>>> - if (args.length< 5) {
>>> - System.out.println(getHelp());
>>> +
>>> + if (!ArgumentParser.**validateArguments(args, Parameters.class)) {
>>> + System.err.println(getHelp());
>>> throw new TerminateToolException(1);
>>> }
>>>
>>> - TrainingParameters parameters = new TrainingParameters(args);
>>> + Parameters params = ArgumentParser.parse(args, Parameters.class);
>>>
>>> - if(!parameters.isValid()) {
>>> - System.out.println(getHelp());
>>> - throw new TerminateToolException(1);
>>> - }
>>>
>>> opennlp.tools.util.**TrainingParameters mlParams =
>>> - CmdLineUtil.**loadTrainingParameters(**
>>> CmdLineUtil.getParameter("-**params", args), false);
>>> + CmdLineUtil.**loadTrainingParameters(params.**getParams(),
>>> false);
>>>
>>> - File trainingDataInFile = new File(CmdLineUtil.getParameter(**"-data",
>>> args));
>>> + File trainingDataInFile = new File(params.getData());
>>> CmdLineUtil.checkInputFile("**Training Data", trainingDataInFile);
>>>
>>> + Charset encoding = Charset.forName(params.**getEncoding());
>>> +
>>> ObjectStream<SentenceSample> sampleStream =
>>> SentenceDetectorTrainerTool.**openSampleData("Training Data",
>>> - trainingDataInFile, parameters.getEncoding());
>>> + trainingDataInFile, encoding);
>>>
>>> SDCrossValidator validator;
>>>
>>> if (mlParams == null) {
>>> - validator = new SDCrossValidator(parameters.**getLanguage(),
>>> parameters.getCutoff(), parameters.**getNumberOfIterations());
>>> + validator = new SDCrossValidator(params.**getLang(),
>>> params.getCutoff(), params.getIterations());
>>> }
>>> else {
>>> - validator = new SDCrossValidator(parameters.**getLanguage(),
>>> mlParams);
>>> + validator = new SDCrossValidator(params.**getLang(), mlParams);
>>> }
>>>
>>> try {
>>>
>>> Modified: incubator/opennlp/trunk/**opennlp-tools/src/main/java/**
>>> opennlp/tools/cmdline/**sentdetect/**SentenceDetectorEvaluatorTool.**
>>> java
>>> URL: http://svn.apache.org/viewvc/**incubator/opennlp/trunk/**
>>> opennlp-tools/src/main/java/**opennlp/tools/cmdline/**sentdetect/**
>>> SentenceDetectorEvaluatorTool.**java?rev=1145449&r1=1145448&**
>>> r2=1145449&view=diff<http://svn.apache.org/viewvc/incubator/opennlp/trunk/opennlp-tools/src/main/java/opennlp/tools/cmdline/sentdetect/SentenceDetectorEvaluatorTool.java?rev=1145449&r1=1145448&r2=1145449&view=diff>
>>> ==============================**==============================**==================
>>>
>>> --- incubator/opennlp/trunk/**opennlp-tools/src/main/java/**
>>> opennlp/tools/cmdline/**sentdetect/**SentenceDetectorEvaluatorTool.**java
>>> (original)
>>> +++ incubator/opennlp/trunk/**opennlp-tools/src/main/java/**
>>> opennlp/tools/cmdline/**sentdetect/**SentenceDetectorEvaluatorTool.**java
>>> Tue Jul 12 04:10:51 2011
>>> @@ -21,6 +21,9 @@ import java.io.File;
>>> import java.io.IOException;
>>> import java.nio.charset.Charset;
>>>
>>> +import opennlp.tools.cmdline.**ArgumentParser;
>>> +import opennlp.tools.cmdline.**ArgumentParser.**OptionalParameter;
>>> +import opennlp.tools.cmdline.**ArgumentParser.**ParameterDescription;
>>> import opennlp.tools.cmdline.CLI;
>>> import opennlp.tools.cmdline.**CmdLineTool;
>>> import opennlp.tools.cmdline.**CmdLineUtil;
>>> @@ -31,6 +34,22 @@ import opennlp.tools.sentdetect.**Sentence
>>> import opennlp.tools.util.**ObjectStream;
>>>
>>> public final class SentenceDetectorEvaluatorTool implements CmdLineTool
>>> {
>>> +
>>> + /**
>>> + * Create a list of expected parameters.
>>> + */
>>> + interface Parameters {
>>> +
>>> + @ParameterDescription(**valueName = "charsetName", description =
>>> "specifies the encoding which should be used for reading and writing text")
>>> + @OptionalParameter(**defaultValue="UTF-8")
>>> + String getEncoding();
>>> +
>>> + @ParameterDescription(**valueName = "model")
>>> + String getModel();
>>> +
>>> + @ParameterDescription(**valueName = "data")
>>> + String getData();
>>> + }
>>>
>>> public String getName() {
>>> return "SentenceDetectorEvaluator";
>>> @@ -41,25 +60,28 @@ public final class SentenceDetectorEvalu
>>> }
>>>
>>> public String getHelp() {
>>> - return "Usage: " + CLI.CMD + " " + getName() + " -encoding charset
>>> -model model -data testData";
>>> + return "Usage: " + CLI.CMD + " " + getName() + " " +
>>> ArgumentParser.createUsage(**Parameters.class);
>>> }
>>>
>>> public void run(String[] args) {
>>> - if (args.length != 6) {
>>> - System.out.println(getHelp());
>>> +
>>> + if (!ArgumentParser.**validateArguments(args, Parameters.class)) {
>>> + System.err.println(getHelp());
>>> throw new TerminateToolException(1);
>>> }
>>>
>>> - Charset encoding = CmdLineUtil.**getEncodingParameter(args);
>>> + Parameters params = ArgumentParser.parse(args, Parameters.class);
>>> +
>>> + Charset encoding = Charset.forName(params.**getEncoding());
>>>
>>> if (encoding == null) {
>>> System.out.println(getHelp());
>>> throw new TerminateToolException(1);
>>> }
>>>
>>> - SentenceModel model = new SentenceModelLoader().load(new
>>> File(CmdLineUtil.getParameter(**"-model", args)));
>>> + SentenceModel model = new SentenceModelLoader().load(new
>>> File(params.getModel()));
>>>
>>> - File trainingDataInFile = new File(CmdLineUtil.getParameter(**"-data",
>>> args));
>>> + File trainingDataInFile = new File(params.getData());
>>> CmdLineUtil.checkInputFile("**Training Data", trainingDataInFile);
>>>
>>> opennlp.tools.sentdetect.**SentenceDetectorEvaluator evaluator =
>>>
>>>
>>>
>>
>
Re: svn commit: r1145449 - in /incubator/opennlp/trunk/opennlp-tools/src/main/java/opennlp/tools/cmdline/sentdetect:
SentenceDetectorCrossValidatorTool.java SentenceDetectorEvaluatorTool.java
Posted by Jörn Kottmann <ko...@gmail.com>.
I did the same for Charset, but compared to a file that can also go wrong.
ArgumentParser.validateArguments now checks that the passed arguments
are valid
in terms of the requested arguments.
ArgumentParser.parse now throws a TerminateToolException with an error
message
when the argument value is invalid, e.g. not a number, charset does not
exist.
Jörn
On 7/12/11 10:41 AM, Jörn Kottmann wrote:
> Hi William,
>
> the code looks good, I think we should improve the Argument Parser
> also a little
> to make it more convenient to use.
>
> You need to write this:
>
> File trainingDataInFile = new File(params.getData());
>
>
> I will extend to Argument Parser to also understand "File" as a return
> type then you can write:
>
> File trainingDataInFile = params.getData();
>
>
> In the long term I would like to do much more parameter checking and
> validation
> with annotations, because this a good way we to avoid code duplication.
>
> Jörn
>
> On 7/12/11 6:10 AM, colen@apache.org wrote:
>> Author: colen
>> Date: Tue Jul 12 04:10:51 2011
>> New Revision: 1145449
>>
>> URL: http://svn.apache.org/viewvc?rev=1145449&view=rev
>> Log:
>> OPENNLP-221 Refactored the evaluator and cross validator CLI tools of
>> the SentenceDetector to use the Parameters interface. Please review.
>> If it is OK I will do the same with the other tools
>>
>> Modified:
>>
>> incubator/opennlp/trunk/opennlp-tools/src/main/java/opennlp/tools/cmdline/sentdetect/SentenceDetectorCrossValidatorTool.java
>>
>> incubator/opennlp/trunk/opennlp-tools/src/main/java/opennlp/tools/cmdline/sentdetect/SentenceDetectorEvaluatorTool.java
>>
>> Modified:
>> incubator/opennlp/trunk/opennlp-tools/src/main/java/opennlp/tools/cmdline/sentdetect/SentenceDetectorCrossValidatorTool.java
>> URL:
>> http://svn.apache.org/viewvc/incubator/opennlp/trunk/opennlp-tools/src/main/java/opennlp/tools/cmdline/sentdetect/SentenceDetectorCrossValidatorTool.java?rev=1145449&r1=1145448&r2=1145449&view=diff
>> ==============================================================================
>>
>> ---
>> incubator/opennlp/trunk/opennlp-tools/src/main/java/opennlp/tools/cmdline/sentdetect/SentenceDetectorCrossValidatorTool.java
>> (original)
>> +++
>> incubator/opennlp/trunk/opennlp-tools/src/main/java/opennlp/tools/cmdline/sentdetect/SentenceDetectorCrossValidatorTool.java
>> Tue Jul 12 04:10:51 2011
>> @@ -19,7 +19,11 @@ package opennlp.tools.cmdline.sentdetect
>>
>> import java.io.File;
>> import java.io.IOException;
>> +import java.nio.charset.Charset;
>>
>> +import opennlp.tools.cmdline.ArgumentParser;
>> +import opennlp.tools.cmdline.ArgumentParser.ParameterDescription;
>> +import opennlp.tools.cmdline.BasicTrainingParametersI;
>> import opennlp.tools.cmdline.CLI;
>> import opennlp.tools.cmdline.CmdLineTool;
>> import opennlp.tools.cmdline.CmdLineUtil;
>> @@ -30,6 +34,16 @@ import opennlp.tools.util.ObjectStream;
>> import opennlp.tools.util.eval.FMeasure;
>>
>> public final class SentenceDetectorCrossValidatorTool implements
>> CmdLineTool {
>> +
>> + /**
>> + * Create a list of expected parameters.
>> + */
>> + interface Parameters extends BasicTrainingParametersI {
>> +
>> + @ParameterDescription(valueName = "data")
>> + String getData();
>> +
>> + }
>>
>> public String getName() {
>> return "SentenceDetectorCrossValidator";
>> @@ -40,40 +54,37 @@ public final class SentenceDetectorCross
>> }
>>
>> public String getHelp() {
>> - return "Usage: " + CLI.CMD + " " + getName() + " " +
>> TrainingParameters.getParameterUsage() +
>> - " -data trainData\n" +
>> - TrainingParameters.getDescription();
>> + return "Usage: " + CLI.CMD + " " + getName() + " " +
>> ArgumentParser.createUsage(Parameters.class);
>> }
>>
>> public void run(String[] args) {
>> - if (args.length< 5) {
>> - System.out.println(getHelp());
>> +
>> + if (!ArgumentParser.validateArguments(args, Parameters.class)) {
>> + System.err.println(getHelp());
>> throw new TerminateToolException(1);
>> }
>>
>> - TrainingParameters parameters = new TrainingParameters(args);
>> + Parameters params = ArgumentParser.parse(args, Parameters.class);
>>
>> - if(!parameters.isValid()) {
>> - System.out.println(getHelp());
>> - throw new TerminateToolException(1);
>> - }
>>
>> opennlp.tools.util.TrainingParameters mlParams =
>> -
>> CmdLineUtil.loadTrainingParameters(CmdLineUtil.getParameter("-params", args),
>> false);
>> + CmdLineUtil.loadTrainingParameters(params.getParams(), false);
>>
>> - File trainingDataInFile = new
>> File(CmdLineUtil.getParameter("-data", args));
>> + File trainingDataInFile = new File(params.getData());
>> CmdLineUtil.checkInputFile("Training Data", trainingDataInFile);
>>
>> + Charset encoding = Charset.forName(params.getEncoding());
>> +
>> ObjectStream<SentenceSample> sampleStream =
>> SentenceDetectorTrainerTool.openSampleData("Training Data",
>> - trainingDataInFile, parameters.getEncoding());
>> + trainingDataInFile, encoding);
>>
>> SDCrossValidator validator;
>>
>> if (mlParams == null) {
>> - validator = new SDCrossValidator(parameters.getLanguage(),
>> parameters.getCutoff(), parameters.getNumberOfIterations());
>> + validator = new SDCrossValidator(params.getLang(),
>> params.getCutoff(), params.getIterations());
>> }
>> else {
>> - validator = new SDCrossValidator(parameters.getLanguage(),
>> mlParams);
>> + validator = new SDCrossValidator(params.getLang(), mlParams);
>> }
>>
>> try {
>>
>> Modified:
>> incubator/opennlp/trunk/opennlp-tools/src/main/java/opennlp/tools/cmdline/sentdetect/SentenceDetectorEvaluatorTool.java
>> URL:
>> http://svn.apache.org/viewvc/incubator/opennlp/trunk/opennlp-tools/src/main/java/opennlp/tools/cmdline/sentdetect/SentenceDetectorEvaluatorTool.java?rev=1145449&r1=1145448&r2=1145449&view=diff
>> ==============================================================================
>>
>> ---
>> incubator/opennlp/trunk/opennlp-tools/src/main/java/opennlp/tools/cmdline/sentdetect/SentenceDetectorEvaluatorTool.java
>> (original)
>> +++
>> incubator/opennlp/trunk/opennlp-tools/src/main/java/opennlp/tools/cmdline/sentdetect/SentenceDetectorEvaluatorTool.java
>> Tue Jul 12 04:10:51 2011
>> @@ -21,6 +21,9 @@ import java.io.File;
>> import java.io.IOException;
>> import java.nio.charset.Charset;
>>
>> +import opennlp.tools.cmdline.ArgumentParser;
>> +import opennlp.tools.cmdline.ArgumentParser.OptionalParameter;
>> +import opennlp.tools.cmdline.ArgumentParser.ParameterDescription;
>> import opennlp.tools.cmdline.CLI;
>> import opennlp.tools.cmdline.CmdLineTool;
>> import opennlp.tools.cmdline.CmdLineUtil;
>> @@ -31,6 +34,22 @@ import opennlp.tools.sentdetect.Sentence
>> import opennlp.tools.util.ObjectStream;
>>
>> public final class SentenceDetectorEvaluatorTool implements
>> CmdLineTool {
>> +
>> + /**
>> + * Create a list of expected parameters.
>> + */
>> + interface Parameters {
>> +
>> + @ParameterDescription(valueName = "charsetName", description =
>> "specifies the encoding which should be used for reading and writing
>> text")
>> + @OptionalParameter(defaultValue="UTF-8")
>> + String getEncoding();
>> +
>> + @ParameterDescription(valueName = "model")
>> + String getModel();
>> +
>> + @ParameterDescription(valueName = "data")
>> + String getData();
>> + }
>>
>> public String getName() {
>> return "SentenceDetectorEvaluator";
>> @@ -41,25 +60,28 @@ public final class SentenceDetectorEvalu
>> }
>>
>> public String getHelp() {
>> - return "Usage: " + CLI.CMD + " " + getName() + " -encoding
>> charset -model model -data testData";
>> + return "Usage: " + CLI.CMD + " " + getName() + " " +
>> ArgumentParser.createUsage(Parameters.class);
>> }
>>
>> public void run(String[] args) {
>> - if (args.length != 6) {
>> - System.out.println(getHelp());
>> +
>> + if (!ArgumentParser.validateArguments(args, Parameters.class)) {
>> + System.err.println(getHelp());
>> throw new TerminateToolException(1);
>> }
>>
>> - Charset encoding = CmdLineUtil.getEncodingParameter(args);
>> + Parameters params = ArgumentParser.parse(args, Parameters.class);
>> +
>> + Charset encoding = Charset.forName(params.getEncoding());
>>
>> if (encoding == null) {
>> System.out.println(getHelp());
>> throw new TerminateToolException(1);
>> }
>>
>> - SentenceModel model = new SentenceModelLoader().load(new
>> File(CmdLineUtil.getParameter("-model", args)));
>> + SentenceModel model = new SentenceModelLoader().load(new
>> File(params.getModel()));
>>
>> - File trainingDataInFile = new
>> File(CmdLineUtil.getParameter("-data", args));
>> + File trainingDataInFile = new File(params.getData());
>> CmdLineUtil.checkInputFile("Training Data", trainingDataInFile);
>>
>> opennlp.tools.sentdetect.SentenceDetectorEvaluator evaluator =
>>
>>
>
Re: svn commit: r1145449 - in /incubator/opennlp/trunk/opennlp-tools/src/main/java/opennlp/tools/cmdline/sentdetect:
SentenceDetectorCrossValidatorTool.java SentenceDetectorEvaluatorTool.java
Posted by Jörn Kottmann <ko...@gmail.com>.
Hi William,
the code looks good, I think we should improve the Argument Parser also
a little
to make it more convenient to use.
You need to write this:
File trainingDataInFile = new File(params.getData());
I will extend to Argument Parser to also understand "File" as a return
type then you can write:
File trainingDataInFile = params.getData();
In the long term I would like to do much more parameter checking and
validation
with annotations, because this a good way we to avoid code duplication.
Jörn
On 7/12/11 6:10 AM, colen@apache.org wrote:
> Author: colen
> Date: Tue Jul 12 04:10:51 2011
> New Revision: 1145449
>
> URL: http://svn.apache.org/viewvc?rev=1145449&view=rev
> Log:
> OPENNLP-221 Refactored the evaluator and cross validator CLI tools of the SentenceDetector to use the Parameters interface. Please review. If it is OK I will do the same with the other tools
>
> Modified:
> incubator/opennlp/trunk/opennlp-tools/src/main/java/opennlp/tools/cmdline/sentdetect/SentenceDetectorCrossValidatorTool.java
> incubator/opennlp/trunk/opennlp-tools/src/main/java/opennlp/tools/cmdline/sentdetect/SentenceDetectorEvaluatorTool.java
>
> Modified: incubator/opennlp/trunk/opennlp-tools/src/main/java/opennlp/tools/cmdline/sentdetect/SentenceDetectorCrossValidatorTool.java
> URL: http://svn.apache.org/viewvc/incubator/opennlp/trunk/opennlp-tools/src/main/java/opennlp/tools/cmdline/sentdetect/SentenceDetectorCrossValidatorTool.java?rev=1145449&r1=1145448&r2=1145449&view=diff
> ==============================================================================
> --- incubator/opennlp/trunk/opennlp-tools/src/main/java/opennlp/tools/cmdline/sentdetect/SentenceDetectorCrossValidatorTool.java (original)
> +++ incubator/opennlp/trunk/opennlp-tools/src/main/java/opennlp/tools/cmdline/sentdetect/SentenceDetectorCrossValidatorTool.java Tue Jul 12 04:10:51 2011
> @@ -19,7 +19,11 @@ package opennlp.tools.cmdline.sentdetect
>
> import java.io.File;
> import java.io.IOException;
> +import java.nio.charset.Charset;
>
> +import opennlp.tools.cmdline.ArgumentParser;
> +import opennlp.tools.cmdline.ArgumentParser.ParameterDescription;
> +import opennlp.tools.cmdline.BasicTrainingParametersI;
> import opennlp.tools.cmdline.CLI;
> import opennlp.tools.cmdline.CmdLineTool;
> import opennlp.tools.cmdline.CmdLineUtil;
> @@ -30,6 +34,16 @@ import opennlp.tools.util.ObjectStream;
> import opennlp.tools.util.eval.FMeasure;
>
> public final class SentenceDetectorCrossValidatorTool implements CmdLineTool {
> +
> + /**
> + * Create a list of expected parameters.
> + */
> + interface Parameters extends BasicTrainingParametersI {
> +
> + @ParameterDescription(valueName = "data")
> + String getData();
> +
> + }
>
> public String getName() {
> return "SentenceDetectorCrossValidator";
> @@ -40,40 +54,37 @@ public final class SentenceDetectorCross
> }
>
> public String getHelp() {
> - return "Usage: " + CLI.CMD + " " + getName() + " " + TrainingParameters.getParameterUsage() +
> - " -data trainData\n" +
> - TrainingParameters.getDescription();
> + return "Usage: " + CLI.CMD + " " + getName() + " " + ArgumentParser.createUsage(Parameters.class);
> }
>
> public void run(String[] args) {
> - if (args.length< 5) {
> - System.out.println(getHelp());
> +
> + if (!ArgumentParser.validateArguments(args, Parameters.class)) {
> + System.err.println(getHelp());
> throw new TerminateToolException(1);
> }
>
> - TrainingParameters parameters = new TrainingParameters(args);
> + Parameters params = ArgumentParser.parse(args, Parameters.class);
>
> - if(!parameters.isValid()) {
> - System.out.println(getHelp());
> - throw new TerminateToolException(1);
> - }
>
> opennlp.tools.util.TrainingParameters mlParams =
> - CmdLineUtil.loadTrainingParameters(CmdLineUtil.getParameter("-params", args), false);
> + CmdLineUtil.loadTrainingParameters(params.getParams(), false);
>
> - File trainingDataInFile = new File(CmdLineUtil.getParameter("-data", args));
> + File trainingDataInFile = new File(params.getData());
> CmdLineUtil.checkInputFile("Training Data", trainingDataInFile);
>
> + Charset encoding = Charset.forName(params.getEncoding());
> +
> ObjectStream<SentenceSample> sampleStream = SentenceDetectorTrainerTool.openSampleData("Training Data",
> - trainingDataInFile, parameters.getEncoding());
> + trainingDataInFile, encoding);
>
> SDCrossValidator validator;
>
> if (mlParams == null) {
> - validator = new SDCrossValidator(parameters.getLanguage(), parameters.getCutoff(), parameters.getNumberOfIterations());
> + validator = new SDCrossValidator(params.getLang(), params.getCutoff(), params.getIterations());
> }
> else {
> - validator = new SDCrossValidator(parameters.getLanguage(), mlParams);
> + validator = new SDCrossValidator(params.getLang(), mlParams);
> }
>
> try {
>
> Modified: incubator/opennlp/trunk/opennlp-tools/src/main/java/opennlp/tools/cmdline/sentdetect/SentenceDetectorEvaluatorTool.java
> URL: http://svn.apache.org/viewvc/incubator/opennlp/trunk/opennlp-tools/src/main/java/opennlp/tools/cmdline/sentdetect/SentenceDetectorEvaluatorTool.java?rev=1145449&r1=1145448&r2=1145449&view=diff
> ==============================================================================
> --- incubator/opennlp/trunk/opennlp-tools/src/main/java/opennlp/tools/cmdline/sentdetect/SentenceDetectorEvaluatorTool.java (original)
> +++ incubator/opennlp/trunk/opennlp-tools/src/main/java/opennlp/tools/cmdline/sentdetect/SentenceDetectorEvaluatorTool.java Tue Jul 12 04:10:51 2011
> @@ -21,6 +21,9 @@ import java.io.File;
> import java.io.IOException;
> import java.nio.charset.Charset;
>
> +import opennlp.tools.cmdline.ArgumentParser;
> +import opennlp.tools.cmdline.ArgumentParser.OptionalParameter;
> +import opennlp.tools.cmdline.ArgumentParser.ParameterDescription;
> import opennlp.tools.cmdline.CLI;
> import opennlp.tools.cmdline.CmdLineTool;
> import opennlp.tools.cmdline.CmdLineUtil;
> @@ -31,6 +34,22 @@ import opennlp.tools.sentdetect.Sentence
> import opennlp.tools.util.ObjectStream;
>
> public final class SentenceDetectorEvaluatorTool implements CmdLineTool {
> +
> + /**
> + * Create a list of expected parameters.
> + */
> + interface Parameters {
> +
> + @ParameterDescription(valueName = "charsetName", description = "specifies the encoding which should be used for reading and writing text")
> + @OptionalParameter(defaultValue="UTF-8")
> + String getEncoding();
> +
> + @ParameterDescription(valueName = "model")
> + String getModel();
> +
> + @ParameterDescription(valueName = "data")
> + String getData();
> + }
>
> public String getName() {
> return "SentenceDetectorEvaluator";
> @@ -41,25 +60,28 @@ public final class SentenceDetectorEvalu
> }
>
> public String getHelp() {
> - return "Usage: " + CLI.CMD + " " + getName() + " -encoding charset -model model -data testData";
> + return "Usage: " + CLI.CMD + " " + getName() + " " + ArgumentParser.createUsage(Parameters.class);
> }
>
> public void run(String[] args) {
> - if (args.length != 6) {
> - System.out.println(getHelp());
> +
> + if (!ArgumentParser.validateArguments(args, Parameters.class)) {
> + System.err.println(getHelp());
> throw new TerminateToolException(1);
> }
>
> - Charset encoding = CmdLineUtil.getEncodingParameter(args);
> + Parameters params = ArgumentParser.parse(args, Parameters.class);
> +
> + Charset encoding = Charset.forName(params.getEncoding());
>
> if (encoding == null) {
> System.out.println(getHelp());
> throw new TerminateToolException(1);
> }
>
> - SentenceModel model = new SentenceModelLoader().load(new File(CmdLineUtil.getParameter("-model", args)));
> + SentenceModel model = new SentenceModelLoader().load(new File(params.getModel()));
>
> - File trainingDataInFile = new File(CmdLineUtil.getParameter("-data", args));
> + File trainingDataInFile = new File(params.getData());
> CmdLineUtil.checkInputFile("Training Data", trainingDataInFile);
>
> opennlp.tools.sentdetect.SentenceDetectorEvaluator evaluator =
>
>