Python實現trie進行機械分詞

2021-08-11 12:15:15 字數 1981 閱讀 3354

# -*- coding: utf-8 -*-

class

node

(object):

""" 建立trie樹節點,包含私有變數,isend表示是否是詞的末尾節點

name表示儲存的值

son__nodes表示子節點

"""#python中沒有private,用兩個下劃線表示私有變數。

def__init__

(self,isend,name):

self.__isend=isend

self.__name=name

self.__son_nodes =

defget_name

(self):

return self.__name

#python中對私有變數的get和set方法

defset_name

(self, value):

self.__name = value

defget_isend

(self):

return self.__isend

defset_isend

(self,value):

self.__isend=value

defget_son_nodes

(self):

return self.__son_nodes

defset_son_nodes

(self,value):

self.__son_nodes=value

defadd_son

(self,son_node):

""" 新增子節點

:param son_node:子節點

:return:

"""def

findnode

(self,name):

""" 判斷name節點是不是在子節點中,如果在返回子節點,如果不在返回-1

:param name:

:return:

"""for node in self.__son_nodes:

if node.get_name()==name:

return node

return

none

class

trietree:

""" 樹類root變數保證只能建立乙個樹

"""root=node(false,"root")

def__init__

(self):

pass

definsert

(self,word):

""" 在node新新增子節點

:param word:需要新增的詞語

:param node:在node的後面新增節點

:return:

"""currentnode=self.root

lenghts=len(word)

for i in range(0,lenghts):

now_node=currentnode.findnode(word[i])

if now_node is

none:

new_node=node(false,word[i])

currentnode=new_node

else:

currentnode = now_node

currentnode.set_isend(true)

#建立字典樹

# file=open("/home/liusenubuntu/file/segment/newdict.txt","r",encoding="utf8")

file=["左側壁","右側壁","左右側壁"]

tree=trietree()

for word in file:

tree.insert(word.strip())

print("構建成功")

Trie樹的實現

一 定義 trie,又稱字典樹,是一種用於快速檢索的二十六叉樹結構。典型的空間換時間 二 結構圖 三 原理 特別地 和二叉查詢樹不同,在trie樹中,每個結點上並非儲存乙個元素。四 性質 0 利用串的公共字首,節約記憶體 1 在trie樹上進行檢索總是始於根結點 2 根節點不包含字元,除根節點外的每...

python實現感知機

import numpy as np 定義啟用函式 def acti fun x return 1 if x 0 else 0 建立感知器類 class perception object 初始化權重 def init self self.weights 0 self.bias 1 定義訓練函式,包...

python實現AND感知機

and感知機通過訓練後,可以進行邏輯 與 的運算。例如 當輸入 1,1時,輸出為1 輸入1,0時,輸出為0。通過上圖,我們可以發現 0,0 0,1 1,0 這三個點數表示輸出為0,而點 1,1 表示輸出為1,所以我們可以近似找到一條直線將輸出為0的點與輸出為1的點分隔開。我們可以通過不斷訓練係數 即...