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