自然语言处理hanlp------6-1字典树的实现

本文涉及的产品
NLP自然语言处理_基础版,每接口每天50万次
NLP自然语言处理_高级版,每接口累计50万次
NLP 自学习平台,3个模型定制额度 1个月
简介: 自然语言处理hanlp------6-1字典树的实现

前言

匹配算法的瓶颈之一在于如何判断词典中是否含有字符串,如果用有序集合(TreeMap)复杂度是O(logn),如果用散列列表(java的Hashmap或者Python的dict),时间复杂度降低,但是内存复杂度上升


所以需要自行设计算法


一、字典树是什么?

字典树(Trie、前缀树)和后缀树是单词处理的树形数据结构。

约定用None表示节点不对应词语,这样不能插入None值了,但是实现起来更简洁


二、实现代码

1.代码展示

代码如下(示例):

# -*- coding:utf-8 -*-
class Node(object):
    def __init__(self, value) -> None:
        self._children = {}
        self._value = value
    def _add_child(self, char, value, overwrite=False):
        child = self._children.get(char)
        if child is None:
            child = Node(value)
            self._children[char] = child
        elif overwrite:
            child._value = value
        return child
class Trie(Node):
    def __init__(self) -> None:
        super().__init__(None)
    def __contains__(self, key):
        return self[key] is not None
    def __getitem__(self, key):
        state = self
        for char in key:
            state = state._children.get(char)
            if state is None:
                return None
        return state._value
    def __setitem__(self, key, value):
        state = self
        for i, char in enumerate(key):
            if i < len(key) - 1:
                state = state._add_child(char, None, False)
            else:
                state = state._add_child(char, value, True)


2.测试代码

代码如下:

if __name__ == '__main__':
    trie = Trie()
    # 增
    trie['自然'] = 'nature'
    trie['自然人'] = 'human'
    trie['自然语言'] = 'language'
    trie['自语'] = 'talk  to oneself'
    trie['入门'] = 'introduction'
    assert '自然' in trie
    # 删
    trie['自然'] = None
    assert '自然' not in trie
    # 改
    trie['自然语言'] = 'human language'
    assert trie['自然语言'] == 'human language'
    # 查
    assert trie['入门'] == 'introduction'


实测

运行效果展示

20201223111042676.png

简单来说,没有想象的那么复杂,通过设计一个前缀树,随着路径的深入,前缀匹配是递进的过程,算法不必比较字符串的前缀,所以就会相对较快一些。

相关文章
|
存储 自然语言处理
自然语言处理hanlp------9基于双数组字典树的AC自动机
自然语言处理hanlp------9基于双数组字典树的AC自动机
自然语言处理hanlp------9基于双数组字典树的AC自动机
|
存储 自然语言处理 算法
自然语言处理hanlp------7-2双数组字典树(*初学者可选择性学习)
自然语言处理hanlp------7-2双数组字典树(*初学者可选择性学习)
自然语言处理hanlp------7-2双数组字典树(*初学者可选择性学习)
|
自然语言处理 算法 Java
自然语言处理hanlp------7-1双数组字典树
自然语言处理hanlp------7-1双数组字典树
自然语言处理hanlp------7-1双数组字典树
|
自然语言处理 算法 Java
自然语言处理hanlp------6-2字典树的实现
自然语言处理hanlp------6-2字典树的实现
自然语言处理hanlp------6-2字典树的实现
|
2天前
|
机器学习/深度学习 人工智能 自然语言处理
【自然语言处理】TF-IDF算法在人工智能方面的应用,附带代码
TF-IDF算法在人工智能领域,特别是自然语言处理(NLP)和信息检索中,被广泛用于特征提取和文本表示。以下是一个使用Python的scikit-learn库实现TF-IDF算法的简单示例,并展示如何将其应用于文本数据。
118 65
|
3天前
|
机器学习/深度学习 人工智能 自然语言处理
【自然语言处理】python之人工智能应用篇——文本生成技术
文本生成是指使用自然语言处理技术,基于给定的上下文或主题自动生成人类可读的文本。这种技术可以应用于各种领域,如自动写作、聊天机器人、新闻生成、广告文案创作等。
21 8
|
3天前
|
机器学习/深度学习 人工智能 自然语言处理
【深度学习】探讨最新的深度学习算法、模型创新以及在图像识别、自然语言处理等领域的应用进展
深度学习作为人工智能领域的重要分支,近年来在算法、模型以及应用领域都取得了显著的进展。以下将探讨最新的深度学习算法与模型创新,以及它们在图像识别、自然语言处理(NLP)等领域的应用进展。
16 6
|
1天前
|
机器学习/深度学习 自然语言处理
深度学习在自然语言处理中的应用与挑战
【8月更文挑战第19天】深度学习技术已成为自然语言处理(NLP)领域的一股不可忽视的力量,它通过模拟人脑处理信息的方式,极大地推动了语言识别、机器翻译、情感分析等任务的发展。然而,技术的快速进步也带来了新的挑战,包括数据依赖性强、模型可解释性差等问题。本文将深入探讨深度学习在NLP中的主要应用及其面临的技术障碍,并展望未来的发展方向。
|
2天前
|
机器学习/深度学习 人工智能 自然语言处理
【自然语言处理】自然语言处理NLP概述及应用
自然语言处理(Natural Language Processing,简称NLP)是一门集计算机科学、人工智能以及语言学于一体的交叉学科,致力于让计算机能够理解、解析、生成和处理人类的自然语言。它是人工智能领域的一个关键分支,旨在缩小人与机器之间的交流障碍,使得机器能够更有效地识别并响应人类的自然语言指令或内容。
11 4
|
6天前
|
机器学习/深度学习 自然语言处理 数据可视化
深度学习在自然语言处理中的应用与挑战
【8月更文挑战第14天】本文将深入探讨深度学习技术在自然语言处理领域的应用及其所面临的挑战。我们将分析深度学习如何改变了文本分析、语音识别和机器翻译等领域,并讨论当前技术的局限性以及未来的发展方向。文章旨在为读者提供一个全面的视角,了解深度学习技术在处理人类语言方面的能力及其潜在的改进空间。