目前做分詞比較流行的是用深度學習來做,比如用迴圈神經網路和條件隨機場,也有直接用條件隨機場或隱馬爾科夫模型的。前面也實現過上面幾種,效果挺不錯,基於隱馬爾科夫模型的差一點,條件隨機場的效果較好,而加入深度學習的效果最好。
而最最傳統的分詞做法很多都是基於字典的,然後通過最大匹配法匹配,效果比較一般。效果雖然一般,但我們還是看下怎麼實現的吧。
trie 是一種搜尋樹,它的 key 都為字串,通過 key 可以找到 value。能做到高效查詢和插入,時間複雜度為o(k),缺點是耗記憶體。它的核心思想就是減少沒必要的字元比較,使查詢高效率,即用空間換時間,再利用共同字首來提高查詢效率。
trie樹的根節點不包含字元,根節點到某節點的路徑連起來的字串為該節點對應的字串,每個節點只包含乙個字元,此外,任意節點的所有子節點的字元都不相同。
比如如下,將五個詞語新增到trie樹中,最後的結構如圖所示。
trietree tree = new trietree();
tree.put("美利堅");
tree.put("美麗")
Trie樹(字典樹)的實現
trie樹,即字典樹,又稱單詞查詢樹或鍵樹,是一種樹形結構,是一種雜湊樹的變種。典型應用是用於統計和排序大量的字串 但不僅限於字串 所以經常被搜尋引擎系統用於文字詞頻統計。它的優點是 最大限度地減少無謂的字串比較,查詢效率比雜湊表高。trie的核心思想是空間換時間。利用字串的公共字首來降低查詢時間的...
trie樹 字典樹 java實現
public class trie public void insert string word else current.count current.isend true 怎麼判斷單詞是否存在?被判斷的單詞的字母與根節點下的子節點的字母進行比較,直到匹配到兩者最後乙個字母相同,並且最後乙個節點的i...
Trie字典樹陣列實現
include using namespace std const int n 10010 int son n 26 儲存下乙個字元的行 int count n 這個單詞單詞有多少個 int pos 當前新分配的儲存位置 char szstr n 讀取字串 void stringinsert con...