示例#1
0
        virtual public void SetExtents(Context[] extents)
        {
            Util.HashList <int, Context> entities = new Util.HashList <int, Context>();
            List <Context> singletons             = new List <Context>();

            for (int extentIndex = 0; extentIndex < extents.Length; extentIndex++)
            {
                Context currentExtent = extents[extentIndex];
                //System.err.println("NumberModel.setExtents: ec("+ec.getId()+") "+ec.toText());
                if (currentExtent.Id != -1)
                {
                    entities.Put(currentExtent.Id, currentExtent);
                }
                else
                {
                    singletons.Add(currentExtent);
                }
            }
            List <Context> singles = new List <Context>();
            List <Context> plurals = new List <Context>();

            // coref entities
            foreach (int key in entities.Keys)
            {
                List <Context> entityContexts = entities[key];
                NumberEnum     number         = GetNumber(entityContexts);
                if (number == NumberEnum.Singular)
                {
                    singles.AddRange(entityContexts);
                }
                else if (number == NumberEnum.Plural)
                {
                    plurals.AddRange(entityContexts);
                }
            }
            // non-coref entities.
            foreach (Context currentContext in singletons)
            {
                NumberEnum number = GetNumber(currentContext);
                if (number == NumberEnum.Singular)
                {
                    singles.Add(currentContext);
                }
                else if (number == NumberEnum.Plural)
                {
                    plurals.Add(currentContext);
                }
            }

            foreach (Context currentContext in singles)
            {
                AddEvent(NumberEnum.Singular.ToString(), currentContext);
            }

            foreach (Context currentContext in plurals)
            {
                AddEvent(NumberEnum.Plural.ToString(), currentContext);
            }
        }
示例#2
0
        virtual public void SetExtents(Context[] extents)
        {
            var entities   = new Util.HashList <int, Context>();
            var singletons = new List <Context>();

            for (var extentIndex = 0; extentIndex < extents.Length; extentIndex++)
            {
                var currentExtent = extents[extentIndex];
                if (currentExtent.Id != -1)
                {
                    entities.Put(currentExtent.Id, currentExtent);
                }
                else
                {
                    singletons.Add(currentExtent);
                }
            }
            var singles = new List <Context>();
            var plurals = new List <Context>();

            // coref entities
            foreach (var key in entities.Keys)
            {
                var entityContexts = entities[key];
                var number         = GetNumber(entityContexts);
                if (number == NumberEnum.Singular)
                {
                    singles.AddRange(entityContexts);
                }
                else if (number == NumberEnum.Plural)
                {
                    plurals.AddRange(entityContexts);
                }
            }
            // non-coref entities.
            foreach (var currentContext in singletons)
            {
                var number = GetNumber(currentContext);
                if (number == NumberEnum.Singular)
                {
                    singles.Add(currentContext);
                }
                else if (number == NumberEnum.Plural)
                {
                    plurals.Add(currentContext);
                }
            }

            foreach (var currentContext in singles)
            {
                AddEvent(NumberEnum.Singular.ToString(), currentContext);
            }

            foreach (var currentContext in plurals)
            {
                AddEvent(NumberEnum.Plural.ToString(), currentContext);
            }
        }
示例#3
0
		virtual public void SetExtents(Context[] extents)
		{
            var entities = new Util.HashList<int, Context>();
            var singletons = new List<Context>();
			for (int extentIndex = 0; extentIndex < extents.Length; extentIndex++)
			{
				Context currentExtent = extents[extentIndex];
				if (currentExtent.Id != -1)
				{
					entities.Put(currentExtent.Id, currentExtent);
				}
				else
				{
					singletons.Add(currentExtent);
				}
			}
            var singles = new List<Context>();
            var plurals = new List<Context>();
			// coref entities
			foreach (int key in entities.Keys)
            {
				List<Context> entityContexts = entities[key];
				NumberEnum number = GetNumber(entityContexts);
				if (number == NumberEnum.Singular)
				{
					singles.AddRange(entityContexts);
				}
				else if (number == NumberEnum.Plural)
				{
					plurals.AddRange(entityContexts);
				}
			}
			// non-coref entities.
			foreach (Context currentContext in singletons)
            {
				NumberEnum number = GetNumber(currentContext);
				if (number == NumberEnum.Singular)
				{
					singles.Add(currentContext);
				}
				else if (number == NumberEnum.Plural)
				{
					plurals.Add(currentContext);
				}
			}
			
			foreach (Context currentContext in singles)
            {
				AddEvent(NumberEnum.Singular.ToString(), currentContext);
			}
			
            foreach (Context currentContext in plurals)
            {
				AddEvent(NumberEnum.Plural.ToString(), currentContext);
			}
			
		}
