Newer
Older
piccolo2d.java / anchorgarden / src / main / java / jaist / css / covis / util / InputTokenizer.java
@Motoki Miura Motoki Miura on 14 Apr 2022 2 KB edu.umd.cs.piccolo -> org.piccolo2d
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();
//		}
//	}
}