HanLP 自然语言处理

Java / 637人浏览 / 0人评论
  • 发现新词
通过 extractWords 方法进行新词发现

HanLP.extractWords(IOUtil.newBufferedReader(CORPUS_PATH_HLM), 1000, false, 7, 0.0f, .8f, 170f);
提取词语(新词发现)
参数:
reader – 从reader获取文本
size – 需要提取词语的数量
newWordsOnly – 是否只提取词典中没有的词语
max_word_len – 词语最长长度 , 值越大计算量越大
min_freq – 词语最低频率 , 意义不大 , 结果最后就是按照这个排序的
min_entropy – 词语最低熵 , 一般0.5左右 , 值越大越短的词语越容易被提取出来
min_aggregation – 词语最低互信息 , 一般50 - 200 , 值越大越长的越容易被提取出来
返回值: 一个词语列表

新词发现之后 , 人工对发现的新词进行增删改处理,行程一个初始词库.
词库加入到\data\dictionary\custom 文件中 , 并修改 hanlp.properties 文件, 字段 : CustomDictionaryPath ,进行用户自定义词典添加 , 同时删除 \data\dictionary\custom 路径中的.bin缓存文件.


  • CRF++ 训练模型
训练模型需要准备文件 , 训练文件注意格式(utf-8) , 文件词语以空格分割 , 特殊词语要处理掉
    //生成模型文件名和路径
public static final String CRF_MODEL_PATH = "data\\crf-car-model";
//生成hanlp识别模型文件名和路径
public static final String CRF_MODEL_TXT_PATH = "data\\crf-car-model.txt";
//分词处理之后的训练文件
private static final String TRAIN_PATH = "data\\onefile_out1.txt"; //测试训练结果用,未分词的原始文件
private static final String TEST_PATH = "data\\onefile2.txt";
//测试训练分词结果的正确分词对比文件
private static final String GOLD_PATH = "data\\onefile_out2.txt";
//测试使用词典
private static final String TRAIN_WORDS = "data\\onefile_word.txt";
//测试输出分词文件
private static final String OUTPUT_PATH = "data\\onefile_out_put.txt";
//模型训练
CRFSegmenter segmenter = new CRFSegmenter(null);
segmenter.train(corpus, CRF_MODEL_PATH);
//模型测试
System.out.println(CWSEvaluator.evaluate(segment, TEST_PATH, OUTPUT_PATH, GOLD_PATH, TRAIN_WORDS)); // 标准化评测

  • 调用分词方法
//标准分词
List<Term> strad = HanLP.segment(text);
System.out.println("标准分词:"); //N-最短路径分词
//enableCustomDictionary 用户字典
//enablePlaceRecognize 开启地名识别
//enableOrganizationRecognize 开启机构名识别
Segment nShortSegment = new NShortSegment().enableCustomDictionary(true).enablePlaceRecognize(true).enableOrganizationRecognize(true);
List<Term> nn = nShortSegment.seg(text); //NLP分词
List<Term> termList = NLPTokenizer.segment(text); //CRF分词
//enablePartOfSpeechTagging 开启词性标注
//CRF_MODEL_TXT_PATH 用户自训练模型路径
//用户自训练模型
Segment segment = new CRFLexicalAnalyzer(CRF_MODEL_TXT_PATH).enableCustomDictionary(true).enablePartOfSpeechTagging(true);
//使用系统默认模型
Segment segment = new CRFLexicalAnalyzer().enableCustomDictionary(true).enablePartOfSpeechTagging(true);
List<Term> crf = segment.seg(text); //关键字
//识别内容 , 提取个数
List<String> keywordList = HanLP.extractKeyword(text, 3); //过滤停词
CoreStopWordDictionary.apply(termList);


0 条评论

还没有人发表评论

发表评论 取消回复