示例#4
0
        /// <summary>
        /// Constructs a mappng between the specified entities and the names associated with these entities.
        /// </summary>
        /// <param name="entities">
        /// A mapping between a key and a list of mentions.
        /// </param>
        /// <returns>
        /// a mapping between each key in the specified entity map and the name types associated with the each mention of that entity.
        /// </returns>
        private Dictionary <int, Util.Set <string> > ConstructNameSets(Util.HashList <int, Context> entities)
        {
            var nameSets = new Dictionary <int, Util.Set <string> >();

            foreach (int key in entities.Keys)
            {
                List <Context> entityContexts = entities[key];
                nameSets[key] = ConstructNameSet(entityContexts);
            }
            return(nameSets);
        }
        /// <summary>
        /// Constructs a mapping between the specified entities and their head set.
        /// </summary>
        /// <param name="entities">
        /// Mapping between a key and a list of mentions which compose an entity.
        /// </param>
        /// <returns>
        /// a mapping between the keys of the secified entity mapping and the head set
        /// generatated from the mentions associated with that key.
        /// </returns>
        private Dictionary <int, Util.Set <string> > ConstructHeadSets(Util.HashList <int, Context> entities)
        {
            var headSets = new Dictionary <int, Util.Set <string> >();

            foreach (var key in entities.Keys)
            {
                var entityContexts = entities[key];
                headSets[key] = ConstructHeadSet(entityContexts);
            }
            return(headSets);
        }
示例#6
0
 virtual public void SetExtents(Context[] extents)
 {
     var entities = new Util.HashList<int, Context>();
     var singletons = new List<Context>();
     for (int currentExtent = 0; currentExtent < extents.Length; currentExtent++)
     {
         Context extent = extents[currentExtent];
         if (extent.Id != -1)
         {
             entities.Put(extent.Id, extent);
         }
         else
         {
             singletons.Add(extent);
         }
     }
     var males = new List<Context>();
     var females = new List<Context>();
     var eunuches = new List<Context>();
     //coref entities
     foreach (int key in entities.Keys)
    {
         List<Context> entityContexts = entities[key];
         GenderEnum gender = GetGender(entityContexts);
         if (gender != null)
         {
             if (gender == GenderEnum.Male)
             {
                 males.AddRange(entityContexts);
             }
             else if (gender == GenderEnum.Female)
             {
                females.AddRange(entityContexts);
             }
             else if (gender == GenderEnum.Neuter)
             {
                 eunuches.AddRange(entityContexts);
             }
         }
     }
     //non-coref entities
     foreach (Context entityContext in singletons)
     {
         GenderEnum gender = GetGender(entityContext);
         if (gender == GenderEnum.Male)
         {
             males.Add(entityContext);
         }
         else if (gender == GenderEnum.Female)
         {
             females.Add(entityContext);
         }
         else if (gender == GenderEnum.Neuter)
         {
             eunuches.Add(entityContext);
         }
     }
     
     foreach (Context entityContext in males)
     {
         AddEvent(GenderEnum.Male.ToString(), entityContext);
     }
     
     foreach (Context entityContext in females)
     {
         AddEvent(GenderEnum.Female.ToString(), entityContext);
     }
     
     foreach (Context entityContext in eunuches)
     {
         AddEvent(GenderEnum.Neuter.ToString(), entityContext);
     }
 }
