package jaist.css.covis.util; import java.util.ArrayList; /** * InputTokenizer * * 日本語,英語の文章を区切って Card(ラベル)に配置しやすくするための クラス * * MeCab(日本語構文解析器)がインストールされていて,日本語文章なら mecabTokenize() そうでなければ tokenize()を使うように * するとよい.(33-37行目) * * @author miuramo * */ public class InputTokenizer { String orig; ArrayList<String> tokens; // static Vector<Character.UnicodeBlock> distinguish; // static { // distinguish.add(Character.UnicodeBlock) // } public InputTokenizer(String src) { orig = src.trim(); // 前後の空白は取り除かれる tokens = new ArrayList<String>(); tokenize(); /* * if (orig.indexOf(" ")>0) tokenize(); // 空白があるのはおそらく英語だろう>tokenize() * else mecabTokenize(); */ } public void tokenize() { char[] charary; charary = orig.toCharArray(); Character.UnicodeBlock currentB = null, prevB = null; StringBuffer sb = new StringBuffer(); for (int i = 0; i < charary.length; i++) { currentB = Character.UnicodeBlock.of(charary[i]); if (charary[i] == ' ') { // 一旦区切る if (sb.length() > 0) tokens.add(sb.toString()); sb = new StringBuffer(); // そして,同じものを集める sb.append(charary[i]); i++; while (charary[i] == ' ') { sb.append(charary[i]); i++; } currentB = Character.UnicodeBlock.of(charary[i]); // 集まったら,次へ if (sb.length() > 0) tokens.add(sb.toString()); sb = new StringBuffer(); sb.append(charary[i]); } else if (currentB == prevB && currentB != Character.UnicodeBlock.HIRAGANA) { sb.append(charary[i]); } else { if (sb.length() > 0) tokens.add(sb.toString()); sb = new StringBuffer(); sb.append(charary[i]); } prevB = currentB; } tokens.add(sb.toString()); } public void print() { for (String s : tokens) { System.out.println("[" + s + "]"); } } // public Vector<Token> getTokens() { // Vector<Token> tok = new Vector<Token>(); // for (String s : tokens) { // tok.add(new Token(s)); // } // return tok; // } // public static void main(String[] args) { // BufferedReader stdin = new BufferedReader(new InputStreamReader( // System.in)); // String strnum; // try { // while ((strnum = stdin.readLine()) != null) { // InputTokenizer it = new InputTokenizer(strnum); // it.print(); // } // } catch (IOException e) { // e.printStackTrace(); // } // } }