对于特定语言的检测并不是一个困难的问题:统计一段文字中有多少个字符落在某语言的基本语素集合(例如:中文中的声韵母)中,然后计算比例,就可以给出答案。
已经有ibm的icu在这方面做得很好,而且计算速度很快。但是对于少数民族的语言并未全部提供支持,譬如维文、柯尔克孜文。
因为icu复杂性较高,研究通透,再做二次开发需要一段时间。为了满足当前简单的需求,手写了一个简单的检测程序。原理同上,但是其中的代码有一部分或许对以后的
自己和正在阅读的你有一些参考价值。
//枚举类:lang的类型
public enum Lang {
WEI,HARZ,KERZ,Not_Wei
}
import java.io.BufferedReader;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.UnsupportedEncodingException;
import java.lang.reflect.Array;
import java.util.Arrays;
public class TestDetector {
//所有维文、柯尔克孜文的unicode字符集
static int[] HugeMap ={0x0626,0x0627,0x0628,0x062a,0x062c,0x062d,0x062e,0x062f
,0x0631,0x0632,0x0633,0x0634,0x0639,0x063a,0x0641,0x0642,0x0644,0x0645,0x0648,
0x0649,0x064a,0x0675,0x0676,0x0677,0x0678,0x067e,0x0686,0x0698,0x06ad,0x06af,
0x06be,0x06c5,0x06c6,0x06c7,0x06c8,0x06c9,0x06cb,0x06d0,0x06d5};
//维文独有的字符集
static int[] WeiMap = {0x0698,0x062e,0x063a};
// static int[] HazahMap = {0x0401,0x0402,0x0403,0x0404,0x0405,0x0406,0x0407,0x0408,0x0409,0x};
//柯尔克孜文独有的字符集
static int[] Kerzmap= {0x06c5,0x06c9,0x0649,0x0626};
private static Lang checkWei(String content) {
byte[] probuffer=null;
try {
//UTF-8 to Unicode
probuffer = utf2uni(content.getBytes("UTF-8"),content.getBytes("UTF-8").length);
} catch (UnsupportedEncodingException e) {