示例#7
0
        public virtual void SetExtents(Context[] extents)
        {
            var entities = new Util.HashList <int, Context>();
            // Extents which are not in a coreference chain.
            var singletons = new List <Context>();
            var allExtents = new List <Context>();

            //populate data structures
            foreach (Context currentExtent in extents)
            {
                if (currentExtent.Id == -1)
                {
                    singletons.Add(currentExtent);
                }
                else
                {
                    entities.Put(currentExtent.Id, currentExtent);
                }
                allExtents.Add(currentExtent);
            }

            int allExtentsIndex = 0;
            Dictionary <int, Util.Set <string> > headSets = ConstructHeadSets(entities);
            Dictionary <int, Util.Set <string> > nameSets = ConstructNameSets(entities);

            foreach (int key in entities.Keys)
            {
                Util.Set <string> entityNameSet = nameSets[key];
                if (entityNameSet.Count == 0)
                {
                    continue;
                }

                List <Context>     entityContexts = entities[key];
                Util.Set <Context> exclusionSet   = ConstructExclusionSet(key, entities, headSets, nameSets, singletons);

                //if (entityContexts.Count == 1)
                //{
                //}
                for (int firstEntityContextIndex = 0; firstEntityContextIndex < entityContexts.Count; firstEntityContextIndex++)
                {
                    Context firstEntityContext = entityContexts[firstEntityContextIndex];
                    //if (isPronoun(ec1)) {
                    //  continue;
                    //}
                    for (int secondEntityContextIndex = firstEntityContextIndex + 1; secondEntityContextIndex < entityContexts.Count; secondEntityContextIndex++)
                    {
                        Context secondEntityContext = entityContexts[secondEntityContextIndex];
                        //if (isPronoun(ec2)) {
                        //  continue;
                        //}
                        AddEvent(true, firstEntityContext, secondEntityContext);
                        int startIndex = allExtentsIndex;
                        do
                        {
                            Context compareEntityContext = allExtents[allExtentsIndex];
                            allExtentsIndex = (allExtentsIndex + 1) % allExtents.Count;
                            if (!exclusionSet.Contains(compareEntityContext))
                            {
                                if (DebugOn)
                                {
                                    System.Console.Error.WriteLine(firstEntityContext.ToString() + " " + string.Join(",", entityNameSet.ToArray()) + " " + compareEntityContext.ToString() + " " + nameSets[compareEntityContext.Id]);
                                }
                                AddEvent(false, firstEntityContext, compareEntityContext);
                                break;
                            }
                        }while (allExtentsIndex != startIndex);
                    }
                }
            }
        }
