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

本文涉及的产品
NLP自然语言处理_高级版,每接口累计50万次
NLP 自学习平台,3个模型定制额度 1个月
NLP自然语言处理_基础版,每接口每天50万次
简介: 自然语言处理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);
        }
    }
}

image.png


二、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。

相关文章
|
5月前
|
机器学习/深度学习 自然语言处理 算法
分词算法在自然语言处理中的应用与性能比较
分词算法在自然语言处理中的应用与性能比较
|
4月前
|
机器学习/深度学习 自然语言处理 算法
分词算法在自然语言处理中的应用与性能比较
分词算法在自然语言处理中的应用与性能比较
|
4月前
|
机器学习/深度学习 自然语言处理 算法
分词算法在自然语言处理中的基本原理与应用场景
分词算法在自然语言处理中的基本原理与应用场景
|
6月前
|
自然语言处理 算法 Python
【Python自然语言处理】规则分词中正向、反向、双向最大匹配法的讲解及实战(超详细 附源码)
【Python自然语言处理】规则分词中正向、反向、双向最大匹配法的讲解及实战(超详细 附源码)
219 0
|
机器学习/深度学习 数据采集 人工智能
NLP之文本分词综述
NLP之文本分词综述
492 0
|
数据采集 自然语言处理 算法
java应用集成HanLP进行中文自然语言分词详细完整案例以及demo源码
java应用集成HanLP进行中文自然语言分词详细完整案例以及demo源码
50694 1
java应用集成HanLP进行中文自然语言分词详细完整案例以及demo源码
|
自然语言处理 Python
【NLP Tool -- NLTK】NLTK进行英文情感分析、分词、分句、词性标注(附代码)
NLP自然语言处理之NLTK工具的使用,进行英文情感分析、分词、分句、词性标注(附代码)
830 0
|
机器学习/深度学习 自然语言处理 算法
预测分词---Python自然语言处理(8)
预测分词---Python自然语言处理(8)
247 1
预测分词---Python自然语言处理(8)
|
自然语言处理 算法
NLP学习笔记(十) 分词(下)
NLP学习笔记(十) 分词(下)
161 0
|
机器学习/深度学习 自然语言处理 算法
NLP学习笔记(九) 分词(上)
NLP学习笔记(九) 分词(上)
73 0

热门文章

最新文章