C 中文分詞之初探

2022-04-22 14:51:05 字數 2271 閱讀 8673

簡單介紹一下分詞的技術相關的演算法以及對此幾種演算法的比較,最後用其中一種演算法實現乙個中文分詞的小程式。

①中文分詞的演算法

中文分詞技術發展到今天概括起來可以歸為三類:基於匹配的分詞、基於統計的分詞和基於理解的分詞。

a.基於匹配的分詞方法:

由於該分詞方法自動化程度較高,因此又常被稱為機械分詞法。該方法遵循一定的演算法將待分析的文件與乙個機器詞典中的詞條進行匹配,若匹配成功則識別出乙個詞。常用的集中機械分詞方法有以下幾種:正向最大匹配法(由左到右的方向);逆向最大匹配法(由右到左的方向);最少切分(使每一句中切出的次數最小)。

b.基於理解的分詞方法:

該方法的基本思想是在分詞的同時,進行句法分析和語義分析,利用句法資訊和語義資訊來處理歧義,以提高分詞的準確度。也即讓計算機模擬人理解句子的過程,以達到識別詞的目的,該系統主要包括三個子系統:分詞子系統、句法語義子系統、總控部分。在總控部分的協調下,分詞子系統可以獲得有關詞、句子等的句法和語義資訊來對分詞歧義進行判斷。該分詞方法需要使用大量的語言知識和資訊作為支撐。然而,由於漢語語言知識的複雜性,將各種語言資訊組織成機器可直接讀取的形式是非常困難的,因此目前基於理解的分詞系統未達到使用的水平。

c.基於統計的分詞方法:

該方法的理論依據是:由於詞是穩定的字的組合,因此在上下文中,相鄰的字同時出現的次數越多,就越有可能構成乙個詞,也就是說字與字相鄰共現的概率能較好的反映成詞的可信度。可以對相鄰共現的各個字的組合的頻度進行統計,計算他們的互現資訊。互現資訊體現了漢字之間結合關係的緊密程度。當緊密程度高於某乙個閾值時,便可認為此字組可能構成乙個詞。該方法的缺點是經常會抽出一些共現頻度高、但不是詞的字組,如「有的」、「你的」等,並且對常用詞的識別精度不搞,時空開銷卻很大。

②分詞演算法的比較

下面對常用的幾種演算法進行比較分析

a.基於匹配的分詞演算法:

由於該方法的唯一根據就是詞典,因此,待切分文件中的詞是否被收錄到詞典中對最終的分詞結果起著決定性的作用。一般來說,已登入詞可以很好的被識別出來,而未登入詞則會受到眾多方面因素的影響不能被有效的識別出來,這主要取決於其匹配的模式,因此該方法對新詞的識別率較低。此外,由於其分詞過程僅僅是字串的機械匹配,因此無法利用漢語上下文語境資訊對歧義字詞作識別。因此,若運用此演算法,為提高分詞的準確性,需要對系統詞典隨時進行更新,乙個完善的詞典是基於匹配的分詞演算法成功的關鍵因素。

b.基於統計的分詞演算法:

由於該方法依據的是漢字串在文件中的出現規律,借助統計學方法,根據詞頻識別詞語,因此對新詞有較高的識別率。然而,需要指出的是,在漢語中,同乙個意思往往會有多種表達形式,同義詞比較多,詞語重現率比較低,而對於缺乏理解能力的計算機來說,就會將他們看作是完全不相同的字串,而不能識別為乙個獨立的詞,另外該演算法只有當被統計分析的語料足夠大時,各個詞語的重現率才能達到充分大,才能夠成功識別出詞語,因此其演算法的時間和空間複雜度也都較高,而且事實現也相對較難。

c.實際運用與分析

③簡單的分詞系統實現

下面將會用c#開發乙個基於匹配分詞演算法的小系統。

a.讀取詞庫文字檔案

首先第一步是需要讀取詞庫的檔案,可以是.txt或是其他的檔案形式,讀取的目的是要利用這些詞構建乙個tree。tree的結構如下所示:

從上圖中可以清楚地知道建樹的主要思路是將詞庫中的詞語用樹與子樹的關係關聯起來,主要演算法如下:

//////

詞庫資料構建樹

//////

public

void

buildtree(

string

s)else}}

b. 中文分詞

將文字中輸入的詞分開標識顯示出來。效果如下:

主要演算法如下:

//////

中文分詞

//////

public

string

cnanalyse(

string

s)else"|

");i--

;}tmproot 

=rootnode.childnodes;

len =0

;}else

}string

strs 

=sb.tostring().split('|

');return

strs;

}這只是對分詞技術的初探,剛剛開始,在以後的時間裡會繼續優化目前的分詞系統,積累更多的有關這方面的知識!

C 之初探異常處理 exception

dail test.cpp 定義控制台應用程式的入口點。include stdafx.h include include include include include include using namespace std int tmain int argc,tchar argv catch o...

研磨Kafka之初探

kafka是乙個基於發布 訂閱模式的分布式訊息佇列。1 點對點模式 一對一,消費者主動拉取資料,訊息收到後訊息清除 2 發布 訂閱模式 一對多,消費者消費資料之後不會清除訊息 kafka是屬於發布 訂閱模式的拉取模式 發布 訂閱有兩種資料消費模式 push pull 模式 1 producer 訊息...

中文分詞 中文分詞及其應用

一 中文分詞原理 中文分詞是指將乙個漢字序列切分成乙個乙個單獨的詞。分詞就是將連續的字序列按照一定的規範重新組合成詞序列的過程。現有的分詞方法可分為三大類,分別是基於字串匹配的分詞方法 基於理解的分詞方法和基於統計的分詞方法。一 基於字串匹配的分詞方法 基於字串匹配的分詞方法又稱機械分詞方法,它是按...