001 002 package edu.upenn.cis.propbank_shen; 003 004 /** 005 A class emulating an enumeration of labels representing 006 "modifiers" in the propbank. Even though there is obviously 007 a vast amount of overlap between the denotation of the labels, 008 a single modifier is chosen as the appropriate annotation 009 if it is deemed "the most" appropriate. I don't think this 010 distinction is at all well defined, but it is common practice 011 in this field and what the linguists want. 012 013 <ul> 014 <li> EXT extent 015 <li> LOC location 016 <li> DIR direction 017 <li> NEG negation (not in PREDITOR) 018 <li> MOD general modification 019 <li> ADV adverbial modification 020 <li> MNR manner 021 <li> PRD secondary predication 022 <li> REC recipricol (eg herself, etc) 023 <li> TMP temporal 024 <li> PRP purpose - deprecated !!! 025 <li> PNC purpose no cause 026 <li> CAU cause 027 <li> STR stranded 028 </ul> 029 @author Scott Cotton 030 */ 031 032 033 public final class ModLabel { 034 035 private String label_name; 036 private String label_descr; 037 038 // private constructor 039 private ModLabel(String nm, String descr) { 040 label_name = nm; 041 label_descr = descr; 042 043 } 044 045 public final ModLabel prepMod(String prep) { 046 return new ModLabel(prep, "preposition"); 047 } 048 049 /** 050 Convert a ModLabel to a string 051 */ 052 public final String toString() { return label_name; } 053 054 /** 055 Given a string, return the associated ModLabel 056 057 @param s the string to be converted to a ModLabel 058 */ 059 public static final ModLabel ofString(String s) { 060 if (s.equals("EXT")) { return ModLabel.EXT; } 061 else if (s.equals("LOC")) { return ModLabel.LOC; } 062 else if (s.equals("MOD")) { return ModLabel.MOD; } 063 else if (s.equals("ADV")) { return ModLabel.ADV; } 064 else if (s.equals("MNR")) { return ModLabel.MNR; } 065 else if (s.equals("PRD")) { return ModLabel.PRD; } 066 else if (s.equals("REC")) { return ModLabel.REC; } 067 else if (s.equals("TMP")) { return ModLabel.TMP; } 068 else if (s.equals("PRP")) { return ModLabel.PRP; } 069 else if (s.equals("PNC")) { return ModLabel.PNC; } 070 else if (s.equals("CAU")) { return ModLabel.CAU; } 071 else if (s.equals("STR")) { return ModLabel.STR; } 072 else { 073 return new ModLabel(s, "preposition"); 074 } 075 } 076 077 public boolean equals (Object label) { 078 if (this == label) 079 return true; 080 if (!(label instanceof ModLabel)) 081 return false; 082 ModLabel m = (ModLabel)label; 083 return label_name.equals(m.label_name) && 084 label_descr.equals(m.label_descr); 085 } 086 087 // public int hashCode () { 088 // return 7 * label_name.hashCode() + label_descr.hashCode(); 089 // } 090 091 /** 092 Return a brief english description of the associated label 093 */ 094 public final String getDescription() { return label_descr; } 095 096 097 public static final ModLabel EXT = new ModLabel("EXT", "extent"); 098 public static final ModLabel LOC = new ModLabel("LOC", "location"); 099 public static final ModLabel DIR = new ModLabel("DIR", "direction"); 100 public static final ModLabel MOD = new ModLabel("MOD", "modal"); 101 public static final ModLabel ADV = new ModLabel("ADV", "adverbial"); 102 public static final ModLabel MNR = new ModLabel("MNR", "manner"); 103 public static final ModLabel PRD = new ModLabel("PRD", "secondary predication"); 104 public static final ModLabel REC = new ModLabel("REC", "recipricol"); 105 public static final ModLabel TMP = new ModLabel("TMP", "temporal"); 106 public static final ModLabel PRP = new ModLabel("PRP", "purpose (deprecated)"); 107 public static final ModLabel PNC = new ModLabel("PNC", "purpose, not the cause"); 108 public static final ModLabel CAU = new ModLabel("CAU", "cause"); 109 public static final ModLabel STR = new ModLabel("STR", "stranded"); 110 }