public AnnotatedSentence.AnnotatedSentence Convert(ParseTreeDrawable parseTree, List <TreeEnsembleModel> models)
 {
     if (parseTree != null)
     {
         var annotatedSentence     = new AnnotatedSentence.AnnotatedSentence();
         var nodeDrawableCollector = new NodeDrawableCollector((ParseNodeDrawable)parseTree.GetRoot(), new IsLeafNode());
         var leafList         = nodeDrawableCollector.Collect();
         var wordNodePairList = new List <WordNodePair>();
         for (var i = 0; i < leafList.Count; i++)
         {
             var parseNode    = leafList[i];
             var wordNodePair = new WordNodePair(parseNode, i + 1);
             wordNodePair.UpdateNode();
             if (wordNodePair.GetNode().GetParent() != null && wordNodePair.GetNode().GetParent().NumberOfChildren() == 1)
             {
                 wordNodePair.UpdateNode();
                 Console.WriteLine("check this");
                 return(null);
             }
             annotatedSentence.AddWord(wordNodePair.GetWord());
             wordNodePairList.Add(wordNodePair);
         }
         ConstructDependenciesFromTree(wordNodePairList, models);
         return(annotatedSentence);
     }
     return(null);
 }
예제 #2
0
        private int CompareTo(WordNodePair first, WordNodePair second)
        {
            var firstUniversalDependency  = first.GetUniversalDependency();
            var secondUniversalDependency = second.GetUniversalDependency();

            if (_specialsMap.ContainsKey(firstUniversalDependency) && _specialsMap.ContainsKey(secondUniversalDependency))
            {
                return(_specialsMap[firstUniversalDependency].CompareTo(_specialsMap[secondUniversalDependency]));
            }
            else if (_specialsMap.ContainsKey(firstUniversalDependency))
            {
                return(1);
            }
            else if (_specialsMap.ContainsKey(secondUniversalDependency))
            {
                return(-1);
            }
            return(0);
        }
 private int UpdateUnionCandidateLists(List <WordNodePair> list, WordNodePair wordNodePair)
 {
     if (list.Count < 2)
     {
         if (list.Count == 1 && list[0].GetNo() > wordNodePair.GetNo())
         {
             list.Insert(0, wordNodePair);
             return(0);
         }
         else
         {
             list.Add(wordNodePair);
             return(list.Count - 1);
         }
     }
     else
     {
         if (list[0].GetNo() > wordNodePair.GetNo())
         {
             list.Insert(0, wordNodePair);
             return(0);
         }
         else if (list[list.Count - 1].GetNo() < wordNodePair.GetNo())
         {
             list.Add(wordNodePair);
             return(list.Count - 1);
         }
         else
         {
             for (var i = 0; i < list.Count - 1; i++)
             {
                 if (wordNodePair.GetNo() > list[i].GetNo() && wordNodePair.GetNo() < list[i + 1].GetNo())
                 {
                     list.Insert(i + 1, wordNodePair);
                     return(i + 1);
                 }
             }
         }
     }
     return(-1);
 }
        private List <WordNodePair> SetOfNodesToBeMergedOntoNode(List <WordNodePair> wordNodePairs, WordNodePair headWord)
        {
            var list = new List <WordNodePair>();

            for (var i = 0; i < wordNodePairs.Count; i++)
            {
                var wordNodePair = wordNodePairs[i];
                var toWordIndex  = wordNodePair.GetTo() - 1;
                if (!wordNodePair.IsDoneForConnect())
                {
                    if (NoIncomingNodes(wordNodePairs, i) && toWordIndex == headWord.GetNo())
                    {
                        UpdateUnionCandidateLists(list, wordNodePair);
                    }
                }
            }
            return(list);
        }