这几天在做TFIDF的Java实现,昨天实现了英文的TFIDF,但是中文的老是出问题,分词后只能显示部分词(只能计算3个汉字组成的词)的TFIDF值,让人很郁闷....
经过仔细分析,终于发现了问题的所在,是由于edu.udo.cs.wvtool.generic.wordfilter.AbstractStopWordFilter这个抽象类惹的祸,在这个抽象类中有如下代码:
private int minNumChars; //一次读取的最低字数
private final static int DEFAULT_MIN_CHARS = 3; //minNumChars默认值
所以导致中文TFIDF值只能计算3个字组成的词,修改办法有两种:
1.将 DEFAULT_MIN_CHARS 默认值改为1;
2.在AbstractStopWordFilter的子类中添加构造方法,使它能够给minNumChars赋值。以DummyWordFilter为例,添加后如下:
public class DummyWordFilter extends AbstractStopWordFilter {
public DummyWordFilter(){
}
public DummyWordFilter(int i){
super(i);
}
protected boolean isStopword(String t) {
return false;
}
}
这样就可以实现中文的TFIDF值计算了...
详细代码见附件...