Exemplo n.º 1
0
        /// <summary>
        /// Converts an array of tokens to a dependency structure
        /// </summary>
        /// <param name="tokens"> tokens an array of tokens </param>
        /// <param name="dataFormatSpecification"> a data format specification </param>
        /// <returns> a dependency structure </returns>
        /// <exception cref="MaltChainedException"> </exception>
//JAVA TO C# CONVERTER WARNING: Method 'throws' clauses are not available in .NET:
//ORIGINAL LINE: public org.maltparser.core.syntaxgraph.DependencyStructure toDependencyStructure(String[] tokens, org.maltparser.core.io.dataformat.DataFormatSpecification dataFormatSpecification) throws org.maltparser.core.exception.MaltChainedException
        public virtual IDependencyStructure toDependencyStructure(string[] tokens, DataFormatSpecification dataFormatSpecification)
        {
            // Creates a symbol table handler
            SymbolTableHandler symbolTables = new HashSymbolTableHandler();

            // Initialize data format instance
            DataFormatInstance dataFormatInstance = dataFormatSpecification.createDataFormatInstance(symbolTables, "none");

            // Creates a dependency graph
            if (tokens == null || tokens.Length == 0)
            {
                throw new MaltChainedException("Nothing to convert. ");
            }
            IDependencyStructure outputGraph = new DependencyGraph(symbolTables);

            for (int i = 0; i < tokens.Length; i++)
            {
                IEnumerator <ColumnDescription> columns = dataFormatInstance.GetEnumerator();
                DependencyNode node  = outputGraph.AddDependencyNode(i + 1);
                string[]       items = tokens[i].Split("\t", true);
                Edge           edge  = null;
                for (int j = 0; j < items.Length; j++)
                {
//JAVA TO C# CONVERTER TODO TASK: Java iterators are only converted within the context of 'while' and 'for' loops:
                    if (columns.hasNext())
                    {
//JAVA TO C# CONVERTER TODO TASK: Java iterators are only converted within the context of 'while' and 'for' loops:
                        ColumnDescription column = columns.next();
                        if (column.Category == ColumnDescription.INPUT && node != null)
                        {
                            outputGraph.AddLabel(node, column.Name, items[j]);
                        }
                        else if (column.Category == ColumnDescription.HEAD)
                        {
                            if (column.Category != ColumnDescription.IGNORE && !items[j].Equals("_"))
                            {
                                edge = ((IDependencyStructure)outputGraph).AddDependencyEdge(int.Parse(items[j]), i + 1);
                            }
                        }
                        else if (column.Category == ColumnDescription.DEPENDENCY_EDGE_LABEL && edge != null)
                        {
                            outputGraph.AddLabel(edge, column.Name, items[j]);
                        }
                    }
                }
            }
            outputGraph.SetDefaultRootEdgeLabel(outputGraph.SymbolTables.getSymbolTable("DEPREL"), "ROOT");
            return(outputGraph);
        }
