package rainbownlp.analyzer.sentenceclause;
import java.util.ArrayList;
import java.util.EnumSet;
import java.util.HashMap;
import java.util.Map;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import rainbownlp.util.StringUtil;
public class Verb {
public String verbMainPart;
public Integer offset;
public ArrayList<String> modifiers;
public ArrayList<String> auxs;
public boolean isNegated = false;
public String prt;
public boolean isPassive = false;
Integer polarity = null;
HashMap<String, Integer> iObjHash;
public Verb()
{
verbMainPart = new String();
modifiers= new ArrayList<String> ();
auxs = new ArrayList<String>();
offset = new Integer(0);
prt = new String();
iObjHash = null;
}
public String getPhrasalVerbLemma()
{
String p_verb= verbMainPart;
if (!prt.isEmpty())
{
p_verb = StringUtil.getWordLemma(verbMainPart).concat(" "+prt);
}
else
{
p_verb = StringUtil.getWordLemma(verbMainPart);
}
return p_verb;
}
public boolean isDoubted(Clause clause)
{
boolean is_doubted = false;
if (auxs.contains("may") || auxs.contains("should") || auxs.contains("might")
|| auxs.contains("would") || clause.isMarked )
{
is_doubted = true;
}
return is_doubted;
}
public boolean isTOBe()
{
boolean is_tobe = false;
String lemma = StringUtil.getTermByTermWordnet(verbMainPart);
if (lemma.equals("be") || lemma.equals("wa"))
{
is_tobe = true;
}
return is_tobe;
}
public static boolean isToBeVerb(String verb)
{
Pattern p = Pattern.compile("(is|am|are|being|been|be|do|does|did|will|was|were|can|could|shall|become|became|has|had|have|would|may|might|must)");
Matcher m = p.matcher(verb);
return m.matches();
}
public Integer getTense(SentenceClauseManager relatedSentence) {
if (verbMainPart.isEmpty())
{
return 0;
}
// Tense number can be 1: past 2:present 3:future 4:present+ing
Integer verb_tense_number = 2;
if (auxs.contains("will")|| auxs.contains("wo"))
{
verb_tense_number = 3;
}
else if(auxs.contains("do") || auxs.contains("have") || auxs.contains("to") ||
auxs.contains("am") || auxs.contains("are") || auxs.contains("can"))
{
verb_tense_number = 2;
}
else if(auxs.contains("would") || auxs.contains("could")|| auxs.contains("did"))
{
verb_tense_number = 1;
}
// get the POS
else
{
String verb_pos = relatedSentence.getPOSTag(offset);
if((auxs.contains("have") || auxs.contains("has")) &&
verb_pos.equals("VBN"))
{
verb_tense_number = VerbTense.PRESENTPERFECT.ordinal();
}
else if(verb_pos.equals("VBG") &&
(auxs.contains("is") || auxs.contains("are") ||
auxs.contains("'s") || auxs.contains("'re"))
)
{
verb_tense_number = VerbTense.PRESENTPROG.ordinal();
}
else if(verb_pos.equals("VBG") &&
auxs.contains("been") &&
( auxs.contains("have") || auxs.contains("has")) )
{
verb_tense_number = VerbTense.PRESPERFECTPROG.ordinal();
}
else if(verb_pos.equals("VBN") &&
(auxs.contains("had") )
)
{
verb_tense_number = VerbTense.PASTPERFECT.ordinal();
}
else if (verb_pos.equals("VBD"))
{
verb_tense_number = 1;
}
else if (verb_pos.equals("VBN"))
{
String aux_pos = relatedSentence.getPOSTag(offset-1);
if (aux_pos.equals("VBD"))
{
verb_tense_number = 1;
}
}
else if(verb_pos.equals("VBG") || verb_pos.equals("VBP") || verb_pos.equals("VBZ"))
{
verb_tense_number = 2;
}
}
return verb_tense_number;
}
// Tense number can be 1: past 2:present 3:future 4:present+ing
public enum VerbTense {
PAST(1),
PRESENT(2),
FUTURE(3),
PRESENTPROG(4),
PRESENTPERFECT(5),
PASTPERFECT(6),
PRESPERFECTPROG(7);
private static final Map<Integer,VerbTense> lookup
= new HashMap<Integer,VerbTense>();
static {
for(VerbTense l : EnumSet.allOf(VerbTense.class))
lookup.put(l.getCode(), l);
}
private int code;
private VerbTense(int code) {
this.code = code;
}
public int getCode() { return code; }
public static VerbTense getEnum(int code) {
return lookup.get(code);
}
}
}