public static Parse[] parseLine(string line, opennlp.tools.parser.Parser parser, int numParses) { line = untokenizedParenPattern1.matcher(line).replaceAll("$1 $2"); line = untokenizedParenPattern2.matcher(line).replaceAll("$1 $2"); StringTokenizer str = new StringTokenizer(line); StringBuilder sb = new StringBuilder(); IList <string> tokens = new List <string>(); while (str.hasMoreTokens()) { string tok = str.nextToken(); tokens.Add(tok); sb.Append(tok).Append(" "); } string text = sb.Substring(0, sb.Length - 1); Parse p = new Parse(text, new Span(0, text.Length), AbstractBottomUpParser.INC_NODE, 0, 0); int start = 0; int i = 0; for (IEnumerator <string> ti = tokens.GetEnumerator(); ti.MoveNext(); i++) { string tok = ti.Current; p.insert(new Parse(text, new Span(start, start + tok.Length), AbstractBottomUpParser.TOK_NODE, 0, i)); start += tok.Length + 1; } Parse[] parses; if (numParses == 1) { parses = new Parse[] { parser.parse(p) }; } else { parses = parser.parse(p, numParses); } return(parses); }
public override void run(string[] args) { if (args.Length < 1) { Console.WriteLine(Help); } else { ParserModel model = (new ParserModelLoader()).load(new File(args[args.Length - 1])); int?beamSize = CmdLineUtil.getIntParameter("-bs", args); if (beamSize == null) { beamSize = AbstractBottomUpParser.defaultBeamSize; } int? numParses = CmdLineUtil.getIntParameter("-k", args); bool showTopK; if (numParses == null) { numParses = 1; showTopK = false; } else { showTopK = true; } double?advancePercentage = CmdLineUtil.getDoubleParameter("-ap", args); if (advancePercentage == null) { advancePercentage = AbstractBottomUpParser.defaultAdvancePercentage; } opennlp.tools.parser.Parser parser = ParserFactory.create(model, beamSize.Value, advancePercentage.Value); ObjectStream <string> lineStream = new PlainTextByLineStream(new InputStreamReader(Console.OpenStandardInput)); PerformanceMonitor perfMon = new PerformanceMonitor(System.err, "sent"); perfMon.start(); try { string line; while ((line = lineStream.read()) != null) { if (line.Length == 0) { Console.WriteLine(); } else { Parse[] parses = parseLine(line, parser, numParses.Value); for (int pi = 0, pn = parses.Length; pi < pn; pi++) { if (showTopK) { Console.Write(pi + " " + parses[pi].Prob + " "); } parses[pi].show(); perfMon.incrementCounter(); } } } } catch (IOException e) { CmdLineUtil.handleStdinIoError(e); } perfMon.stopAndPrintFinalResult(); } }