/** * Copyright 2014, Emory University * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package edu.emory.clir.clearnlp.lexicon.propbank.frameset; import java.io.Serializable; import java.util.HashMap; import java.util.Map; import java.util.Set; import org.w3c.dom.Element; import org.w3c.dom.NodeList; import edu.emory.clir.clearnlp.lexicon.verbnet.VNLib; import edu.emory.clir.clearnlp.util.StringUtils; import edu.emory.clir.clearnlp.util.XmlUtils; import edu.emory.clir.clearnlp.util.constant.StringConst; /** * @since 3.0.0 * @author Jinho D. Choi ({@code jinho.choi@emory.edu}) */ public class PBFRole implements Serializable, Comparable<PBFRole> { private static final long serialVersionUID = 6664227730485311810L; private Map<String,String> m_vnroles; private String s_argumentNumber; private String s_functionTag; private String s_description; public PBFRole(Element eRole) { init(eRole); } private void init(Element eRole) { m_vnroles = new HashMap<>(); setArgumentNumber(XmlUtils.getTrimmedAttribute(eRole, PBFXml.A_N)); setFunctionTag(XmlUtils.getTrimmedAttribute(eRole, PBFXml.A_F)); setDescription(XmlUtils.getTrimmedAttribute(eRole, PBFXml.A_DESCR)); initVNRoles(eRole.getElementsByTagName(PBFXml.E_VNROLE)); } private void initVNRoles(NodeList list) { int i, size = list.getLength(); String vncls, vntheta; Element eVNRole; for (i=0; i<size; i++) { eVNRole = (Element)list.item(i); vncls = XmlUtils.getTrimmedAttribute(eVNRole, PBFXml.A_VNCLS); vntheta = XmlUtils.getTrimmedAttribute(eVNRole, PBFXml.A_VNTHETA); if (!vncls.equals(StringConst.EMPTY) && !vntheta.equals(StringConst.EMPTY)) putVNRole(vncls, vntheta); } } public String getArgumentNumber() { return s_argumentNumber; } public String getFunctionTag() { return s_functionTag; } public String getDescription() { return s_description; } public Set<String> getVNClasseSet() { return m_vnroles.keySet(); } /** @return {@code null} if not exist. */ public String getVNTheta(String vncls) { return m_vnroles.get(vncls); } public void setArgumentNumber(String argNumber) { s_argumentNumber = StringUtils.toUpperCase(argNumber); } public void setFunctionTag(String functionTag) { s_functionTag = StringUtils.toUpperCase(functionTag); } public void setDescription(String description) { s_description = description; } public void putVNRole(String vncls, String vntheta) { if (vncls.length() > 1) m_vnroles.put(VNLib.stripVerbNetClassName(vncls), StringUtils.toLowerCase(vntheta)); } public boolean isArgumentNumber(String number) { return s_argumentNumber.equals(number); } public boolean isFunctionTag(String tag) { return s_functionTag.equals(tag); } @Override public String toString() { StringBuilder build = new StringBuilder(); build.append(getArgKey()); build.append(": "); build.append(s_description); for (String vncls : m_vnroles.keySet()) { build.append(", "); build.append(vncls); build.append(":"); build.append(m_vnroles.get(vncls)); } return build.toString(); } public String getArgKey() { StringBuilder build = new StringBuilder(); build.append(s_argumentNumber); if (!s_functionTag.equals(StringConst.EMPTY)) { build.append("-"); build.append(s_functionTag); } return build.toString(); } @Override public int compareTo(PBFRole role) { int n = s_argumentNumber.compareTo(role.s_argumentNumber); return (n != 0) ? n : s_functionTag.compareTo(role.s_functionTag); } }