package chipmunk.segmenter; import java.util.Collection; import java.util.LinkedList; import java.util.List; public class TagSet { private static final String SEGMENT = "SEGMENT"; public static final String NUMBER = "NUM"; public static final String ALPHA = "ALPHA"; public static String SPECIAL = "SPECIAL"; public static String getTag(String tag, int tag_level) { if (tag == null || tag_level < 1) { return SEGMENT; } String[] subtags = split(tag); List<String> newtags = new LinkedList<>(); for (String subtag : subtags) { if (subtag.equals("UNK")) { } else if (subtag.equals("ROOT") || subtag.equals("PREFIX") || subtag.equals("SUFFIX")) { newtags.add(subtag); } else if (tag_level > 1 && (countDoubleColon(subtag) == 0)) { newtags.add(subtag); } else if (tag_level > 2 && (countDoubleColon(subtag) < 2)) { newtags.add(subtag); } else if (tag_level > 3) { newtags.add(subtag); } } newtags.add(SEGMENT); return join(newtags); } private static int countDoubleColon(String subtag) { int count = 0; int index = 0; while (index < subtag.length()) { index = subtag.indexOf("::", index); if (index < 0) { return count; } index += 2; count ++; } return count; } private static String join(Collection<String> subtags) { StringBuilder sb = new StringBuilder(); for (String subtag : subtags) { if (sb.length() > 0) { sb.append('|'); } sb.append(subtag); } return sb.toString(); } public static String[] split(String tag) { return tag.split("\\|"); } }