引入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;
}
@Test
void getMtsTradeObjectList() {
String text = "广东省阳江市阳西县溪头镇下村对虾养殖场【配送拨打:17896431283转5716】卢先生,17896431283-5716";
extractInfo(text);
}
}
结果
注意:提取省市区地点时可能会员识别不出来的地点,我们需要手动把生僻地点名加到自定义字典中即可。
本段代码为测试代码,实际使用需要优化。