Exemplo n.º 2
0
        public static void Main(string[] args)
        {
            long   startTime = DateTimeHelper.CurrentUnixTimeMillis();
            string inFile    = args[0];
            string charSet   = "UTF-8";

            StreamReader reader = null;

            try
            {
                DataFormat dataFormat = DataFormat.ParseDataFormatXmLFile("/appdata/dataformat/conllx.xml");
                reader = new StreamReader(new FileStream(inFile, FileMode.Open, FileAccess.Read), charSet);
                int sentenceCounter = 0;
                while (true)
                {
                    string[] goldTokens = readSentences(reader);
                    if (goldTokens.Length == 0)
                    {
                        break;
                    }
                    sentenceCounter++;
                    SymbolTableHandler   newTable = new HashSymbolTableHandler();
                    IDependencyStructure newGraph = new LWDependencyGraph(dataFormat, newTable, goldTokens, "ROOT");
                    //	            SymbolTableHandler oldTable = new HashSymbolTableHandler();
                    //	            DependencyStructure oldGraph = getOldDependencyGraph(dataFormat, oldTable, goldTokens);
                    int  newGraphINT;
                    int  oldGraphINT;
                    bool newGraphBOOL;
                    bool oldGraphBOOL;
                    SortedSet <LWNode>         newGraphSortedSet;
                    SortedSet <DependencyNode> oldGraphSortedSet;

                    //	            for (int i = 0; i < newGraph.nDependencyNode(); i++) {
                    //	                newGraphINT = newGraph.getDependencyNode(i).getIndex();
                    //	                oldGraphINT = oldGraph.getDependencyNode(i).getIndex();


                    //	                newGraphINT = newGraph.getNode(i).getHeadIndex();
                    //	                newGraphINT = newGraph.getDependencyNode(i).getHead() != null ? newGraph.getDependencyNode(i).getHead().getIndex() : -1;
                    //	                oldGraphINT = oldGraph.getDependencyNode(i).getHead() != null ? oldGraph.getDependencyNode(i).getHead().getIndex() : -1;


                    //	                newGraphINT = newGraph.getDependencyNode(i).getPredecessor() != null ? newGraph.getDependencyNode(i).getPredecessor().getIndex() : -1;
                    //	                oldGraphINT = oldGraph.getDependencyNode(i).getPredecessor() != null ? oldGraph.getDependencyNode(i).getPredecessor().getIndex() : -1;

                    //	                newGraphINT = newGraph.getTokenNode(i).getSuccessor() != null ? newGraph.getTokenNode(i).getSuccessor().getIndex() : -1;
                    //	                oldGraphINT = oldGraph.getTokenNode(i).getSuccessor() != null ? oldGraph.getTokenNode(i).getSuccessor().getIndex() : -1;

                    //	                newGraphINT = newGraph.getDependencyNode(i).getLeftDependentCount();
                    //	                oldGraphINT = oldGraph.getDependencyNode(i).getLeftDependentCount();
                    //
                    //	                newGraphINT = newGraph.getDependencyNode(i).getRightDependentCount();
                    //	                oldGraphINT = oldGraph.getDependencyNode(i).getRightDependentCount();

                    //	                newGraphINT = newGraph.getDependencyNode(i).getRightmostDependent() != null ? newGraph.getNode(i).getRightmostDependent().getIndex() : -1;
                    //	                oldGraphINT = oldGraph.getDependencyNode(i).getRightmostDependent() != null ? oldGraph.getDependencyNode(i).getRightmostDependent	().getIndex() : -1;
                    //	                newGraphINT = newGraph.getDependencyNode(i).findComponent().getIndex();
                    //	                oldGraphINT = oldGraph.getDependencyNode(i).findComponent().getIndex();
                    //
                    //	                newGraphINT = newGraph.getDependencyNode(i).getRank();
                    //	                oldGraphINT = oldGraph.getDependencyNode(i).getRank();


                    //	                newGraphBOOL = newGraph.getDependencyNode(i).isRoot();
                    //	                oldGraphBOOL = oldGraph.getDependencyNode(i).isRoot();

                    //	                newGraphBOOL = newGraph.getDependencyNode(i).hasRightDependent();
                    //	                oldGraphBOOL = oldGraph.getDependencyNode(i).hasRightDependent();

                    //	                newGraphBOOL = newGraph.getDependencyNode(i).hasHead();
                    //	                oldGraphBOOL = oldGraph.getDependencyNode(i).hasHead();
                    //	                if (newGraphBOOL != oldGraphBOOL) {
                    //	                    System.out.println(newGraphBOOL + "\t" + oldGraphBOOL);
                    //	                }

                    //		            newGraphSortedSet = newGraph.getNode(i).getRightDependents();
                    //		            oldGraphSortedSet = oldGraph.getDependencyNode(i).getLeftDependents();
                    //		            if (newGraphSortedSet.size() != oldGraphSortedSet.size()) {
                    //		                System.out.println(newGraphSortedSet + "\t" + oldGraphSortedSet);
                    //		            } else {
                    //		                Iterator<DependencyNode> it = oldGraphSortedSet.iterator();
                    //		                for (Node n : newGraphSortedSet) {
                    //		                    DependencyNode o = it.next();
                    //		                    if (n.getIndex() != o.getIndex()) {
                    //		                        System.out.println(n.getIndex() + "\t" + o.getIndex());
                    //		                    }
                    //		                }
                    //		            }
                    //	                if (newGraphINT != oldGraphINT) {
                    //	                    System.out.println(newGraphINT + "\t" + oldGraphINT);
                    //	                }
                    //	            }


                    //	            System.out.println(oldGraph);
                }
            }
            catch (IOException e)
            {
                Console.WriteLine(e.ToString());
                Console.Write(e.StackTrace);
            }
            catch (LWGraphException e)
            {
                Console.WriteLine(e.ToString());
                Console.Write(e.StackTrace);
            }
            catch (MaltChainedException e)
            {
                Console.WriteLine(e.ToString());
                Console.Write(e.StackTrace);
            }
            finally
            {
                if (reader != null)
                {
                    try
                    {
                        reader.Close();
                    }
                    catch (IOException e)
                    {
                        Console.WriteLine(e.ToString());
                        Console.Write(e.StackTrace);
                    }
                }
            }
            long elapsed = DateTimeHelper.CurrentUnixTimeMillis() - startTime;

            Console.WriteLine("Finished init basic   : " + (new Formatter()).format("%02d:%02d:%02d", elapsed / 3600000, elapsed % 3600000 / 60000, elapsed % 60000 / 1000) + " (" + elapsed + " ms)");
        }