001 // This file is part of the Attempto Java Packages.
002 // Copyright 2008, Attempto Group, University of Zurich (see http://attempto.ifi.uzh.ch).
003 //
004 // The Attempto Java Packages is free software: you can redistribute it and/or modify it under the
005 // terms of the GNU Lesser General Public License as published by the Free Software Foundation,
006 // either version 3 of the License, or (at your option) any later version.
007 //
008 // The Attempto Java Packages is distributed in the hope that it will be useful, but WITHOUT ANY
009 // WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
010 // PURPOSE. See the GNU Lesser General Public License for more details.
011 //
012 // You should have received a copy of the GNU Lesser General Public License along with the Attempto
013 // Java Packages. If not, see http://www.gnu.org/licenses/.
014
015 package ch.uzh.ifi.attempto.acewiki.core.ontology;
016
017 import java.util.ArrayList;
018 import java.util.List;
019
020 import ch.uzh.ifi.attempto.ape.LexiconEntry;
021
022 /**
023 * This class stands for roles that are represented by a transitive verb. Transitive
024 * verbs have three word forms: a third singular form, a bare infinitive form ,
025 * and a passive form. The bare infinitive form is used in the case of negation and plural.
026 * The passive form always ends with the word "by".
027 *<p>
028 * 0: third singular form.
029 * 1: bare infinitive form.
030 * 2: passive form.
031 *<p>
032 * Examples: ["gives", "give", "given by"]; ["knows", "know", "known by"].
033 *
034 * @author Tobias Kuhn
035 */
036 public class VerbRole extends Role {
037
038 private String thirdSg, inf, passive;
039
040 /**
041 * Creates a new verb role.
042 */
043 public VerbRole() {
044 }
045
046 public String[] getWords() {
047 return new String[] {thirdSg, inf, passive};
048 }
049
050 protected void changeWords(String... words) {
051 thirdSg = words[0];
052 inf = words[1];
053 if (words.length < 3 || words[2] == null) {
054 passive = null;
055 } else if (words[2].endsWith(" by")) {
056 passive = words[2];
057 } else {
058 passive = words[2] + " by";
059 }
060 }
061
062 /**
063 * Returns the past participle which is the passive form without the "by".
064 * E.g. for the passive form "given by", the past participle is "given".
065 *
066 * @return The past participle form.
067 */
068 public String getPastPart() {
069 String s = getWord(2);
070 if (s == null) {
071 return null;
072 } else if (s.endsWith(" by")) {
073 return s.substring(0, s.length()-3);
074 } else {
075 throw new RuntimeException("Illegal passive word form: " + s);
076 }
077 }
078
079 /**
080 * Returns the pretty-printed past participle. The pretty printing replaces
081 * underscores by blanks.
082 *
083 * @return The pretty-printed past participle form.
084 * @see #getPastPart()
085 */
086 public String getPrettyPastPart() {
087 String s = getWord(2);
088 if (s == null) {
089 return null;
090 } else if (s.endsWith(" by")) {
091 return s.substring(0, s.length()-3);
092 } else {
093 throw new RuntimeException("Illegal passive word form: " + s);
094 }
095 }
096
097 List<LexiconEntry> getLexiconEntries() {
098 List<LexiconEntry> entries = new ArrayList<LexiconEntry>();
099 entries.add(LexiconEntry.createTrVerbThirdEntry(thirdSg, inf));
100 entries.add(LexiconEntry.createTrVerbInfEntry(inf, inf));
101 if (passive != null) {
102 entries.add(LexiconEntry.createTrVerbPPEntry(getPastPart(), inf));
103 }
104 return entries;
105 }
106
107 public String getType() {
108 return "Verb";
109 }
110
111 public String getInternalType() {
112 return "trverb";
113 }
114
115 }