當前位置:首頁 » 編程語言 » python分詞統計

python分詞統計

發布時間: 2022-08-12 08:14:59

python中文分詞的原理你知道嗎

中文分詞,即 Chinese Word Segmentation,即將一個漢字序列進行切分,得到一個個單獨的詞。表面上看,分詞其實就是那麼回事,但分詞效果好不好對信息檢索、實驗結果還是有很大影響的,同時分詞的背後其實是涉及各種各樣的演算法的。

中文分詞與英文分詞有很大的不同,對英文而言,一個單詞就是一個詞,而漢語是以字為基本的書寫單位,詞語之間沒有明顯的區分標記,需要人為切分。根據其特點,可以把分詞演算法分為四大類:

基於規則的分詞方法

基於統計的分詞方法

基於語義的分詞方法

基於理解的分詞方法

下面我們對這幾種方法分別進行總結。

基於規則的分詞方法

這種方法又叫作機械分詞方法、基於字典的分詞方法,它是按照一定的策略將待分析的漢字串與一個「充分大的」機器詞典中的詞條進行匹配。若在詞典中找到某個字元串,則匹配成功。該方法有三個要素,即分詞詞典、文本掃描順序和匹配原則。文本的掃描順序有正向掃描、逆向掃描和雙向掃描。匹配原則主要有最大匹配、最小匹配、逐詞匹配和最佳匹配。

最大匹配法(MM)。基本思想是:假設自動分詞詞典中的最長詞條所含漢字的個數為 i,則取被處理材料當前字元串序列中的前 i 個字元作為匹配欄位,查找分詞詞典,若詞典中有這樣一個 i 字詞,則匹配成功,匹配欄位作為一個詞被切分出來;若詞典中找不到這樣的一個 i 字詞,則匹配失敗,匹配欄位去掉最後一個漢字,剩下的字元作為新的匹配欄位,再進行匹配,如此進行下去,直到匹配成功為止。統計結果表明,該方法的錯誤率 為 1/169。

逆向最大匹配法(RMM)。該方法的分詞過程與 MM 法相同,不同的是從句子(或文章)末尾開始處理,每次匹配不成功時去掉的是前面的一個漢字。統計結果表明,該方法的錯誤率為 1/245。

逐詞遍歷法。把詞典中的詞按照由長到短遞減的順序逐字搜索整個待處理的材料,一直到把全部的詞切分出來為止。不論分詞詞典多大,被處理的材料多麼小,都得把這個分詞詞典匹配一遍。

設立切分標志法。切分標志有自然和非自然之分。自然切分標志是指文章中出現的非文字元號,如標點符號等;非自然標志是利用詞綴和不構成詞的詞(包 括單音詞、復音節詞以及象聲詞等)。設立切分標志法首先收集眾多的切分標志,分詞時先找出切分標志,把句子切分為一些較短的欄位,再用 MM、RMM 或其它的方法進行細加工。這種方法並非真正意義上的分詞方法,只是自動分詞的一種前處理方式而已,它要額外消耗時間掃描切分標志,增加存儲空間存放那些非 自然切分標志。

最佳匹配法(OM)。此法分為正向的最佳匹配法和逆向的最佳匹配法,其出發點是:在詞典中按詞頻的大小順序排列詞條,以求縮短對分詞詞典的檢索時 間,達到最佳效果,從而降低分詞的時間復雜度,加快分詞速度。實質上,這種方法也不是一種純粹意義上的分詞方法,它只是一種對分詞詞典的組織方式。OM 法的分詞詞典每條詞的前面必須有指明長度的數據項,所以其空間復雜度有所增加,對提高分詞精度沒有影響,分詞處理的時間復雜度有所降低。

此種方法優點是簡單,易於實現。但缺點有很多:匹配速度慢;存在交集型和組合型歧義切分問題;詞本身沒有一個標準的定義,沒有統一標準的詞集;不同詞典產生的歧義也不同;缺乏自學習的智能性。

基於統計的分詞方法

