// Path: apex/src/main/java/com/sixthsolution/apex/nlp/dict/Tag.java
// public enum Tag {
//     NONE(97),
//     NUMBER(98),
//     PREPOSITION(99),
//     RELATIVE_PREPOSITION(100),
//     RELATIVE_SUFFIX(101),
//     //LOCATION
//     LOCATION_PREFIX(102),
//     LOCATION_SUFFIX(103),
//     LOCATION_NAME(137),
//     //TIME
//     TIME_PREFIX(104),                //e.g. at, in ,the
//     TIME_START_RANGE(105),       //e.g. from
//     TIME_RANGE(106),
//     TIME_RELATIVE_PREFIX(107),   //e.g. for
//     TIME_RELATIVE(108),              //e.g. morning
//     TIME_RELATIVE_INDICATOR(109),   //e.g. before,after
//     TIME_HOUR(110),                 //e.g. hour
//     TIME_MIN(111),                   //e.g. minutes
//     TIME_SEC(112),                   //e.g. seconds
//     TIME_MERIDIEM(113),            //e.g am, pm
//     TIME_SEPARATOR(114),             //e.g :, .
//     //DATE
//     DATE_PREPOSITION(115),
//     DATE_SEEKBY(116),
//     DATE_START_RANGE(117),
//     DATE_SUFFIX(118),
//     DATE_DURATION_SUFFIX(119),
//     DATE_SEPARATOR(120),
//     WEEK_DAY(121),
//     MONTH_NAME(122),
//     SEASON(123),
//     DATE_PREFIX(124),
//     //RECURRENCE
//     REC_WEEK_DAYS(125),
//     NAMED_DATE(126),
//     GLOBAL_PREPOSITION(127),
//     DATE_RECURRENCE(128),
//     DATE_RANGE(129),
//     DATE_FOREVER_KEY(130),
//     THE_PREFIX(131),
//     DATE_BAND(132),
//     YEAR_SEEK(133),
//     MONTH_SEEK(134),
//     WEEK_SEEK(135),
//     DAY_SEEK(136),
//     CURRENT(138);
// 
//     public int id;
// 
//     Tag(int id) {
//         this.id = id;
//     }
// 
//     @Override
//     public String toString() {
//         return String.valueOf((char) id);
//     }
// }
// 
// Path: apex/src/main/java/com/sixthsolution/apex/nlp/dict/Tags.java
// public class Tags extends ArrayList<TagValue> {
// 
//     public boolean containsTag(Tag tag) {
//         Iterator<TagValue> iterator = iterator();
//         while (iterator.hasNext()) {
//             TagValue next = iterator.next();
//             if (next.tag.equals(tag)) {
//                 return true;
//             }
//         }
//         return false;
//     }
// 
//     public TagValue containsTagByValue(Tag tag) {
//         Iterator<TagValue> iterator = iterator();
//         while (iterator.hasNext()) {
//             TagValue next = iterator.next();
//             if (next.tag.equals(tag)) {
//                 return next;
//             }
//         }
//         return null;
//     }
// 
//     public boolean containsTag(Tag... tags) {
//         return containsTag(Arrays.asList(tags));
//     }
// 
//     public boolean containsTag(Collection<Tag> tags) {
//         Iterator<TagValue> iterator = iterator();
//         while (iterator.hasNext()) {
//             TagValue next = iterator.next();
//             for (Tag tag : tags)
//                 if (next.tag.equals(tag)) {
//                     return true;
//                 }
//         }
//         return false;
//     }
// 
//     public boolean containsTagName(int tag) {
//         for (TagValue tagValue : this) {
//             if (tagValue.tag.id == tag) {
//                 return true;
//             }
//         }
//         return false;
//     }
// 
//     public TagValue getTagByEntity(Entity entity) {
//         Iterator<TagValue> iterator = iterator();
//         while (iterator.hasNext()) {
//             TagValue next = iterator.next();
//             if (next.entity == entity) {
//                 return next;
//             }
//         }
//         return null;
//     }
// }


import com.sixthsolution.apex.nlp.dict.Tag;
import com.sixthsolution.apex.nlp.dict.Tags;
import java.util.Collection;
import java.util.Set;
package com.sixthsolution.apex.nlp.tagger;



/**
 * @author Saeed Masoumi (s-masoumi@live.com)
 */

public class TaggedWord {

    private Tags tags;
    private final String word;

    public TaggedWord(String word) {
        this.word = word;
        this.tags = new Tags();
    }

