1. 程式人生 > >HMM最大匹配分詞演算法(Python)

HMM最大匹配分詞演算法(Python)

正向最大匹配演算法是我國最早提出的解決中文分詞問題的演算法,因其簡單易操作,至今仍作為機器分詞的粗分演算法,在今天看來,這種演算法的準確率遠不夠高,無法達到令人滿意的要求。這只是一次練習。

待切分文字是:
我和你共同創造美好的新生活

詞典:
共同,創造,美好,的,新,生活

預期分詞效果:
我 和 你 共同 創造 美好 的 新 生活

# Python 3.4.3

lexicon = ('共同','創造','美好','的','新','生活') # 為了方便,詞典直接寫在程式裡。
wordSeg = []    # 新建列表存放切分好的詞
maxWordLen = 3
# 最大詞長設為3 with open('test.txt','r', encoding='utf-8') as src: sentence = src.read() sentenceLen = len(sentence) wordLen = min(maxWordLen, sentenceLen) startPoint = 0 while startPoint < sentenceLen: # 從第一個字元迴圈到最後一個字元 matched = False # 假設找不到匹配的詞 for i in range(maxWordLen, 0
, -1): # 從最大詞長3遞減到1 string = sentence[startPoint:startPoint+i] # 取startPoint開始到startPoint+i-1的切片 if string in lexicon: wordSeg.append(string) matched = True break if not matched: # 假如在詞典中找不到匹配 i = 1 wordSeg.append(sentence[startPoint]) # 全部切分為單字詞
startPoint += i with open('WordSeg.txt', 'w', encoding='utf-8') as des: for word in wordSeg: des.write(word+' ')

分詞成果:
我 和 你 共同 創造 美好 的 新 生活

召回率:100%
正確率:100%

文章受到了” Blueliner,fighting!!!“的啟發,表示感謝。

Blueliner,fighting!!!的《中文分詞演算法之最大正向匹配演算法(Python版)》
[文章連結]

相關推薦

HMM匹配演算法Python

正向最大匹配演算法是我國最早提出的解決中文分詞問題的演算法,因其簡單易操作,至今仍作為機器分詞的粗分演算法,在今天看來,這種演算法的準確率遠不夠高,無法達到令人滿意的要求。這只是一次練習。 待切分

淺談演算法4基於字的方法CRF

目錄 前言 目錄 條件隨機場(conditional random field CRF) 核心點 線性鏈條件隨機場 簡化形式 CRF分詞 CRF VS HMM 程式碼實現 訓練程式碼 實驗結果 參考文獻

UVA1349帶權二分圖匹配 --> KM算法模板

amp slack == 還需要 構造 有一個 using lac str UVA1349 題意:給定一些有向帶權邊,求出把這些邊構造成一個個環,總權值最小 解法: 對於帶權的二分圖的匹配問題可以用通過KM算法求解。 要求最大權匹配就是初始化g[i][j]為0,直接跑就可以

HDU2444二分圖的匹配+染色法判斷二分圖

HDU2444   n=200,邊要開到1e5才能過。。。。。。   #include<iostream> #include<cstdio> #include<cstring> #include<queue> #

似然估計演算法極大似然估計演算法

寫的很通俗易懂……. 最大似然估計提供了一種給定觀察資料來評估模型引數的方法,即:“模型已定,引數未知”。簡單而言,假設我們要統計全國人口的身高,首先假設這個身高服從服從正態分佈,但是該分佈的均值與方差未知。我們沒有人力與物力去統計全國每個人的身高,但是可以通

流的基本演算法ff演算法&&dinic演算法&&push-rebeal演算法poj1273

最大流的基本概念有以下幾點:               1.殘存網路:即為一條管道被佔用了一部分流量之後所剩下的流量。在網路流中,圖被看為一個有向圖,殘存流量向量相加後永遠不變。這一點有點像基爾霍夫定律。               2.在找到一個流之後,仍然存在的從源點

求解二分圖的匹配的匈牙利演算法---POJ 1325 Machine Schedule

【基本概念】 二分圖:簡單來說,如果圖中點可以被分為兩組,並且使得所有邊都跨越組的邊界,則這就是一個二分圖。準確地說:把一個圖的頂點劃分為兩個不相交集 U 和V ,使得每一條邊都分別連線U、V中的