示例#8
0
        /// <summary>
        /// Constructs a set of entities which may be semantically compatible with the entity indicated by
        /// the specified entityKey.
        /// </summary>
        /// <param name="entityKey">
        /// The key of the entity for which the set is being constructed.
        /// </param>
        /// <param name="entities">
        /// A mapping between entity keys and their mentions.
        /// </param>
        /// <param name="headSets">
        /// A mapping between entity keys and their head sets.
        /// </param>
        /// <param name="nameSets">
        /// A mapping between entity keys and their name sets.
        /// </param>
        /// <param name="singletons">
        /// A list of all entities which consists of a single mention.
        /// </param>
        /// <returns>
        /// A set of mentions for all the entities which might be semantically compatible
        /// with entity indicated by the specified key.
        /// </returns>
        private Util.Set <Context> ConstructExclusionSet(int entityKey, Util.HashList <int, Context> entities,
                                                         Dictionary <int, Util.Set <string> > headSets, Dictionary <int, Util.Set <string> > nameSets, IEnumerable <Context> singletons)
        {
            Util.Set <Context> exclusionSet   = new Util.HashSet <Context>();
            Util.Set <string>  entityHeadSet  = headSets[entityKey];
            Util.Set <string>  entityNameSet  = nameSets[entityKey];
            List <Context>     entityContexts = entities[entityKey];

            //entities
            foreach (int key in entities.Keys)
            {
                List <Context> candidateContexts = entities[key];

                if (key == entityKey)
                {
                    exclusionSet.AddAll(candidateContexts);
                }
                else if (nameSets[key].Count == 0)
                {
                    exclusionSet.AddAll(candidateContexts);
                }
                else if (HasSameHead(entityHeadSet, headSets[key]))
                {
                    exclusionSet.AddAll(candidateContexts);
                }
                else if (HasSameNameType(entityNameSet, nameSets[key]))
                {
                    exclusionSet.AddAll(candidateContexts);
                }
                else if (HasSuperClass(entityContexts, candidateContexts))
                {
                    exclusionSet.AddAll(candidateContexts);
                }
            }

            //singles
            var singles = new List <Context>(1);

            foreach (Context currentSingleton in singletons)
            {
                singles.Clear();
                singles.Add(currentSingleton);
                if (entityHeadSet.Contains(currentSingleton.HeadTokenText.ToLower()))
                {
                    exclusionSet.Add(currentSingleton);
                }
                else if (currentSingleton.NameType == null)
                {
                    exclusionSet.Add(currentSingleton);
                }
                else if (entityNameSet.Contains(currentSingleton.NameType))
                {
                    exclusionSet.Add(currentSingleton);
                }
                else if (HasSuperClass(entityContexts, singles))
                {
                    exclusionSet.Add(currentSingleton);
                }
            }
            return(exclusionSet);
        }
        virtual public void SetExtents(Context[] extents)
        {
            var entities   = new Util.HashList <int, Context>();
            var singletons = new List <Context>();

            for (int currentExtent = 0; currentExtent < extents.Length; currentExtent++)
            {
                Context extent = extents[currentExtent];
                if (extent.Id != -1)
                {
                    entities.Put(extent.Id, extent);
                }
                else
                {
                    singletons.Add(extent);
                }
            }
            var males    = new List <Context>();
            var females  = new List <Context>();
            var eunuches = new List <Context>();

            //coref entities
            foreach (int key in entities.Keys)
            {
                List <Context> entityContexts = entities[key];
                GenderEnum     gender         = GetGender(entityContexts);
                if (gender != null)
                {
                    if (gender == GenderEnum.Male)
                    {
                        males.AddRange(entityContexts);
                    }
                    else if (gender == GenderEnum.Female)
                    {
                        females.AddRange(entityContexts);
                    }
                    else if (gender == GenderEnum.Neuter)
                    {
                        eunuches.AddRange(entityContexts);
                    }
                }
            }
            //non-coref entities
            foreach (Context entityContext in singletons)
            {
                GenderEnum gender = GetGender(entityContext);
                if (gender == GenderEnum.Male)
                {
                    males.Add(entityContext);
                }
                else if (gender == GenderEnum.Female)
                {
                    females.Add(entityContext);
                }
                else if (gender == GenderEnum.Neuter)
                {
                    eunuches.Add(entityContext);
                }
            }

            foreach (Context entityContext in males)
            {
                AddEvent(GenderEnum.Male.ToString(), entityContext);
            }

            foreach (Context entityContext in females)
            {
                AddEvent(GenderEnum.Female.ToString(), entityContext);
            }

            foreach (Context entityContext in eunuches)
            {
                AddEvent(GenderEnum.Neuter.ToString(), entityContext);
            }
        }
