Java利用HanLP提取字符串中的人名和省市区实现收货地址自动识别功能

引入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);
    }
}

结果

在这里插入图片描述
注意:提取省市区地点时可能会员识别不出来的地点,我们需要手动把生僻地点名加到自定义字典中即可。

本段代码为测试代码,实际使用需要优化。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

老齐谈电商

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值