修改LanguageDetector 的语料库载入参数为 字节流

    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("然后在创建对象什么的.而那些非静态的变量和方法就好比是人身上的衣服和人的行为,每"));
	}
	
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值