新词发现算法
本“新词发现”模块基于信息熵和互信息两种算法,能够在无语料的状况下提取一段长文本中的词语,并支持过滤掉系统中已存在的“旧词”,获得新词列表。函数
调用方法工具
静态方法.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的时候将使用内部词库过滤掉“旧词”。