該方法的主要思想:詞是穩定的組合,因此在上下文中,相鄰的字同時出現的次數越多,就越有可能構成一個詞。因此字與字相鄰出現的概率或頻率能較好地反映成詞的可信度。可以對訓練文本中相鄰出現的各個字的組合的頻度進行統計,計算它們之間的互現信息。互現信息體現了漢字之間結合關系的緊密程度。當緊密程 度高於某一個閾值時,便可以認為此字組可能構成了一個詞。該方法又稱為無字典分詞。

該方法所應用的主要的統計模型有:N 元文法模型(N-gram)、隱馬爾可夫模型(Hiden Markov Model,HMM)、最大熵模型(ME)、條件隨機場模型(Conditional Random Fields,CRF)等。

在實際應用中此類分詞演算法一般是將其與基於詞典的分詞方法結合起來,既發揮匹配分詞切分速度快、效率高的特點,又利用了無詞典分詞結合上下文識別生詞、自動消除歧義的優點。

基於語義的分詞方法

語義分詞法引入了語義分析,對自然語言自身的語言信息進行更多的處理,如擴充轉移網路法、知識分詞語義分析法、鄰接約束法、綜合匹配法、後綴分詞法、特徵詞庫法、矩陣約束法、語法分析法等。

擴充轉移網路法

該方法以有限狀態機概念為基礎。有限狀態機只能識別正則語言,對有限狀態機作的第一次擴充使其具有遞歸能力,形成遞歸轉移網路 (RTN)。在RTN 中,弧線上的標志不僅可以是終極符(語言中的單詞)或非終極符(詞類),還可以調用另外的子網路名字分非終極符(如字或字串的成詞條件)。這樣,計算機在 運行某個子網路時,就可以調用另外的子網路,還可以遞歸調用。詞法擴充轉移網路的使用, 使分詞處理和語言理解的句法處理階段交互成為可能,並且有效地解決了漢語分詞的歧義。

矩陣約束法

其基本思想是:先建立一個語法約束矩陣和一個語義約束矩陣, 其中元素分別表明具有某詞性的詞和具有另一詞性的詞相鄰是否符合語法規則, 屬於某語義類的詞和屬於另一詞義類的詞相鄰是否符合邏輯,機器在切分時以之約束分詞結果。

基於理解的分詞方法

基於理解的分詞方法是通過讓計算機模擬人對句子的理解,達到識別詞的效果。其基本思想就是在分詞的同時進行句法、語義分析,利用句法信息和語義信息來處理歧義現象。它通常包括三個部分:分詞子系統、句法語義子系統、總控部分。在總控部分的協調下,分詞子系統可以獲得有關詞、句子等的句法和語義信息來對分詞歧義進行判斷,即它模擬了人對句子的理解過程。這種分詞方法需要使用大量的語言知識和信息。目前基於理解的分詞方法主要有專家系統分詞法和神經網路分詞法等。

專家系統分詞法

從專家系統角度把分詞的知識(包括常識性分詞知識與消除歧義切分的啟發性知識即歧義切分規則)從實現分詞過程的推理機中獨立出來,使知識庫的維護與推理機的實現互不幹擾,從而使知識庫易於維護和管理。它還具有發現交集歧義欄位和多義組合歧義欄位的能力和一定的自學習功能。

神經網路分詞法

該方法是模擬人腦並行,分布處理和建立數值計算模型工作的。它將分詞知識所分散隱式的方法存入神經網路內部,通過自學習和訓練修改內部權值,以達到正確的分詞結果,最後給出神經網路自動分詞結果,如使用 LSTM、GRU 等神經網路模型等。

神經網路專家系統集成式分詞法

該方法首先啟動神經網路進行分詞,當神經網路對新出現的詞不能給出准確切分時,激活專家系統進行分析判斷,依據知識庫進行推理,得出初步分析,並啟動學習機制對神經網路進行訓練。該方法可以較充分發揮神經網路與專家系統二者優勢,進一步提高分詞效率。

以上便是對分詞演算法的基本介紹。

❷ Python中,已經得到一個包含所有單詞的詞典,如何統計詞典中的單詞在每一句話中出現的次數