    public TaggedWord(String word, Tags tags) {
// Path: apex/src/main/java/com/sixthsolution/apex/nlp/dict/Tag.java
// public enum Tag {
//     NONE(97),
//     NUMBER(98),
//     PREPOSITION(99),
//     RELATIVE_PREPOSITION(100),
//     RELATIVE_SUFFIX(101),
//     //LOCATION
//     LOCATION_PREFIX(102),
//     LOCATION_SUFFIX(103),
//     LOCATION_NAME(137),
//     //TIME
//     TIME_PREFIX(104),                //e.g. at, in ,the
//     TIME_START_RANGE(105),       //e.g. from
//     TIME_RANGE(106),
//     TIME_RELATIVE_PREFIX(107),   //e.g. for
//     TIME_RELATIVE(108),              //e.g. morning
//     TIME_RELATIVE_INDICATOR(109),   //e.g. before,after
//     TIME_HOUR(110),                 //e.g. hour
//     TIME_MIN(111),                   //e.g. minutes
//     TIME_SEC(112),                   //e.g. seconds
//     TIME_MERIDIEM(113),            //e.g am, pm
//     TIME_SEPARATOR(114),             //e.g :, .
//     //DATE
//     DATE_PREPOSITION(115),
//     DATE_SEEKBY(116),
//     DATE_START_RANGE(117),
//     DATE_SUFFIX(118),
//     DATE_DURATION_SUFFIX(119),
//     DATE_SEPARATOR(120),
//     WEEK_DAY(121),
//     MONTH_NAME(122),
//     SEASON(123),
//     DATE_PREFIX(124),
//     //RECURRENCE
//     REC_WEEK_DAYS(125),
//     NAMED_DATE(126),
//     GLOBAL_PREPOSITION(127),
//     DATE_RECURRENCE(128),
//     DATE_RANGE(129),
//     DATE_FOREVER_KEY(130),
//     THE_PREFIX(131),
//     DATE_BAND(132),
//     YEAR_SEEK(133),
//     MONTH_SEEK(134),
//     WEEK_SEEK(135),
//     DAY_SEEK(136),
//     CURRENT(138);
// 
//     public int id;
// 
//     Tag(int id) {
//         this.id = id;
//     }
// 
//     @Override
//     public String toString() {
//         return String.valueOf((char) id);
//     }
// }
// 
// Path: apex/src/main/java/com/sixthsolution/apex/nlp/dict/Tags.java
// public class Tags extends ArrayList<TagValue> {
// 
//     public boolean containsTag(Tag tag) {
//         Iterator<TagValue> iterator = iterator();
//         while (iterator.hasNext()) {
//             TagValue next = iterator.next();
//             if (next.tag.equals(tag)) {
//                 return true;
//             }
//         }
//         return false;
//     }
// 
//     public TagValue containsTagByValue(Tag tag) {
//         Iterator<TagValue> iterator = iterator();
//         while (iterator.hasNext()) {
//             TagValue next = iterator.next();
//             if (next.tag.equals(tag)) {
//                 return next;
//             }
//         }
//         return null;
//     }
// 
//     public boolean containsTag(Tag... tags) {
//         return containsTag(Arrays.asList(tags));
//     }
// 
//     public boolean containsTag(Collection<Tag> tags) {
//         Iterator<TagValue> iterator = iterator();
//         while (iterator.hasNext()) {
//             TagValue next = iterator.next();
//             for (Tag tag : tags)
//                 if (next.tag.equals(tag)) {
//                     return true;
//                 }
//         }
//         return false;
//     }
// 
//     public boolean containsTagName(int tag) {
//         for (TagValue tagValue : this) {
//             if (tagValue.tag.id == tag) {
//                 return true;
//             }
//         }
//         return false;
//     }
// 
//     public TagValue getTagByEntity(Entity entity) {
//         Iterator<TagValue> iterator = iterator();
//         while (iterator.hasNext()) {
//             TagValue next = iterator.next();
//             if (next.entity == entity) {
//                 return next;
//             }
//         }
//         return null;
//     }
// }


// Path: apex/src/main/java/com/sixthsolution/apex/nlp/tagger/TaggedWord.java
import com.sixthsolution.apex.nlp.dict.Tag;
import com.sixthsolution.apex.nlp.dict.Tags;
import java.util.Collection;
import java.util.Set;

package com.sixthsolution.apex.nlp.tagger;



/**
 * @author Saeed Masoumi (s-masoumi@live.com)
 */

public class TaggedWord {

    private Tags tags;
    private final String word;

    public TaggedWord(String word) {
        this.word = word;
        this.tags = new Tags();
    }

    public TaggedWord(String word, Tags tags) {
        this.word = word;