新詞發現算法
本「新詞發現」模塊基於信息熵和互信息兩種算法,能夠在無語料的狀況下提取一段長文本中的詞語,並支持過濾掉系統中已存在的「舊詞」,獲得新詞列表。函數
調用方法工具
靜態方法.net
一句話靜態調用接口已經封裝到HanLP中:排序
/**接口
* 提取詞語資源
*get
* @param text 大文本io
* @param size 須要提取詞語的數量class
* @return 一個詞語列表
*/
public static List<WordInfo> extractWords(String text, int size)
/**
* 提取詞語
*
* @param reader 從reader獲取文本
* @param size 須要提取詞語的數量
* @return 一個詞語列表
*/
public static List<WordInfo> extractWords(BufferedReader reader, int size) throws IOException
/**
* 提取詞語(新詞發現)
*
* @param text 大文本
* @param size 須要提取詞語的數量
* @param newWordsOnly 是否只提取詞典中沒有的詞語
* @return 一個詞語列表
*/
public static List<WordInfo> extractWords(String text, int size, boolean newWordsOnly)
/**
* 提取詞語(新詞發現)
*
* @param reader 從reader獲取文本
* @param size 須要提取詞語的數量
* @param newWordsOnly 是否只提取詞典中沒有的詞語
* @return 一個詞語列表
*/
public static List<WordInfo> extractWords(BufferedReader reader, int size, boolean newWordsOnly) throws IOException
調用示例請參考com.hankcs.demo.DemoNewWordDiscover。 值得注意的是,在計算資源容許的狀況下,文本越長,結果質量越高。對於一些零散的文章,應當合併爲整個大文件傳入該算法。
高級參數
根據語料的長度或用詞的不一樣,默認的參數有可能不能獲得最佳的結果。咱們能夠經過構造不一樣的NewWordDiscover調整提取算法。該構造函數以下:
/**
* 構造一個新詞識別工具
* @param max_word_len 詞語最長長度
* @param min_freq 詞語最低頻率
* @param min_entropy 詞語最低熵
* @param min_aggregation 詞語最低互信息
* @param filter 是否過濾掉HanLP中的詞庫中已存在的詞語
*/
public NewWordDiscover(int max_word_len, float min_freq, float min_entropy, float min_aggregation, boolean filter)
其中:
· max_word_len控制識別結果中最長的詞語長度,默認值是4;該值越大,運算量越大,結果中出現短語的數量也會越多。
· min_freq控制結果中詞語的最低頻率,低於該頻率的將會被過濾掉,減小一些運算量。因爲結果是按照頻率排序的,因此該參數其實意義不大。
· min_entropy控制結果中詞語的最低信息熵的值,通常取0.5左右。該值越大,越短的詞語就越容易被提取出來。
· min_aggregation控制結果中詞語的最低互信息值,通常取50到200.該值越大,越長的詞語就越容易被提取出來,有時候會出現一些短語。
· filter設爲true的時候將使用內部詞庫過濾掉「舊詞」。