眾所周知,英文是以詞為單位的,詞和詞之間是靠空格隔開,而中文是以字為單位,句子中所有的字連起來才能描述一個意思。例如,英文句子I am a student,用中文則為:「我是一個學生」。計算機可以很簡單通過空格知道student是一個單詞,但是不能很容易明白「學」、「生」兩個字合起來才表示一個詞。把中文的漢字序列切分成有意義的詞,就是中文分詞,有些人也稱為切詞。我是一個學生,分詞的結果是:我 是 一個 學生。
中文分詞技術屬於自然語言處理技術范疇,對於一句話,人可以通過自己的知識來明白哪些是詞,哪些不是詞,但如何讓計算機也能理解?其處理過程就是分詞演算法。

現有的分詞演算法可分為三大類:基於字元串匹配的分詞方法、基於理解的分詞方法和基於統計的分詞方法。

1、基於字元串匹配的分詞方法

這種方法又叫做機械分詞方法,它是按照一定的策略將待分析的漢字串與一個「充分大的」機器詞典中的詞條進行配,若在詞典中找到某個字元串,則匹配成功(識別出一個詞)。按照掃描方向的不同,串匹配分詞方法可以分為正向匹配和逆向匹配;按照不同長度優先匹配的情況,可以分為最大(最長)匹配和最小(最短)匹配;按照是否與詞性標注過程相結合,又可以分為單純分詞方法和分詞與標注相結合的一體化方法。常用的幾種機械分詞方法如下:

1)正向最大匹配法(由左到右的方向);

2)逆向最大匹配法(由右到左的方向);

3)最少切分(使每一句中切出的詞數最小)。

還可以將上述各種方法相互組合,例如,可以將正向最大匹配方法和逆向最大匹配方法結合起來構成雙向匹配法。由於漢語單字成詞的特點,正向最小匹配和逆向最小匹配一般很少使用。一般說來,逆向匹配的切分精度略高於正向匹配,遇到的歧義現象也較少。統計結果表明,單純使用正向最大匹配的錯誤率為1/169,單純使用逆向最大匹配的錯誤率為1/245。但這種精度還遠遠不能滿足實際的需要。實際使用的分詞系統,都是把機械分詞作為一種初分手段,還需通過利用各種其它的語言信息來進一步提高切分的准確率。

一種方法是改進掃描方式,稱為特徵掃描或標志切分,優先在待分析字元串中識別和切分出一些帶有明顯特徵的詞,以這些詞作為斷點,可將原字元串分為較小的串再來進機械分詞,從而減少匹配的錯誤率。另一種方法是將分詞和詞類標注結合起來,利用豐富的詞類信息對分詞決策提供幫助,並且在標注過程中又反過來對分詞結果進行檢驗、調整,從而極大地提高切分的准確率。

對於機械分詞方法,可以建立一個一般的模型,在這方面有專業的學術論文,這里不做詳細論述。

2、基於理解的分詞方法

這種分詞方法是通過讓計算機模擬人對句子的理解,達到識別詞的效果。其基本思想就是在分詞的同時進行句法、語義分析,利用句法信息和語義信息來處理歧義現象。它通常包括三個部分:分詞子系統、句法語義子系統、總控部分。在總控部分的協調下,分詞子系統可以獲得有關詞、句子等的句法和語義信息來對分詞歧義進行判斷,即它模擬了人對句子的理解過程。這種分詞方法需要使用大量的語言知識和信息。由於漢語語言知識的籠統、復雜性,難以將各種語言信息組織成機器可直接讀取的形式,因此目前基於理解的分詞系統還處在試驗階段。

3、基於統計的分詞方法

