-
Notifications
You must be signed in to change notification settings - Fork 89
Xusheng edited this page Mar 3, 2020
·
4 revisions
分词同时会进行词性识别,词性标注请参见《HanLP 词性标注集》。
List<Term> StandardSegment(String content)
标准分词封装了 HMM-Bigram 模型,使用最短路方法分词(最短路求解采用 Viterbi 算法),兼顾了效率和效果,是常规情况下的最佳选择。
- content: 待分词的文本
- return: 分词结果,Term列表,同时包含了词语和词性
List<Term> segResult = AHANLP.StandardSegment("你好,欢迎使用AHANLP中文自然语言处理包!");
System.out.println(segResult);
[你好/vl, ,/w, 欢迎/v, 使用/v, AHANLP/nx, 中文/nz, 自然语言处理/nz, 包/v, !/w]
默认情况下返回完整的分词结果,如果要过滤标点符号等停用词,可以通过添加第二个参数控制。
List<Term> StandardSegment(String content, boolean filterStopWord)
- content: 待分词的文本
- filterStopWord: 是否过滤停用词
- return: 过滤停用词后的分词结果,Term列表,同时包含了词语和词性
List<Term> segResult = AHANLP.StandardSegment("你好,欢迎使用AHANLP中文自然语言处理包!", true);
System.out.println(segResult);
[你好/vl, 欢迎/v, 使用/v, AHANLP/nx, 中文/nz, 自然语言处理/nz, 包/v]
List<Term> NLPSegment(String content)
NLP分词封装了感知机模型,由结构化感知机序列标注框架支撑,会同时执行词性标注和命名实体识别,准确率更高,适合生产环境使用。
- content: 待分词的文本
- return: 分词结果,Term列表,同时包含了词语和词性
List<Term> segResult = AHANLP.NLPSegment("你好,欢迎使用AHANLP中文自然语言处理包!");
System.out.println(segResult);
[你好/l, ,/w, 欢迎/v, 使用/v, AHANLP/nx, 中文/nz, 自然语言处理/nz, 包/v, !/w]
默认情况下返回完整的分词结果,如果要过滤标点符号等停用词,可以通过添加第二个参数控制。
List<Term> NLPSegment(String content, boolean filterStopWord)
- content: 待分词的文本
- filterStopWord: 是否过滤停用词
- return: 过滤停用词后的分词结果,Term列表,同时包含了词语和词性
List<Term> segResult = AHANLP.NLPSegment("你好,欢迎使用AHANLP中文自然语言处理包!", true);
System.out.println(segResult);
[你好/l, 欢迎/v, 使用/v, AHANLP/nx, 中文/nz, 自然语言处理/nz, 包/v]
List<List<Term>> seg2sentence(String segType, String content, boolean filterStopWord)
对长文本按句子进行分词。按句号、问好、感叹号分隔句子(逗号、分号不分隔),返回由所有句子分词结果组成的列表。
- segType: 分词器类型,"Standard"或"NLP"
- content: 待分词的文本
- filterStopWord: 是否过滤停用词
- return: 分词结果,句子列表,每个句子由一个单词列表组成
String content = "目前,航空母舰主船体完成建造,动力、电力等主要系统设备安装到位。" +
"出坞下水是航空母舰建设的重大节点之一,标志着我国自主设计建造航空母舰取得重大阶段性成果。" +
"下一步,该航空母舰将按计划进行系统设备调试和舾装施工,并全面开展系泊试验。";
List<List<Term>> results = AHANLP.seg2sentence("Standard", content, true);
for (List<Term> senResult : results)
System.out.println(senResult);
[目前/t, 航空母舰/n, 主/ag, 船体/n, 完成/v, 建造/v, 动力/n, 电力/n, 系统/n, 设备/n, 安装/v, 到位/vi]
[出/vf, 坞/ng, 下水/vi, 航空母舰/n, 建设/vn, 重大/a, 节点/n, 标志着/v, 我国/n, 自主设计/v, 建造/v, 航空母舰/n, 取得/v, 重大/a, 阶段性/n, 成果/n]
[航空母舰/n, 按计划/d, 进行/vn, 系统/n, 设备/n, 调试/v, 舾装/nz, 施工/vn, 全面/ad, 开展/v, 系泊/nz, 试验/vn]
某些情况下,需要将文本按更加细粒度分隔句子,将逗号、分号也视作分隔符,这可以通过添加第二个参数控制。
List<List<Term>> seg2sentence(String segType, boolean shortest, String content, boolean filterStopWord)
- segType: 分词器类型,"Standard"或"NLP"
- shortest: 是否断句为最细的子句(将逗号、分号也视作分隔符)
- content: 待分词的文本
- filterStopWord: 是否过滤停用词
- return: 分词结果,句子列表,每个句子由一个单词列表组成
String content = "目前,航空母舰主船体完成建造,动力、电力等主要系统设备安装到位。" +
"出坞下水是航空母舰建设的重大节点之一,标志着我国自主设计建造航空母舰取得重大阶段性成果。" +
"下一步,该航空母舰将按计划进行系统设备调试和舾装施工,并全面开展系泊试验。";
List<List<Term>> results = AHANLP.seg2sentence("Standard", true, content, true);
for (List<Term> senResult : results)
System.out.println(senResult);
[目前/t]
[航空母舰/n, 主/ag, 船体/n, 完成/v, 建造/v]
[动力/n, 电力/n, 系统/n, 设备/n, 安装/v, 到位/vi]
[出/vf, 坞/ng, 下水/vi, 航空母舰/n, 建设/vn, 重大/a, 节点/n]
[标志着/v, 我国/n, 自主设计/v, 建造/v, 航空母舰/n, 取得/v, 重大/a, 阶段性/n, 成果/n]
[]
[航空母舰/n, 按计划/d, 进行/vn, 系统/n, 设备/n, 调试/v, 舾装/nz, 施工/vn]
[全面/ad, 开展/v, 系泊/nz, 试验/vn]
分类器接口返回的同时包含词语和词性的结果,可以通过 getWordList
和 getNatureList
单独取出词语列表和词性列表。
List<String> getWordList(List<Term> termList)
从Term列表中抽出词语列表
- termList: 分词结果
- return: 词语列表
List<Term> segResult = AHANLP.NLPSegment("你好,欢迎使用AHANLP中文自然语言处理包!", true);
System.out.println(AHANLP.getWordList(segResult));
[你好, 欢迎, 使用, AHANLP, 中文, 自然语言处理, 包]
单独获取词性列表类似
List<String> getNatureList(List<Term> termList)
- termList: 分词结果
- return: 词性列表
List<Term> segResult = AHANLP.NLPSegment("你好,欢迎使用AHANLP中文自然语言处理包!", true);
System.out.println(AHANLP.getNatureList(segResult));
[l, v, v, nx, nz, nz, v]
除了直接使用 seg2sentence
分词断句外,也可以手动将文本分隔成句子列表,然后再对句子列表进行分词。
List<String> splitSentence(String document)
将文本按句号、问好、感叹号分隔句子(逗号、分号不分隔)
- document: 待分隔句子的文本
- return: 句子列表
String content = "目前,航空母舰主船体完成建造,动力、电力等主要系统设备安装到位。" +
"出坞下水是航空母舰建设的重大节点之一,标志着我国自主设计建造航空母舰取得重大阶段性成果。" +
"下一步,该航空母舰将按计划进行系统设备调试和舾装施工,并全面开展系泊试验。";
List<String> senList = AHANLP.splitSentence(content);
for (String sen : senList)
System.out.println(sen);
目前,航空母舰主船体完成建造,动力、电力等主要系统设备安装到位。
出坞下水是航空母舰建设的重大节点之一,标志着我国自主设计建造航空母舰取得重大阶段性成果。
下一步,该航空母舰将按计划进行系统设备调试和舾装施工,并全面开展系泊试验。
某些情况下,需要将文本按更加细粒度分隔句子,将逗号、分号也视作分隔符,这可以通过添加第二个参数控制。
List<String> splitSentence(String document, boolean shortest)
- document: 待分隔句子的文本
- shortest: 是否断句为最细的子句(将逗号、分号也视作分隔符)
- return: 句子列表
String content = "目前,航空母舰主船体完成建造,动力、电力等主要系统设备安装到位。" +
"出坞下水是航空母舰建设的重大节点之一,标志着我国自主设计建造航空母舰取得重大阶段性成果。" +
"下一步,该航空母舰将按计划进行系统设备调试和舾装施工,并全面开展系泊试验。";
List<String> senList = AHANLP.splitSentence(content, true);
for (String sen : senList)
System.out.println(sen);
目前,
航空母舰主船体完成建造,
动力、电力等主要系统设备安装到位。
出坞下水是航空母舰建设的重大节点之一,
标志着我国自主设计建造航空母舰取得重大阶段性成果。
下一步,
该航空母舰将按计划进行系统设备调试和舾装施工,
并全面开展系泊试验。
List<List<Term>> splitWordInSentences(List<String> sentenceList, boolean filterStopWord)
采用标准分词对输入的句子列表进行分词
- sentenceList: 句子列表
- filterStopWord: 是否过滤停用词
- return: 句子列表,每个句子由一个单词列表组成
String content = "目前,航空母舰主船体完成建造,动力、电力等主要系统设备安装到位。" +
"出坞下水是航空母舰建设的重大节点之一,标志着我国自主设计建造航空母舰取得重大阶段性成果。" +
"下一步,该航空母舰将按计划进行系统设备调试和舾装施工,并全面开展系泊试验。";
List<String> senList = AHANLP.splitSentence(content);
List<List<Term>> senWordList = AHANLP.splitWordInSentences(senList, true);
for (List<Term> senWords : senWordList)
System.out.println(senWords);
[目前/t, 航空母舰/n, 主/ag, 船体/n, 完成/v, 建造/v, 动力/n, 电力/n, 系统/n, 设备/n, 安装/v, 到位/vi]
[出/vf, 坞/ng, 下水/vi, 航空母舰/n, 建设/vn, 重大/a, 节点/n, 标志着/v, 我国/n, 自主设计/v, 建造/v, 航空母舰/n, 取得/v, 重大/a, 阶段性/n, 成果/n]
[航空母舰/n, 按计划/d, 进行/vn, 系统/n, 设备/n, 调试/v, 舾装/nz, 施工/vn, 全面/ad, 开展/v, 系泊/nz, 试验/vn]
当然,也可以手工指定分词器类型是标准分词还是NLP分词。
List<List<Term>> splitWordInSentences(String segType, List<String> sentenceList, boolean filterStopWord)
- segType: 分词器类型,"Standard" 或 "NLP"
- sentenceList: 句子列表
- filterStopWord: 是否过滤停用词
- return: 句子列表,每个句子由一个单词列表组成
String content = "目前,航空母舰主船体完成建造,动力、电力等主要系统设备安装到位。" +
"出坞下水是航空母舰建设的重大节点之一,标志着我国自主设计建造航空母舰取得重大阶段性成果。" +
"下一步,该航空母舰将按计划进行系统设备调试和舾装施工,并全面开展系泊试验。";
List<String> senList = AHANLP.splitSentence(content);
List<List<Term>> senWordList = AHANLP.splitWordInSentences("NLP", senList, true);
for (List<Term> senWords : senWordList)
System.out.println(senWords);
[目前/t, 航空母舰/n, 主/n, 船体/n, 完成/v, 建造/v, 动力/n, 电力/n, 系统/n, 设备/n, 安装/v, 到位/v]
[出/v, 坞/Ng, 下水/v, 航空母舰/n, 建设/vn, 重大/a, 节点/n, 标志/v, 我国/n, 自主/vd, 设计/v, 建造/v, 航空母舰/n, 取得/v, 重大/a, 阶段性/n, 成果/n]
[下一步/v, 航空母舰/n, 计划/n, 进行/v, 系统/a, 设备/n, 调试/vn, 舾装/v, 施工/v, 全面/ad, 开展/v, 系泊/nz, 试验/v]