相似度分析,循环读入文件(加入了HanLP,算法第四版的库)
相似度分析的,其中的分词可以采用HanLP即可:
http://www.open-open.com/lib/view/open1421978002609.htm
/***********************************************************
* @Title : SimilarityAnalyse.java
* @Package : lsg.hawei.hanlp
* @Description: TODO(用一句话描述该文件做什么)
* @author : liang shan guang
* @date :2016年11月8日 上午12:41:10
* @version : V1.0
***********************************************************/
package lsg.hawei.hanlp; import java.io.IOException;
import java.io.StringReader;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Vector; import com.hankcs.hanlp.HanLP;
import com.hankcs.hanlp.dictionary.CustomDictionary;
import com.hankcs.hanlp.seg.Segment;
import com.hankcs.hanlp.seg.common.Term; import edu.princeton.cs.algs4.In; /***********************************************************
* @ClassName : SimilarityAnalyse
* @Description : 用于相似度分析的库函数
* @author :liang shan guang
* @date :2016年11月8日 上午12:41:10
***********************************************************/
public class SimilarityAnalyse
{
//阈值,用于决定语言分析和语序分析占相似度的百分比,此处0.2为语已占比
public static double YUZHI = 0.2 ;
public static Vector<String> participle( String str )
{ Vector<String> str1 = new Vector<String>() ;//对输入进行分词
Segment segment=HanLP.newSegment().enableCustomDictionary(true);
CustomDictionary.add("梁山广");//动态添加自定义词汇
List<Term> termList=segment.seg(str);
for(Term term:termList)
{
// System.out.println(term.toString());
str1.add(term.toString());
} if( str1.size() == 0 )
{
return null ;
} //分词后
System.out.println( "str分词后:" + str1 );
return str1;
} public static double getSimilarity(Vector<String> T1, Vector<String> T2) throws Exception
{
int size = 0 , size2 = 0 ;
if ( T1 != null && ( size = T1.size() ) > 0 && T2 != null && ( size2 = T2.size() ) > 0 ) { Map<String, double[]> T = new HashMap<String, double[]>(); //T1和T2的并集T
String index = null ;
for ( int i = 0 ; i < size ; i++ ) {
index = T1.get(i) ;
if( index != null){
double[] c = T.get(index);
c = new double[2];
c[0] = 1; //T1的语义分数Ci
c[1] = YUZHI;//T2的语义分数Ci
T.put( index, c );
}
} for ( int i = 0; i < size2 ; i++ ) {
index = T2.get(i) ;
if( index != null ){
double[] c = T.get( index );
if( c != null && c.length == 2 ){
c[1] = 1; //T2中也存在,T2的语义分数=1
}else {
c = new double[2];
c[0] = YUZHI; //T1的语义分数Ci
c[1] = 1; //T2的语义分数Ci
T.put( index , c );
}
}
} //开始计算,百分比
Iterator<String> it = T.keySet().iterator();
double s1 = 0 , s2 = 0, Ssum = 0; //S1、S2
while( it.hasNext() ){
double[] c = T.get( it.next() );
Ssum += c[0]*c[1];
s1 += c[0]*c[0];
s2 += c[1]*c[1];
}
//百分比
return Ssum / Math.sqrt( s1*s2 );
} else {
throw new Exception("传入参数有问题!");
}
} /*************************************************************
* @Title : main
* @Description: TODO(这里用一句话描述这个方法的作用)
* @param : @param args 设定文件
* @return :void 返回类型
* @throws
*************************************************************/
public static void main(String[] args)
{
String currentFolder = System.getProperty("user.dir");
String fileFolder = currentFolder+"\\file\\";
String fileName1 = fileFolder+"wait2Compare.txt";//读入待分析的数据
String fileName2 = fileFolder+"standardStrs.txt";//读入标准的数据
String[] wait2Compare=In.readStrings(fileName1);
String[] standardStrs=In.readStrings(fileName2);
for(String str1:wait2Compare)
{
for(String str2:standardStrs)
{
Vector<String> testLine1=participle(str1);
Vector<String> testLine2=participle(str2);
try
{
double similarity=getSimilarity(testLine1,testLine2);
System.out.println("两个句子的相似度为:"+similarity);
} catch (Exception e)
{
// TODO Auto-generated catch block
System.out.println("相似度 计算失败,失败原因如下:");
e.printStackTrace();
}
}
} } }
相似度分析,循环读入文件(加入了HanLP,算法第四版的库)的更多相关文章
- 算法第四版中 while (!StdIn.isEmpty()) 循环无法跳出问题
在IDEA中使用Ctrl+D就可以退出console输入
- Java利用hanlp完成语句相似度分析的案例详解
分享一篇hanlp分词工具使用的小案例,即利用hanlp分词工具分析两个中文语句的相似度的案例.供大家一起学习参考! 在做考试系统需求时,后台题库系统提供录入题目的功能.在录入题目的时候,由于题目来源 ...
- 文本离散表示(三):TF-IDF结合n-gram进行关键词提取和文本相似度分析
这是文本离散表示的第二篇实战文章,要做的是运用TF-IDF算法结合n-gram,求几篇文档的TF-IDF矩阵,然后提取出各篇文档的关键词,并计算各篇文档之间的余弦距离,分析其相似度. TF-IDF与n ...
- 八大排序算法详解(动图演示 思路分析 实例代码java 复杂度分析 适用场景)
一.分类 1.内部排序和外部排序 内部排序:待排序记录存放在计算机随机存储器中(说简单点,就是内存)进行的排序过程. 外部排序:待排序记录的数量很大,以致于内存不能一次容纳全部记录,所以在排序过程中需 ...
- 八大排序算法——基数排序(动图演示 思路分析 实例代码java 复杂度分析)
一.动图演 二.思路分析 基数排序第i趟将待排数组里的每个数的i位数放到tempj(j=1-10)队列中,然后再从这十个队列中取出数据,重新放到原数组里,直到i大于待排数的最大位数. 1.数组里的数最 ...
- 八大排序算法——归并排序(动图演示 思路分析 实例代码java 复杂度分析)
一.动图演示 二.思路分析 归并排序就是递归得将原始数组递归对半分隔,直到不能再分(只剩下一个元素)后,开始从最小的数组向上归并排序 1. 向上归并排序的时候,需要一个暂存数组用来排序, 2. 将 ...
- 八大排序算法——快速排序(动图演示 思路分析 实例代码Java 复杂度分析)
一.动图演示 二.思路分析 快速排序的思想就是,选一个数作为基数(这里我选的是第一个数),大于这个基数的放到右边,小于这个基数的放到左边,等于这个基数的数可以放到左边或右边,看自己习惯,这里我是放到了 ...
- 6.3 基于二分搜索树、链表的实现的集合Set复杂度分析
两种集合类的复杂度分析 在[6.1]节与[6.2]节中分别以二分搜索树和链表作为底层实现了集合Set,在本节就两种集合类的复杂度分析进行分析:测试内容:6.1节与6.2节中使用的书籍.测试方法:测试两 ...
- 八大排序算法——插入排序(动图演示 思路分析 实例代码java 复杂度分析)
一.动图演示 二.思路分析 例如从小到大排序: 1. 从第二位开始遍历, 2. 当前数(第一趟是第二位数)与前面的数依次比较,如果前面的数大于当前数,则将这个数放在当前数的位置上,当前数的下标-1 ...
随机推荐
- NOIP2009多项式输出(水)【A004】
[A004]潜伏者[难度A]—————————————————————————————————————————————————————————————————————————— [题目要求] 一元 n ...
- 【转】iOS学习之Storyboard中的UIScrollView使用自动布局
在使用storyboard和xib时,我们经常要用到ScrollView,还有自动布局AutoLayout,但是ScrollView和AutoLayout 结合使用,相对来说有点复杂.根据实践,我说一 ...
- 我JSP学习心得1
老师布置了一项作业,说是要按着老师的要求写,但我觉得只要是技术分享的心得就是好的,不论是不是所要求的内容. 由于和几个人在外面给别人搭建网站,项目需要学习了jsp有用到了javascript,这里有一 ...
- Memcached: List all keys
In the general case, there is no way to list all the keys that a memcached instance is storing. You ...
- java.lang.NoClassDefFoundError: javax/el/ELResolver 问题解决
HTTP Status 500 - java.lang.NoClassDefFoundError: javax/el/ELResolver type Exception report message ...
- JAVA实现复制文件夹
package com.filetest; import java.io.BufferedInputStream; import java.io.BufferedOutputStream; impor ...
- extjs后自己写了一些见不得人的脚本
<html> <head> <title> 配置管理器 </title> <style type="text/css"> ...
- grpc例子
grpc是google在github于2015年开源的一款RPC框架,虽然protobuf很早google就开源了,但是google一直没推出正式的开源框架,导致github上基于protobuf的r ...
- Java数据校验(Bean Validation / JSR303)
文档: http://beanvalidation.org/1.1/spec/ API : http://docs.jboss.org/hibernate/beanvalidation/spec/1. ...
- C# 依赖注入
http://www.cnblogs.com/leoo2sk/archive/2009/06/17/1504693.html 这篇文章真的非常非常好···绝对值得收藏学习. 目录 目录 1 ...