示例#10
0
        virtual public void SetExtents(Context[] extents)
        {
            Util.HashList <int, Context> entities = new Util.HashList <int, Context>();
            List <Context> singletons             = new List <Context>();

            for (int currentExtent = 0; currentExtent < extents.Length; currentExtent++)
            {
                Context extent = extents[currentExtent];
                //System.err.println("GenderModel.setExtents: ec("+ec.getId()+") "+ec.toText());
                if (extent.Id != -1)
                {
                    entities.Put(extent.Id, extent);
                }
                else
                {
                    singletons.Add(extent);
                }
            }
            List <Context> males    = new List <Context>();
            List <Context> females  = new List <Context>();
            List <Context> eunuches = new List <Context>();

            //coref entities
            foreach (int key in entities.Keys)
            {
                List <Context> entityContexts = entities[key];
                GenderEnum     gender         = GetGender(entityContexts);
                if (gender != null)
                {
                    if (gender == GenderEnum.Male)
                    {
                        males.AddRange(entityContexts);
                    }
                    else if (gender == GenderEnum.Female)
                    {
                        females.AddRange(entityContexts);
                    }
                    else if (gender == GenderEnum.Neuter)
                    {
                        eunuches.AddRange(entityContexts);
                    }
                }
            }
            //non-coref entities
            foreach (Context entityContext in singletons)
            {
                GenderEnum gender = GetGender(entityContext);
                if (gender == GenderEnum.Male)
                {
                    males.Add(entityContext);
                }
                else if (gender == GenderEnum.Female)
                {
                    females.Add(entityContext);
                }
                else if (gender == GenderEnum.Neuter)
                {
                    eunuches.Add(entityContext);
                }
            }

            foreach (Context entityContext in males)
            {
                AddEvent(GenderEnum.Male.ToString(), entityContext);
            }

            foreach (Context entityContext in females)
            {
                AddEvent(GenderEnum.Female.ToString(), entityContext);
            }

            foreach (Context entityContext in eunuches)
            {
                AddEvent(GenderEnum.Neuter.ToString(), entityContext);
            }
        }
        public virtual void SetExtents(Context[] extents)
        {
            Util.HashList<int, Context> entities = new Util.HashList<int, Context>();
            /** Extents which are not in a coreference chain. */
            List<Context> singletons = new List<Context>();
            List<Context> allExtents = new List<Context>();
            //populate data structures
            for (int extentIndex = 0; extentIndex < extents.Length; extentIndex++)
            {
                Context currentExtent = extents[extentIndex];
                //System.err.println("SimilarityModel: setExtents: ec("+ec.getId()+") "+ec.getNameType()+" "+ec);
                if (currentExtent.Id == -1)
                {
                    singletons.Add(currentExtent);
                }
                else
                {
                    entities.Put(currentExtent.Id, currentExtent);
                }
                allExtents.Add(currentExtent);
            }

            int allExtentsIndex = 0;
            Dictionary<int, Util.Set<string>> headSets = ConstructHeadSets(entities);
            Dictionary<int, Util.Set<string>> nameSets = ConstructNameSets(entities);

            foreach (int key in entities.Keys)
            {
                Util.Set<string> entityNameSet = nameSets[key];
                if (entityNameSet.Count == 0)
                {
                    continue;
                }

                List<Context> entityContexts = entities[key];
                Util.Set<Context> exclusionSet = ConstructExclusionSet(key, entities, headSets, nameSets, singletons);

                //if (entityContexts.Count == 1)
                //{
                //}
                for (int firstEntityContextIndex = 0; firstEntityContextIndex < entityContexts.Count; firstEntityContextIndex++)
                {
                    Context firstEntityContext = entityContexts[firstEntityContextIndex];
                    //if (isPronoun(ec1)) {
                    //  continue;
                    //}
                    for (int secondEntityContextIndex = firstEntityContextIndex + 1; secondEntityContextIndex < entityContexts.Count; secondEntityContextIndex++)
                    {
                        Context secondEntityContext = entityContexts[secondEntityContextIndex];
                        //if (isPronoun(ec2)) {
                        //  continue;
                        //}
                        AddEvent(true, firstEntityContext, secondEntityContext);
                        int startIndex = allExtentsIndex;
                        do
                        {
                            Context compareEntityContext = allExtents[allExtentsIndex];
                            allExtentsIndex = (allExtentsIndex + 1) % allExtents.Count;
                            if (!exclusionSet.Contains(compareEntityContext))
                            {
                                if (mDebugOn)
                                {
                                    System.Console.Error.WriteLine(firstEntityContext.ToString() + " " + string.Join(",", entityNameSet.ToArray()) + " " + compareEntityContext.ToString() + " " + nameSets[compareEntityContext.Id]);
                                }
                                AddEvent(false, firstEntityContext, compareEntityContext);
                                break;
                            }
                        }
                        while (allExtentsIndex != startIndex);
                    }
                }
            }
        }
