001 package edu.upenn.cis.propbank_shen; 002 003 import java.io.File; 004 005 //import edu.upenn.cis.treebank.TBNode; 006 //import edu.upenn.cis.treebank.InvalidAddressException; 007 //import edu.upenn.cis.treebank.TBFind; 008 009 010 /** 011 This class represents the location of a predicate argument structure. It 012 consists of a filename, a sentence number (starting with 0) and a terminal 013 number in the sentence (starting with 0). 014 015 @author Scott Cotton 016 @see edu.upenn.cis.propbank_shen.PBConfig 017 018 */ 019 public class PASLoc { 020 021 /** the filename of the associated PAS. */ 022 String path; 023 /** the sentence number of the sentence, starting with 0. */ 024 int sentno; 025 /** the terminal number in the sentence, starting with 0. */ 026 int termno; 027 028 /** the treebank node, or null if we haven't looked it up yet */ 029 // protected TBNode tbnode; 030 031 /** 032 A constructor -- you supply the pieces, we supply the Object. 033 */ 034 public PASLoc(String p, int sno, int tno) { 035 path = p; 036 sentno = sno; 037 termno = tno; 038 // tbnode = null; 039 } 040 041 042 /** 043 return the full path of the file to which this location refers. 044 */ 045 public File getPath() 046 { 047 return new File(PBConfig.TreeBankDir(), path); 048 } 049 050 051 052 // 053 // /** 054 // get the treebank node associated with this predicate argument 055 // structure location. 056 // 057 // @see edu.upenn.cis.treebank.TBNode 058 // */ 059 // public TBNode getTBNode() throws InvalidAddressException 060 // { 061 // if (tbnode != null) { 062 // return tbnode; 063 // } 064 // tbnode = TBFind.nodeAt(getPath().toString(), sentno, termno); 065 // return tbnode; 066 // } 067 068 /** 069 construct a canonical string from the object. 070 */ 071 public String toString() { 072 return path + " " + (new Integer(sentno)).toString() + " " 073 + (new Integer(termno)).toString(); 074 } 075 076 /** 077 given a canonical string representing a location of 078 a predicate, return a corresponding PASLoc object. 079 080 @param s the canonical string representation of a PAS location 081 */ 082 public static PASLoc ofString(String s) throws CorruptDataException { 083 String parts[] = s.split(" "); 084 if (parts.length != 3) { 085 throw new CorruptDataException("Invalid location of a predicate argument structure: " + s); 086 } 087 try { 088 int sn = Integer.decode(parts[1]).intValue(); 089 int tn = Integer.decode(parts[2]).intValue(); 090 return new PASLoc(parts[0], sn, tn); 091 } catch (NumberFormatException e) { // XXX what's this exception? 092 throw new CorruptDataException("Invalid location of a predicate argument structure: " + s); 093 } 094 } 095 096 /** 097 * return true iff o is the same PASLoc as this object 098 */ 099 public boolean equals (Object o) { 100 if (!(o instanceof PASLoc)) 101 return false; 102 PASLoc p = (PASLoc)o; 103 return path.equals(p.path) && sentno == p.sentno && termno == p.termno; 104 } 105 106 /** 107 * Produce a hash code for this instance 108 */ 109 public int hashCode () { 110 return this.toString().hashCode(); 111 // TODO apply this neat trick elsewhere 112 } 113 } 114