自然语言处理hanlp------10HanLP的词典分词实现


前言

其实,单纯从我们的实用来看,前面的所有章节都无需理解,本节才是关键,就像绝大部分人不会去追究1+1为什么等于2,我们只需要知道它等于2即可

hanlp分词主要有两个,对应前面章节学习的双数组字典树和基于双数组的AC树。
类名分别为:
DoubleArrayTireSegmentAhoCorasickDoubleArrayTireSegment


一、java版实战

我们之间去调用hanlp已经写好的类即可,这里只演示DoubleArrayTrieSegment,因为另一个没区别(只是类调用,无关实现,使用的方法是完全一样的)

下面三点记住,实战戳手可得:

  1. 对象.seg(“文本”)
  2. HanLP.Config.ShowTermNature = false; // 分词结果不显示词性
  3. 对象.enablePartOfSpeechTagging(true); // 激活数词和英文识别

先上代码:

public class DemoDoubleArrayTrieSegment
{
    public static void main(String[] args) throws IOException
    {
        HanLP.Config.ShowTermNature = false; // 分词结果不显示词性
        // 默认加载配置文件指定的 CoreDictionaryPath
        DoubleArrayTrieSegment segment = new DoubleArrayTrieSegment();
        System.out.println(segment.seg("江西鄱阳湖干枯,中国最大淡水湖变成大草原"));
        // 也支持加载自己的词典
        String dict1 = "src/data/dictionary/CoreNatureDictionary.mini.txt";
        String dict2 = "src/data/dictionary/custom/上海地名.txt ns";
        segment = new DoubleArrayTrieSegment(dict1, dict2);
        System.out.println(segment.seg("上海市虹口区大连西路550号SISU"));

        segment.enablePartOfSpeechTagging(true);    // 激活数词和英文识别
        HanLP.Config.ShowTermNature = true;         // 顺便观察一下词性
        System.out.println(segment.seg("上海市虹口区大连西路550号SISU"));

        for (Term term : segment.seg("上海市虹口区大连西路550号SISU"))
        {
            System.out.printf("单词:%s 词性:%s\n", term.word, term.nature);
        }
    }
}

在这里插入图片描述

二、Python版实战

Python版其实一样,但要熟悉一点,数据在pyhanlp.static下
此外:
java的segment传入文本直接放入多个参数即可,Python的是转为列表放入。

from pyhanlp import *
from pyhanlp.static import HANLP_DATA_PATH

HanLP.Config.ShowTermNature = False
segment = DoubleArrayTrieSegment()
print(segment.seg('江西鄱阳湖干枯,中国最大淡水湖变成大草原'))

dict1 = HANLP_DATA_PATH + "/dictionary/CoreNatureDictionary.mini.txt"
dict2 = HANLP_DATA_PATH + "/dictionary/custom/上海地名.txt ns"
segment = DoubleArrayTrieSegment([dict1, dict2])
print(segment.seg('上海市虹口区大连西路550号SISU'))

segment.enablePartOfSpeechTagging(True)
HanLP.Config.ShowTermNature = True
print(segment.seg('上海市虹口区大连西路550号SISU'))

for term in segment.seg('上海市虹口区大连西路550号SISU'):
    print("单词:%s 词性:%s" % (term.word, term.nature))

总结

本章节的东西其实并不多,但却是最关键的,一定要熟练掌握并运用。
补充一个细节:
路径的后面有个 ns,意思为词典的词语默认词性为ns,默认词性的存在,用户就不需要逐个标记词性了,比如:你自己写了两个文本,一个是人名,一个是地名,那你只需要在读取的时候前者写nr后者写个ns即可。 不需要再在文本中每个人名或者地名后面标注nr ns。

此外:本人创建了QQ交流群,希望大家来交流学习(新群人少,不是假群o(╥﹏╥)o…)

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

iterhui

谢谢您对iterhui的支持!

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

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

打赏作者

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

抵扣说明:

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

余额充值