google推出的语言检测工具(http://code.google.com/p/language-detection/)十分好用,分辨率非常高,近期,需要将这个工具用到nutch1.7.因为nutch1.7的默认检测时tika,准确性十分差。
在使用该工具时,发现两个缺点(针对我的项目是缺点):1.语料库profile文件需要单独导入。2.导入函数只能接受File,这样在分布式环境下无法使用,因此,我做了以下修改
第一:将profile文件添加到jar包,这样做的好处是使用时不需要单独导入语料库。第二:增加一个类,用于接受字节流的 语料库,这样在使用时,直接调用我的方法,直接进行检测
public class KiddenLangDetect {
public void load() {
String[] langs = new String[] { "ml", "tl", "mk", "zh-cn", "id", "mr", "en", "hu", "sw", "no", "gu", "lt", "fr", "ja",
"es", "so", "ar", "hi", "ur", "te", "sl", "zh-tw", "pt", "sv", "et", "cs", "el", "sq", "ta", "sk", "lv", "kn",
"fa", "he", "de", "ne", "ru", "ko", "da", "bn", "ro", "pl", "vi", "it", "uk", "th", "bg", "pa", "nl", "hr", "tr",
"af", "fi" };
for (int i = 0; i < langs.length; i++) {
InputStream is = this.getClass().getResourceAsStream("/src/com/cybozu/labs/langdetect/profile/" + langs[i]);
try {
DetectorFactory.loadKiddenProfile(is, langs.length,i);
} catch (LangDetectException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
String identifyLang = "";
public String getLangByStr(String content){
try {
Detector detect;
try
{
detect = DetectorFactory.create();
detect.append(content);
identifyLang = detect.detect();
} catch (LangDetectException e)
{
e.printStackTrace();
}
} catch (Exception e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
return identifyLang;
}
public static void main(String[] args) {
KiddenLangDetect t = new KiddenLangDetect();
t.load();
System.out.println(t.getLangByStr("然后在创建对象什么的.而那些非静态的变量和方法就好比是人身上的衣服和人的行为,每"));
}
}