コード例 #1
0
        /// <summary>
        /// Gets a list of related frame element
        /// </summary>
        /// <param name="relation">Type of relation to fetch</param>
        /// <param name="relationDirection">Relation direction</param>
        /// <param name="recursive">Whether or not to recursively get related frame elements</param>
        /// <returns>List of FEs</returns>
        public FrameElementSet GetRelatedFrameElements(Frame.FrameRelation relation, Frame.FrameRelationDirection relationDirection, bool recursive)
        {
            FrameElementSet relatedFEs = new FrameElementSet();

            GetRelatedFrameElements(relation, relationDirection, recursive, relatedFEs);

            return(relatedFEs);
        }
コード例 #2
0
ファイル: Frame.cs プロジェクト: hackerlank/trunk-chatbot
        /// <summary>
        /// Constructor
        /// </summary>
        /// <param name="name">Name of frame</param>
        /// <param name="definition">Definition of frame</param>
        /// <param name="id">ID of frame</param>
        public Frame(string name, string definition, int id)
        {
            _name          = name;
            _hashCode      = _name.GetHashCode();
            _definition    = definition;
            _id            = id;
            _frameElements = new FrameElementSet();
            _lexicalUnits  = new LexicalUnitSet();

            // initialize empty sets of related frames
            _relationSubFrames   = new Dictionary <FrameRelation, FrameSet>();
            _relationSuperFrames = new Dictionary <FrameRelation, FrameSet>();
            foreach (FrameRelation relation in Enum.GetValues(typeof(FrameRelation)))
            {
                // version 1.3 of framenet contains duplicate frame-frame relation mappings, so allow duplicate elements to be added to these sets
                _relationSubFrames.Add(relation, new FrameSet(false));
                _relationSuperFrames.Add(relation, new FrameSet(false));
            }
        }
コード例 #3
0
        /// <summary>
        /// Gets list of related frame elements
        /// </summary>
        /// <param name="relation">Type of relation to fetch</param>
        /// <param name="relationDirection">Relation direction</param>
        /// <param name="recursive">Whether or not to recursively get related frame elements</param>
        /// <param name="currentFEs">Current list of related FEs</param>
        private void GetRelatedFrameElements(Frame.FrameRelation relation, Frame.FrameRelationDirection relationDirection, bool recursive, FrameElementSet currentFEs)
        {
            // add sub-FEs
            if (relationDirection == Frame.FrameRelationDirection.Sub || relationDirection == Frame.FrameRelationDirection.Both)
            {
                foreach (FrameElement subFE in _relationSubFrameElements[relation])
                {
                    if (!currentFEs.Contains(subFE))
                    {
                        currentFEs.Add(subFE);

                        // recursively add sub-FEs
                        if (recursive)
                        {
                            subFE.GetRelatedFrameElements(relation, relationDirection, recursive, currentFEs);
                        }
                    }
                }
            }

            // add super-FEs
            if (relationDirection == Frame.FrameRelationDirection.Super || relationDirection == Frame.FrameRelationDirection.Both)
            {
                foreach (FrameElement superFE in _relationSuperFrameElements[relation])
                {
                    if (!currentFEs.Contains(superFE))
                    {
                        currentFEs.Add(superFE);

                        // recursively add super-FEs
                        if (recursive)
                        {
                            superFE.GetRelatedFrameElements(relation, relationDirection, recursive, currentFEs);
                        }
                    }
                }
            }
        }