引入HanLP
<dependency><groupId>com.hankcs</groupId><artifactId>hanlp</artifactId><version>portable-1.8.2</version>
</dependency>
代码
package com.cnnasi.api.service.impl;
import com.hankcs.hanlp.HanLP;
import com.hankcs.hanlp.dictionary.CustomDictionary;
import com.hankcs.hanlp.seg.common.Term;
import org.junit.jupiter.api.Test;import java.util.ArrayList;
import java.util.List;
import static org.junit.jupiter.api.Assertions.*;class MtsTradeOrderServiceImplTest {// 提取收件人、省市区等信息public static void extractInfo(String text) {// 提取收件人(假设收件人是人名,一般为中文)List<String> names = extractNames(text);List<String> addr = extractProvince(text);// 输出提取的信息System.out.println("收件人: " + names);System.out.println("省市区: " + addr);}// 提取收件人信息(通过命名实体识别)private static List<String> extractNames(String text) {List<String> names = new ArrayList<>();List<Term> terms = HanLP.segment(text);for (Term term : terms) {if (term.nature.toString().equals("nr")) { // "nr"是人名的标记names.add(term.word);}}return names;}// 提取省市区(通过命名实体识别)private static List<String> extractProvince(String text) {List<String> add = new ArrayList<>();CustomDictionary.add("阳西县", "ns"); // 手动添加一个词List<Term> terms = HanLP.segment(text);for (Term term : terms) {if (term.nature.toString().startsWith("ns")) { // "ns" 是地点词的标记add.add(term.word);}}return add;}@Testvoid getMtsTradeObjectList() {String text = "广东省阳江市阳西县溪头镇下村对虾养殖场【配送拨打:17896431283转5716】卢先生,17896431283-5716";extractInfo(text);}
}
结果
注意:提取省市区地点时可能会员识别不出来的地点,我们需要手动把生僻地点名加到自定义字典中即可。
本段代码为测试代码,实际使用需要优化。