private void propBankVerb_SelectedIndexChanged(object sender, EventArgs e) { propBankRoleSets.Items.Clear(); propBankArguments.Items.Clear(); verbNetClasses.Items.Clear(); verbNetRoles.Items.Clear(); currentMapping.Items.Clear(); if (propBankVerb.SelectedIndex == -1) { return; } // show propbank role sets foreach (RoleSet roleSet in _propBank.GetFrame(SelectedPropBankVerb).RoleSets) { propBankRoleSets.Items.Add(roleSet); } // show verbnet classes ShowVerbNetClassesFor(SelectedPropBankVerb); }
private void create_Click(object sender, EventArgs e) { // open issue file StreamWriter issueFile = new StreamWriter(issueFilePath.Text); // find verbs that aren't in semlink but exist in some verb class if (pbVerbsInVnNotSl.Checked) { foreach (string verb in _propBank.AllVerbs) { if (!_semLink.ContainsPropBankVerb(verb) && _verbNet.ContainsVerb(verb)) { issueFile.WriteLine(verb + " # Not mapped to VerbNet but exists in VerbNet."); } } } // find verbs mapped to a class that doesn't exist or to a class that doesn't contain them if (pbVerbsInvalidVnClass.Checked) { VerbClass verbClass; foreach (string verb in _semLink.PropBankVerbs) { foreach (string verbClassID in _semLink.GetVerbClassesForPropBankVerb(verb)) { if (!_verbNet.TryGetClass("0." + verbClassID, out verbClass)) { issueFile.WriteLine(verb + " # Mapped to non-existent class " + verbClassID + "."); } else if (!verbClass.Contains(verb)) { Set <VerbClass> inClasses = _verbNet.GetClassesFor(verb); if (inClasses.Count == 0) { issueFile.WriteLine(verb + " # Not in class " + verbClassID + " nor anywhere else."); } else { issueFile.WriteLine(verb + " # Not in class " + verbClassID + " but in some class."); } } } } } // find propbank verbs not in verbnet if (pbVerbsNotInVN.Checked) { foreach (string verb in _propBank.AllVerbs) { if (!_verbNet.ContainsVerb(verb)) { issueFile.WriteLine(verb + " # PropBank verb is not in VerbNet."); } } } // find all re- verbs that are not in semlink but whose non-prefixed form is in verbnet (we can probably map these if (propBankReVerbs.Checked) { foreach (string verb in _propBank.AllVerbs) { if (verb.StartsWith("re") && !_semLink.ContainsPropBankVerb(verb) && _verbNet.ContainsVerb(verb.Substring(2))) { issueFile.WriteLine(verb + "|" + verb.Substring(2) + " # PropBank verb present in VerbNet without prefix."); } } } // find invalid propbank roles if (invalidPropBankRoles.Checked) { foreach (string propBankRole in _semLink.PropBankRoles) { string[] parts = propBankRole.Split('.'); string verb = parts[0]; int roleSetID = int.Parse(parts[1]); int arg = int.Parse(parts[2]); if (!_propBank.Contains(verb) || !_propBank.GetFrame(verb).Contains(roleSetID) || !_propBank.GetFrame(verb).GetRoleSet(roleSetID).Contains(arg)) { issueFile.WriteLine(propBankRole); } } } // find invalid verbnet thematic roles if (invalidVnRole.Checked) { if (!includePB.Checked && !includeFN.Checked) { MessageBox.Show("Must include either PropBank or FrameNet to checked invalid VerbNet roles"); } else { // find verbnet roles that have a bad thematic role Set <string> badVerbNetRoles = new Set <string>(false); foreach (string vnRole in _semLink.GetVerbNetRoles(includePB.Checked, includeFN.Checked)) { // check if the current role is bad bool badVnRole = false; int lastPeriodIndex = vnRole.LastIndexOf("."); string classID = "0." + vnRole.Substring(0, lastPeriodIndex); string role = vnRole.Substring(lastPeriodIndex + 1); // make sure we can get to the class VerbClass verbClass; if (_verbNet.TryGetClass(classID, out verbClass)) { try { // check role VerbNetEngine.ThematicRole thematicRole = (VerbNetEngine.ThematicRole)Enum.Parse(typeof(VerbNetEngine.ThematicRole), role); if (!verbClass.ContainsThematicRole(thematicRole, true)) { badVnRole = true; } } catch (Exception) { badVnRole = true; } } else { badVnRole = true; } if (badVnRole) { badVerbNetRoles.Add(vnRole); } } // now find mappings to the bad roles Set <string> badPropBankRoles = new Set <string>(false); Set <string> badFrameElements = new Set <string>(false); foreach (string badVerbNetRole in badVerbNetRoles) { // find any propbank role mapped to the given verbnet role if (includePB.Checked) { foreach (string propBankRole in _semLink.PropBankRoles) { foreach (string vnRole in _semLink.GetVerbNetRolesForPropBank(propBankRole)) { if (vnRole == badVerbNetRole) { badPropBankRoles.Add(propBankRole); } } } } // find any frame element mapped to the given verbnet role if (includeFN.Checked) { foreach (string frameElement in _semLink.FrameElements) { foreach (string vnRole in _semLink.GetVerbNetRolesForFrameNet(frameElement)) { if (vnRole == badVerbNetRole) { badFrameElements.Add(frameElement); } } } } } // log bad propbank roles foreach (string badPropBankRole in badPropBankRoles) { issueFile.WriteLine(badPropBankRole + " # PropBank role " + badPropBankRole + " maps to invalid VerbNet role."); } // log bad frame elements foreach (string badFrameElement in badFrameElements) { issueFile.WriteLine(badFrameElement + " # Frame element " + badFrameElement + " maps to invalid VerbNet role."); } } } // frames mapped to non-existent or non-containing verbnet class if (fnFramesInvalidVnClass.Checked) { VerbClass verbClass; foreach (string frame in _semLink.FrameNetFrames) { foreach (string verbClassID in _semLink.GetVerbClassesForFrameNetFrame(frame)) { if (!_verbNet.TryGetClass("0." + verbClassID, out verbClass)) { issueFile.WriteLine(frame + " # Mapped to non-existent class " + verbClassID + "."); } else // check if class contains any of the verbal lexical units in the frame if (_frameNet.GetFrame(frame).LexicalUnits.Where(lu => lu.POS == "V" && verbClass.Contains(lu.ToString())).Count() == 0) { Set <VerbClass> inClasses = _verbNet.GetClassesFor(_frameNet.GetFrame(frame).LexicalUnits.Where(lu => lu.POS == "V").Select(lu => lu.ToString())); if (inClasses.Count == 0) { issueFile.WriteLine(frame + " # Not in class " + verbClassID + " nor anywhere else."); } else { issueFile.WriteLine(frame + " # Not in class " + verbClassID + " but in some class."); } } } } } // invalid frame or frame elements if (invalidFrameElements.Checked) { List <string> issues = new List <string>(); foreach (string frameElement in _semLink.FrameElements) { string[] parts = frameElement.Split('.'); string frameName = parts[0]; string fe = parts[1]; LAIR.ResourceAPIs.FrameNet.Frame frame; if (!_frameNet.TryGetFrame(frameName, out frame)) { issues.Add(frameElement + " # Invalid frame."); } else if (!frame.FrameElements.Contains(fe)) { issues.Add(frameElement + " # Invalid frame element."); } } issues.Sort(); foreach (string issue in issues) { issueFile.WriteLine(issue); } } issueFile.Close(); Close(); }