這幾天在做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值計算了...
詳細代碼見附件...