Skip to content
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]

NLP分词

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]

单独获取词语和词性列表

分类器接口返回的同时包含词语和词性的结果,可以通过 getWordListgetNatureList 单独取出词语列表和词性列表。

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]