/// <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); }
/// <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)); } }
/// <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); } } } } }