示例#12
0
        public virtual void SetExtents(Context[] extents)
        {
            Util.HashList<int, Context> entities = new Util.HashList<int, Context>();
            List<Context> singletons = new List<Context>();
            for (int currentExtent = 0; currentExtent < extents.Length; currentExtent++)
            {
                Context extent = extents[currentExtent];
                //System.err.println("GenderModel.setExtents: ec("+ec.getId()+") "+ec.toText());
                if (extent.Id != -1)
                {
                    entities.Put(extent.Id, extent);
                }
                else
                {
                    singletons.Add(extent);
                }
            }
            List<Context> males = new List<Context>();
            List<Context> females = new List<Context>();
            List<Context> eunuches = new List<Context>();
            //coref entities
            foreach (int key in entities.Keys)
               {
                List<Context> entityContexts = entities[key];
                GenderEnum gender = GetGender(entityContexts);
                if (gender != null)
                {
                    if (gender == GenderEnum.Male)
                    {
                        males.AddRange(entityContexts);
                    }
                    else if (gender == GenderEnum.Female)
                    {
                       females.AddRange(entityContexts);
                    }
                    else if (gender == GenderEnum.Neuter)
                    {
                        eunuches.AddRange(entityContexts);
                    }
                }
            }
            //non-coref entities
            foreach (Context entityContext in singletons)
            {
                GenderEnum gender = GetGender(entityContext);
                if (gender == GenderEnum.Male)
                {
                    males.Add(entityContext);
                }
                else if (gender == GenderEnum.Female)
                {
                    females.Add(entityContext);
                }
                else if (gender == GenderEnum.Neuter)
                {
                    eunuches.Add(entityContext);
                }
            }

            foreach (Context entityContext in males)
            {
                AddEvent(GenderEnum.Male.ToString(), entityContext);
            }

            foreach (Context entityContext in females)
            {
                AddEvent(GenderEnum.Female.ToString(), entityContext);
            }

            foreach (Context entityContext in eunuches)
            {
                AddEvent(GenderEnum.Neuter.ToString(), entityContext);
            }
        }
示例#13
0
        public virtual void SetExtents(Context[] extents)
        {
            Util.HashList<int, Context> entities = new Util.HashList<int, Context>();
            List<Context> singletons = new List<Context>();
            for (int extentIndex = 0; extentIndex < extents.Length; extentIndex++)
            {
                Context currentExtent = extents[extentIndex];
                //System.err.println("NumberModel.setExtents: ec("+ec.getId()+") "+ec.toText());
                if (currentExtent.Id != -1)
                {
                    entities.Put(currentExtent.Id, currentExtent);
                }
                else
                {
                    singletons.Add(currentExtent);
                }
            }
            List<Context> singles = new List<Context>();
            List<Context> plurals = new List<Context>();
            // coref entities
            foreach (int key in entities.Keys)
            {
                List<Context> entityContexts = entities[key];
                NumberEnum number = GetNumber(entityContexts);
                if (number == NumberEnum.Singular)
                {
                    singles.AddRange(entityContexts);
                }
                else if (number == NumberEnum.Plural)
                {
                    plurals.AddRange(entityContexts);
                }
            }
            // non-coref entities.
            foreach (Context currentContext in singletons)
            {
                NumberEnum number = GetNumber(currentContext);
                if (number == NumberEnum.Singular)
                {
                    singles.Add(currentContext);
                }
                else if (number == NumberEnum.Plural)
                {
                    plurals.Add(currentContext);
                }
            }

            foreach (Context currentContext in singles)
            {
                AddEvent(NumberEnum.Singular.ToString(), currentContext);
            }

            foreach (Context currentContext in plurals)
            {
                AddEvent(NumberEnum.Plural.ToString(), currentContext);
            }
        }