今天查阅ansj源码是看到权重这里:
private List<Keyword> computeArticleTfidf(String content, int titleLength) {
Map<String, Keyword> tm = new HashMap<String, Keyword>();
List<Term> parse = NlpAnalysis.parse(content);
for (Term term : parse) {
double weight = getWeight(term, content.length(), titleLength);
if (weight == 0)
continue;
Keyword keyword = tm.get(term.getName());
if (keyword == null) {
keyword = new Keyword(term.getName(), term.natrue().allFrequency, weight);
tm.put(term.getName(), keyword);
} else {
keyword.updateWeight(1);
}
}
TreeSet<Keyword> treeSet = new TreeSet<Keyword>(tm.values());
ArrayList<Keyword> arrayList = new ArrayList<Keyword>(treeSet);
if (treeSet.size() <= nKeyword) {
return arrayList;
} else {
return arrayList.subList(0, nKeyword);
}
}
考虑到怕许问题,其实java中接口Set有众多实现类,而HashSet和TreeSet是最常用的两个,通过TreeSet实现排序的2种方式:
1.通过TreeSet(Comparator<? super E> comparator) 构造方法指定TreeSet的比较器进行排序;
2.使用TreeSet()构造方法,并对需要添加到set集合中的元素实现Comparable接口进行排序;
跟踪源代码,可以发现上面的例子,实用的就是第二种方式,查看Keyword类:
public class Keyword implements Comparable<Keyword>
可以看到该类以下方法:
@Override
public int compareTo(Keyword o) {
if (this.score < o.score) {
return 1;
} else {
return -1;
}
}
接下来我们实现一下第一种方式:
实体类:
public class AA {
private int num;
public int getNum() {
return num;
}
public void setNum(int num) {
this.num = num;
}
public String toString()
{
return "AA:" + this.getNum() + ",";
}
}
比较器:
import java.util.Comparator;
public class MyComparator implements Comparator<AA> {
public int compare(AA a1,AA a2) {
if (f1.getNum() > f2.getNum())
{
return 1;
}
else if (a1.getNum() == a2.getNum())
{
return 0;
}
else
{
return -1;
}
}
}
接下来就是使用了:
TreeSet<Foo> set = new TreeSet(new MyComparator());
这样在set.add()元素时就会根据自己定义比较器进行排序了。
程序猿行业技术生活交流群:181287753(指尖天下),欢迎大伙加入交流学习。
分享到:
相关推荐
本教程特点: 1.更适合零基础学员: ·自Java语言起源始,循序渐进,知识点剖析细致且每章配备大量随堂练习,让你步步为营,学得透彻、练得明白 ·拒绝晦涩难懂的呆板教学,宋老师语言生动幽默,举例形象生动深入浅...
下面小编就为大家带来一篇浅谈java中的TreeMap 排序与TreeSet 排序。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
下面小编就为大家带来一篇浅谈TreeSet中的两种排序方式。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
通过TreeSet类直接对学生成绩实现了排序功能,不必要进行相关额外的排序来实现!
用TreeSet添加字符串,按照字符串首字母字母顺序和字符串长度顺序排序
本文介绍TreeSet支持两种排序方法:自然排序和定制排序。TreeSet默认采用自然排序。详细请看下
public int compare(String o1,String o2) { return o1.length()-o2.length();... TreeSet ts = new TreeSet(com); ts.add("string"); ts.add("char"); ts.add("nothing�"); System.out.println(ts);
java2实验实用模板代码(第三版) 上机实践1 初识JAVA 3 实验1 一个简单的应用程序 3 实验2 一个简单的JAVA APPLET程序 3 实验3 联合编译 4 上机实践2 基本数据类型与控制语句 6 ...实验2 使用TREESET排序 86
使用TreeSet和Comparator,编写TreeSetTest2类,要求对TreeSet中的元素1-元素10进行排列,排序逻辑为奇数在前偶数在后,奇数按照升序排列,偶数按照降序排列。 如果需要的话可以下载,有写成文章的。有写了一点中文...
排序性:TreeSet 中的元素是有序的,默认按照元素的自然顺序进行排序。或者,可以在创建 TreeSet 时提供一个比较器(Comparator)来指定自定义的排序规则。 唯一性:TreeSet 中不允许重复元素,每个元素都必须是...
发布于2012-5-8TreeSet支持两种排序方法:自然排序和定制排序。TreeSet默认采用自然排序。TreeSet会调用集合元素的compareTo(Objectobj)方法来比较元素之间大小关系,然后将集合元素按升序排列,这种方式就是自然...
NULL 博文链接:https://elvin-chu.iteye.com/blog/1942033
实验3 使用TREESET排序........................................................................................................78 上机实践12 JAVA SWING......................................................
* 元素由它们的⾃然 Comparable 排序,或者通过⼀个由顺序 set 创建时特别提供的 * Comparator。这个 set 的迭代器将会以递增元素顺序横穿 set。提供多个额外的操作来⽀持排 * 序。(这个接⼝与 SortedMap 的 set ...
计算机后端-Java-Java核心基础-第24章 集合01 25. TreeSet的自然排序.avi
计算机后端-Java-Java核心基础-第24章 集合01 26. TreeSet的定制排序.avi
实验3 使用TreeSet排序 72 上机实践12 java Swing 74 实验1 JLayeredPane分层窗格 74 实验2 使用表格显示日历 75 实验3 多文档界面(MDI) 78 上机实践1 初识Java 实验1 一个简单的应用程序 2.模板代码 Hello....
Java是全球排名第一的编程语言,Java工程师也是市场需求最大的软件工程师。 从互联网到企业平台,Java是应用最广泛的编程语言. Java是基于JVM虚拟机的跨平台语言,一次编写,到处运行; Java程序易于编写,而且有...
TreeSet支持两种排序方式: 自然排序:TreeSet会调用集合元素的compareTo(Object obj)方法来比较元素之间大小关系,然后将集合元素按升序排列。 定制排序:在创建TreeSet集合对象时,并提供一个Comparator接口...
java HashSet 集合排序,需要通过利用TreeSet集合排序。2013-10-30。