Spark 資料中文統計 開發環境搭建

          幾年前搞BI專案時就聽說過大資料技術,當時也買了書,可惜沒有認真去學。幾年5月份 開始,報名參加王家林老師的大資料蘑菇雲行動,才算真正開始學習Spark,學習大資料技術。           網上很多Spark的例子都是經典的WordCount exam

NLP之CRF訓練

分鐘 -c data ++ del 控制 rdquo 進制 文本 分三步1、先分詞2、做BEMS標註,同時做詞性標註3、訓練模型 1、對語料進行分詞 拿到測試部的語料或者其他渠道的語料,先對語料進行分詞,我剛剛開始是用NS分詞的,等CRF模型訓練好後

【機器學習基本理論】詳解似然估計MLE後驗概率估計MAP,以及貝葉斯公式的理解

總結 ora 二次 判斷 天都 特性 以及 解釋 意思 【機器學習基本理論】詳解最大似然估計(MLE)、最大後驗概率估計(MAP),以及貝葉斯公式的理解 https://mp.csdn.net/postedit/81664644 最大似然估計(Maximum lik

51Nod 1052 - M子段和DP

題目連結 http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1052 【題目描述】 N個整陣列成的序列a[1],a[2],a[3],…,a[n],將這N個數劃分為互不相交的M個子段,並且這M個子段的和是最大的。如果

lucene英文StandarAnalyzer中會被忽略的stopWords

使用Lucene進行索引查詢時發現有一部分詞會被分詞器直接忽略掉了,被忽略的分詞稱為stopWords,在英文中通常是一些語氣助詞或者無法表達明確含義的詞。 在定義含有stopWords分詞器的時候都會指定stopWords,如果沒有指定可以引用預設的stop

詳解似然估計MLE後驗概率估計MAP,以及貝葉斯公式的理解

<svg xmlns="http://www.w3.org/2000/svg" style="display: none;"><path stroke-linecap="round" d="M5,0 0,2.5 5,5z" id=

似然估計MLE後驗概率估計MAP以及貝葉斯學派和頻率學派

前言 frequentist statistics:模型引數是未知的定值,觀測是隨機變數;思想是觀測數量趨近於無窮大+真實分佈屬於模型族中->引數的點估計趨近真實值;代表是極大似然估計MLE;不依賴先驗。 Bayesian statistics:模型引數是隨機變數,

C語言實現磁碟排程——短尋道優先演算法SSTF

一、設計目的:     加深對請求磁碟排程管理實現原理的理解,掌握磁碟排程演算法中的最短尋道優先演算法。二、設計內容通過程式設計實現磁碟排程中最短尋道優先演算法。設定開始磁軌號尋道範圍,依據起始掃描磁軌號和最大磁軌號數,隨機產生要進行尋道的磁軌號序列。選擇磁碟排程演算法,顯示

機器學習演算法-K近鄰從原理到實現Python

本來這篇文章是5月份寫的,今天修改了一下內容,就成今天發表的了,CSDN這是出BUG了還是什麼改規則了。。。 引文:決策樹和基於規則的分類器都是積極學習方法(eager learner)的例子,因為一旦訓練資料可用,他們就開始學習從輸入屬性到類標號的對映模型。

似然估計法MLE

最大似然估計(Maximum Likelihood Estimation),是一種統計方法,它用來求一個樣本集的相關概率密度函式的引數。最大似然估計中取樣需滿足一個很重要的假設,就是所有的取樣都是獨立同分布的。 一、最大似然估計法的基本思想 最大似然估計法的思想

短增廣路演算法SAP基本模板JAVA

SAP基本思路: 準備好兩個陣列 vis[i]和pre[i],    1)vis[i]用來標記節點i是否被訪問過,2)pre[i]用來記錄節點i的前驅節點,(用來記錄發現的增廣路) 準備好兩個陣列g[i][j]和map[i][j],   1)g[i][j]代表殘餘網

中文系列 雙陣列Tire樹(DART)詳解

雙陣列Tire樹是Tire樹的升級版,Tire取自英文Retrieval中的一部分,即檢索樹,又稱作字典樹或者鍵樹。下面簡單介紹一下Tire樹。 1.1 Tire樹 Trie是一種高效的索引方法,它實際上是一種確定有限自動機(DFA),在樹的結構中,每一個結點對應一個DFA狀態,每一個從父結點指向子結點