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.core.OntologyTextElement; 022 import ch.uzh.ifi.attempto.acewiki.owl.OWLConcept; 023 import ch.uzh.ifi.attempto.ape.ACEUtils; 024 import ch.uzh.ifi.attempto.ape.Gender; 025 import ch.uzh.ifi.attempto.ape.LexiconEntry; 026 import ch.uzh.ifi.attempto.base.TextContainer; 027 import ch.uzh.ifi.attempto.base.TextElement; 028 import ch.uzh.ifi.attempto.chartparser.LexicalRule; 029 import ch.uzh.ifi.attempto.chartparser.Preterminal; 030 031 /** 032 * This class stands for concepts that are represented by ACE nouns and OWL concepts. 033 * Noun concepts have two word forms. 034 *<p> 035 * 0: singular form. 036 * 1: plural form. 037 *<p> 038 * Examples: ["country", "countries"]; ["woman", "women"]. 039 * 040 * @author Tobias Kuhn 041 */ 042 public class NounConcept extends OWLConcept implements ACEOWLOntoElement { 043 044 private String singular, plural; 045 046 /** 047 * Creates a new noun concept. 048 */ 049 public NounConcept() { 050 singular = ""; 051 plural = ""; 052 } 053 054 public String[] getWords() { 055 return new String[] {singular, plural}; 056 } 057 058 public void setWords(String serializedWords) { 059 String[] words = serializedWords.split(";"); 060 singular = words[0]; 061 plural = words[1]; 062 } 063 064 public String serializeWords() { 065 return singular + ";" + plural + ";"; 066 } 067 068 public String getIRISuffix() { 069 return getWord(0); 070 } 071 072 public List<LexiconEntry> getLexiconEntries() { 073 List<LexiconEntry> entries = new ArrayList<LexiconEntry>(); 074 entries.add(LexiconEntry.createNounSgEntry(getWord(0), getWord(0), Gender.UNDEF)); 075 entries.add(LexiconEntry.createNounPlEntry(getWord(1), getWord(0), Gender.UNDEF)); 076 return entries; 077 } 078 079 public String getType() { 080 return "Noun"; 081 } 082 083 public String getInternalType() { 084 return "noun"; 085 } 086 087 public void collectLexicalRules(String catName, Collection<LexicalRule> lexRules) { 088 if (catName == null || catName.equals("noun")) { 089 lexRules.add(new LexicalRule("noun", getWord(0))); 090 } 091 if (catName == null || catName.equals("nounpl")) { 092 lexRules.add(new LexicalRule("nounpl", getWord(1))); 093 } 094 if (catName == null || catName.equals("defnoun")) { 095 Preterminal cat = new Preterminal("defnoun"); 096 cat.setFeature("noun", getWord(0)); 097 lexRules.add(new LexicalRule(cat, "the " + getWord(0))); 098 } 099 } 100 101 public TextContainer getAnswerText() { 102 boolean an = ACEUtils.useIndefiniteArticleAn(getWord()); 103 TextElement det = new TextElement(an ? "an" : "a"); 104 TextElement n = new OntologyTextElement(this, 0); 105 return new TextContainer(det, n); 106 } 107 108 }