從形式上看,詞是穩定的字的組合,因此在上下文中,相鄰的字同時出現的次數越多,就越有可能構成一個詞。因此字與字相鄰共現的頻率或概率能夠較好的反映成詞的可信度。可以對語料中相鄰共現的各個字的組合的頻度進行統計,計算它們的互現信息。定義兩個字的互現信息,計算兩個漢字X、Y的相鄰共現概率。互現信息體現了漢字之間結合關系的緊密程度。當緊密程度高於某一個閾值時,便可認為此字組可能構成了一個詞。這種方法只需對語料中的字組頻度進行統計,不需要切分詞典,因而又叫做無詞典分詞法或統計取詞方法。但這種方法也有一定的局限性,會經常抽出一些共現頻度高、但並不是詞的常用字組,例如「這一」、「之一」、「有的」、「我的」、「許多的」等,並且對常用詞的識別精度差,時空開銷大。實際應用的統計分詞系統都要使用一部基本的分詞詞典(常用詞詞典)進行串匹配分詞,同時使用統計方法識別一些新的詞,即將串頻統計和串匹配結合起來,既發揮匹配分詞切分速度快、效率高的特點,又利用了無詞典分詞結合上下文識別生詞、自動消除歧義的優點。

到底哪種分詞演算法的准確度更高,目前並無定論。對於任何一個成熟的分詞系統來說,不可能單獨依靠某一種演算法來實現,都需要綜合不同的演算法。筆者了解,海量科技的分詞演算法就採用「復方分詞法」,所謂復方,相當於用中葯中的復方概念,即用不同的葯才綜合起來去醫治疾病,同樣,對於中文詞的識別,需要多種演算法來處理不同的問題。

❸ 關於python詞雲的頻次統計機制

使用wordcloud庫和jieba庫可以使用圖片上的效果,
這個就是將一個文本先進行分詞,然後再統計每個詞的詞頻,選出詞頻較高的一些詞語,然後按照詞頻的大小設定不同的字體大小,隨機生成顏色,隨後形成圖片。

❹ 求問用python實現:編寫程序,計算用戶輸入的英文句子中的詞語數量,以及

這個你需要去網上找一個python版本的英文的分詞包,做句子的分詞,當然最簡單的你可以按空格對英文進行分詞。。用text.split(" ")來分。然後統計每個詞的長度並求平均值
cc = raw_input('input a string:')
sen_list = cc.split(" ")
count = len(sen_list)
sum = 0
for word in sen_list:
if word:
sum += len(word)
avg = sum*1.0/count
print avg

❺ Python 分詞後詞頻統計


out_one=re.compile(r'(.*?)00',re.S)

out_one_re=re.findall(self.out_one,i)


a={}
forjinout_one_re:
a[j]=out_one_re.count(j)


使用字典屬性,內容唯一來進行統計。出來的包括內容和次數。

❻ 如何用python和jieba分詞,統計詞頻

#!python3
#-*-coding:utf-8-*-
importos,codecs
importjieba
fromcollectionsimportCounter

defget_words(txt):
seg_list=jieba.cut(txt)
c=Counter()
forxinseg_list:
iflen(x)>1andx!=' ':
c[x]+=1
print('常用詞頻度統計結果')
for(k,v)inc.most_common(100):
print('%s%s%s%d'%(''*(5-len(k)),k,'*'*int(v/3),v))

if__name__=='__main__':
withcodecs.open('19d.txt','r','utf8')asf:
txt=f.read()
get_words(txt)

❼ 如何用PYTHON做分詞處理

可以利用python的jieba分詞,得到文本中出現次數較多的詞。

首先pip安裝一下jieba,這個可以分詞

然後用計數器Counter()統計一下得到的分詞中各詞的數量

最後most_common(5),是列印出排名前五位的詞(包括特殊符號)

#encoding:utf-8
importsys
reload(sys)
sys.setdefaultencoding('utf-8')


importjieba
fromcollectionsimportCounter

str1=open('tips.txt').read()

wordlist_after_jieba=jieba.cut(str1,cut_all=True)

list_wl=Counter(wordlist_after_jieba)
foriinlist_wl.most_common(5):
printi[0],i[1]

❽ Python 統計中文詞彙數量

❾ 一個txt文檔,已經用結巴分詞分完詞,怎麼用python工具對這個分完詞的文檔進行計算統計詞頻,求腳本,非

