Esempio n. 1
0
        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);
        }
Esempio n. 2
0
        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();
            }
        }