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