#!/usr/bin/envpython3
#-*-coding:utf-8-*-

importos,random

#假設要讀取文件名為aa,位於當前路徑
filename='aa.txt'
dirname=os.getcwd()
f_n=os.path.join(dirname,filename)
#注釋掉的程序段,用於測試腳本,它生成20行數據,每行有1-20隨機個數字,每個數字隨機1-20
'''
test=''
foriinrange(20):
forjinrange(random.randint(1,20)):
test+=str(random.randint(1,20))+''
test+=' '
withopen(f_n,'w')aswf:
wf.write(test)
'''
withopen(f_n)asf:
s=f.readlines()

#將每一行數據去掉首尾的空格和換行符,然後用空格分割,再組成一維列表
words=[]
forlineins:
words.extend(line.strip().split(''))

#格式化要輸出的每行數據,首尾各佔8位,中間佔18位
defgeshi(a,b,c):
returnalignment(str(a))+alignment(str(b),18)+alignment(str(c))+' '
#中英文混合對齊,參考http://bbs.fishc.com/thread-67465-1-1.html,二樓
#漢字與字母格式化佔位format對齊出錯對不齊漢字對齊數字漢字對齊字母中文對齊英文
#alignment函數用於英漢混合對齊、漢字英文對齊、漢英對齊、中英對齊
defalignment(str1,space=8,align='left'):
length=len(str1.encode('gb2312'))
space=space-lengthifspace>=lengthelse0
ifalignin['left','l','L','Left','LEFT']:
str1=str1+''*space
elifalignin['right','r','R','Right','RIGHT']:
str1=''*space+str1
elifalignin['center','c','C','Center','CENTER','centre']:
str1=''*(space//2)+str1+''*(space-space//2)
returnstr1

w_s=geshi('序號','詞','頻率')
#由(詞,頻率)元組構成列表,先按頻率降序排序,再按詞升序排序,多級排序,一組升,一組降,高級sorted
wordcount=sorted([(w,words.count(w))forwinset(words)],key=lambdal:(-l[1],l[0]))
#要輸出的數據,每一行由:序號(佔8位)詞(佔20位)頻率(佔8位)+' '構成,序號=List.index(element)+1
for(w,c)inwordcount:
w_s+=geshi(wordcount.index((w,c))+1,w,c)
#將統計結果寫入文件ar.txt中
writefile='ar.txt'
w_n=os.path.join(dirname,writefile)
withopen(w_n,'w')aswf:
wf.write(w_s)

❿ 如何用python對文章中文分詞並統計詞頻

1、全局變數在函數中使用時需要加入global聲明
2、獲取網頁內容存入文件時的編碼為ascii進行正則匹配時需要decode為GB2312,當匹配到的中文寫入文件時需要encode成GB2312寫入文件。
3、中文字元匹配過濾正則表達式為ur'[\u4e00-\u9fa5]+',使用findall找到所有的中文字元存入分組
4、KEY,Value值可以使用dict存儲,排序後可以使用list存儲
5、字元串處理使用split分割,然後使用index截取字元串,判斷哪些是名詞和動詞
6、命令行使用需要導入os,os.system(cmd)

熱點內容
科密加密卡片 發布:2025-01-20 22:45:01 瀏覽:111
蘋果的文件怎麼轉到安卓 發布:2025-01-20 22:43:10 瀏覽:652
c語言迴文串 發布:2025-01-20 22:43:09 瀏覽:767
垃圾壓縮價格 發布:2025-01-20 22:14:05 瀏覽:421
溫十系統如何看處理器配置 發布:2025-01-20 21:59:47 瀏覽:302
米號源碼 發布:2025-01-20 21:55:30 瀏覽:893
電信四川dns伺服器ip 發布:2025-01-20 21:54:51 瀏覽:92
電腦彈出腳本錯誤還能繼續使用嗎 發布:2025-01-20 21:42:29 瀏覽:586
安卓私密照片在哪裡 發布:2025-01-20 21:41:05 瀏覽:5
同濟復試編譯原理 發布:2025-01-20 21:33:54 瀏覽:310