/**
* Copyright (c) 2009, Regents of the University of Colorado All rights
* reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
*
* Redistributions of source code must retain the above copyright notice, this
* list of conditions and the following disclaimer. Redistributions in binary
* form must reproduce the above copyright notice, this list of conditions and
* the following disclaimer in the documentation and/or other materials provided
* with the distribution. Neither the name of the University of Colorado at
* Boulder nor the names of its contributors may be used to endorse or promote
* products derived from this software without specific prior written
* permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
* POSSIBILITY OF SUCH DAMAGE.
*/
package clear.propbank;
import java.util.ArrayList;
/**
* Propbank instance.
*
* @author Jinho D. Choi <b>Last update:</b> 2/15/2010
*/
public class PBInstance {
static final public String KEY_DELIM = "*";
/**
* Name of the treebank file
*/
public String treePath;
/**
* Tree index (starting from 0)
*/
public int treeIndex;
/**
* Predicate ID
*/
public int predicateId;
/**
* Annotator ID
*/
public String annotator;
/**
* Instance type (e.g., lemma-v, lemma-n)
*/
public String type;
/**
* Roleset (or frameset) ID
*/
public String rolesetId;
/**
* List of arguments
*/
private ArrayList<PBArg> a_arg = null;
/**
* Initializes the Propbank instance.
*/
public PBInstance() {
a_arg = new ArrayList<>();
}
public String getKey() {
return treePath + KEY_DELIM + treeIndex + KEY_DELIM + predicateId;
}
/**
* Adds an argument to the instance.
*
* @param arg Propbank argument
*/
public void addArg(PBArg arg) {
PBArg tmp;
if ((tmp = getArgByLabel(arg.label)) != null) {
tmp.addLocs(arg.getLocs());
} else {
a_arg.add(arg);
}
}
/**
* Adds a list of Propbank arguments. Discard arguments that are already in
* the instance.
*/
public void addArgs(ArrayList<PBArg> args) {
for (PBArg arg : args) {
if (!contains(arg)) {
addArg(arg);
}
}
}
public PBArg getArg(String label) {
for (PBArg pbArg : a_arg) {
if (pbArg.isLabel(label)) {
return pbArg;
}
}
return null;
}
/**
* @return the list of Propbank arguments
*/
public ArrayList<PBArg> getArgs() {
return a_arg;
}
/**
* @return true if the instance contains
* <code>arg</code>
*/
public boolean contains(PBArg arg) {
for (PBArg a : a_arg) {
if (a.equals(arg)) {
return true;
}
}
return false;
}
public PBArg getArgByLabel(String label) {
for (PBArg arg : a_arg) {
if (arg.isLabel(label)) {
return arg;
}
}
return null;
}
/**
* Returns the string representation of the Propbank instance.
*/
@Override
public String toString() {
StringBuilder buff = new StringBuilder();
buff.append(treePath);
buff.append(PBLib.FIELD_DELIM);
buff.append(treeIndex);
buff.append(PBLib.FIELD_DELIM);
buff.append(predicateId);
buff.append(PBLib.FIELD_DELIM);
buff.append(rolesetId);
for (PBArg arg : a_arg) {
buff.append(PBLib.FIELD_DELIM);
buff.append(arg.toString());
}
return buff.toString();
}
}