Java---获取文本信息熵

Java---获取文本信息熵


本文实现方法:在已知语料(content)下获取文本(element)的信息熵。
实例:我们获取了一个网站内的所有文本(content),要计算其中每个标题(element)的信息熵值。
过程:
首先,对语料(content)进行分词过滤,统计每个词的词频,占比,以此作为该词的概率值。
然后,对要计算信息熵的文本(element)进行同样的分词操作,根据分词获取对应的概率值,计算信息熵。
代码如下:

public static double getInfoEntropy(String content,String element) {
		
		//对语料进行分词、过滤
		Result fliterContent = fliterString(content);
		
		//语料的词频统计
		Map<String,Integer> map=new HashMap<String,Integer>();
		Integer count,value,sum = 0;
		for (Term term : fliterContent) {
			count = map.get(term.getName());
			if (count == null) {
				map.put(term.getName(), 1);
			} else {
				map.put(term.getName(), count + 1);
			}
			sum++;
		}
		//对文本进行分词、过滤
		Result fliterElement = fliterString(element);
		//计算信息熵
		double infoentropy = .0;
		for (Term term : fliterElement) {
			String key = term.getName();
			value = map.get(key);
			//计算该次在全部语料下的频率
			try {
				float frequency = (float) value / sum;
				infoentropy += -frequency * (Math.log(frequency) / Math.log(2));
			} catch (Exception e) {
			}
		}
		return infoentropy/fliterElement.size();
	}

分词、过滤函数如下:

public static Result fliterString(String content) {
		
		StopRecognition filter = new StopRecognition();
		
		filter.insertStopNatures("w"); //过滤标点
		filter.insertStopNatures("null"); //过滤空格
		filter.insertStopNatures("m"); //过滤数值类词,会将 “半数” 这类中文数词过滤
//		filter.insertStopWords("的"); //过滤单词
//		filter.insertStopNatures("w"); //过滤词性 
//		根据正则表达式进行过滤
//		filter.insertStopRegexes("\\.*");
//		filter.insertStopRegexes("\\[");
//		filter.insertStopRegexes("\\]");
//		filter.insertStopRegexes("\\-");
//		filter.insertStopRegexes("\\s*");
		
		//返回分词、过滤结果
		return ToAnalysis.parse(content).recognition(filter);
	}

分词所依赖的jar包依赖如下:

		<dependency>
			<groupId>org.ansj</groupId>
			<artifactId>ansj_seg</artifactId>
			<version>5.1.3</version>
		</dependency>
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值