nlp实现备注name提取

如何进行name提取?

name提取即为在一段短文本中进行name,即词性为nr的提取,我们采用hanlp进行的nlp分词,如果短文本中没有nr词性即利用n词性进行填充
import com.hankcs.hanlp.HanLP;
import com.hankcs.hanlp.seg.NShort.NShortSegment;
import com.hankcs.hanlp.seg.Segment;
import com.hankcs.hanlp.seg.Viterbi.ViterbiSegment;
import com.hankcs.hanlp.seg.common.Term;

public static String nameextract(String str) {
List list1 = new ArrayList<>();
List list2 = new ArrayList<>();
// HanLP.Config.IOAdapter = new HadoopFileIoAdapter();

    Segment segment = HanLP.newSegment()
            .enableNameRecognize(true).
                    enableCustomDictionary(true);
    Segment nShortSegment = new NShortSegment().
            enableCustomDictionary(true)
            .enablePlaceRecognize(true)
            .enableOrganizationRecognize(true);
    Segment shortestSegment = new ViterbiSegment()
            .enableCustomDictionary(true)
            .enablePlaceRecognize(true)
            .enableOrganizationRecognize(true);
    String[] strlist = str.split(",");
    for (String str1 : strlist) {
        if (str1.length() < 3) {
            list1.add(str1);
        } else {
            List<Term> termList =
                    segment.seg(str1);
            List<Term> termList1 =
                    nShortSegment.seg(str1);
            List<Term> termList2 =
                    shortestSegment.seg(str1);
            /**
             * 设定返回字段,如果常规分词检测不到人名字段,转到n-最短路径分词,再转到Viterbi分词
             * 如果三个分词均为检测到,分词标准降为名词,依次进行上述三种分词
             */
            for (Term aTermList : termList)
                if (aTermList.nature.toString().contains("nr")) {
                    list1.add(aTermList.word);
                    list2.add(aTermList.word);
                }
            if (list2.size() == 0) for (Term aTermList : termList1)
                if (aTermList.nature.toString().contains("nr")) {
                    list1.add(aTermList.word);
                    list2.add(aTermList.word);

                }
            if (list2.size() == 0) {
                for (Term aTermList : termList2)
                    if (aTermList.nature.toString().contains("nr")) {
                        list1.add(aTermList.word);
                        list2.add(aTermList.word);
                    }
            }
            if (list2.size() == 0) {
                for (Term aTermList : termList)
                    if (aTermList.nature.toString().contains("n")) {
                        list1.add(aTermList.word);
                        list2.add(aTermList.word);
                        break;
                    }
                if (list2.size() == 0)
                    for (Term aTermList : termList1)
                        if (aTermList.nature.toString().contains("n")) {
                            list1.add(aTermList.word);
                            list2.add(aTermList.word);
                            break;
                        }

                if (list2.size() == 0) {
                    for (Term aTermList : termList2)
                        if (aTermList.nature.toString().contains("n")) {
                            list1.add(aTermList.word);
                            list2.add(aTermList.word);
                            break;
                        }
                }
            }
            list2.clear();
        }
    }
    return list1.toString().replace("[", "").replace("]", "");
}
public static void main(String[] args){
Sysout.print.out(nameextract("小红第一次写文章"))
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Xuxixixixixixix

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

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

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

打赏作者

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

抵扣说明:

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

余额充值