自然语言处理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字典树的实现
|
25天前
|
机器学习/深度学习 人工智能 自然语言处理
【自然语言处理】TF-IDF算法在人工智能方面的应用,附带代码
TF-IDF算法在人工智能领域,特别是自然语言处理(NLP)和信息检索中,被广泛用于特征提取和文本表示。以下是一个使用Python的scikit-learn库实现TF-IDF算法的简单示例,并展示如何将其应用于文本数据。
181 65
|
15天前
|
机器学习/深度学习 人工智能 自然语言处理
AI技术在自然语言处理中的应用与挑战
【8月更文挑战第28天】本文将探讨AI技术在自然语言处理(NLP)领域的应用及其面临的挑战。我们将通过实例和代码示例,展示AI如何帮助机器理解和生成人类语言,并讨论在这一过程中遇到的主要问题和可能的解决方案。
|
16天前
|
机器学习/深度学习 人工智能 自然语言处理
AI技术在自然语言处理中的应用
【8月更文挑战第27天】本文将探讨人工智能技术在自然语言处理领域的应用,包括语音识别、机器翻译、情感分析等方面。我们将通过实例展示AI如何改变我们与计算机的交互方式,并讨论其在未来发展的潜力。
|
17天前
|
机器学习/深度学习 人工智能 自然语言处理
AI技术在自然语言处理中的应用与挑战
【8月更文挑战第26天】本文将探讨AI技术在自然语言处理(NLP)领域的应用和面临的挑战。我们将通过实例分析,展示AI如何帮助机器理解和生成人类语言,并讨论当前技术的局限性和未来发展的可能性。
|
18天前
|
人工智能 自然语言处理 语音技术
AI在自然语言处理中的应用
【8月更文挑战第24天】人工智能(AI)已经渗透到我们生活的方方面面,其中自然语言处理(NLP)是AI的一个重要应用领域。本文将介绍NLP的基本概念,以及AI如何帮助计算机理解和生成人类语言。我们将通过一个简单的代码示例,展示如何使用Python和NLTK库进行文本分析。
|
20天前
|
机器学习/深度学习 人工智能 自然语言处理
探索机器学习在自然语言处理中的应用
【8月更文挑战第22天】本文将深入探讨机器学习技术如何革新自然语言处理领域,从基础概念到高级应用,揭示其背后的原理和未来趋势。通过分析机器学习模型如何处理、理解和生成人类语言,我们将展示这一技术如何塑造我们的沟通方式,并讨论它带来的挑战与机遇。

热门文章

最新文章