計詞unigram和bigram的頻次

2021-07-15 16:44:32 字數 2825 閱讀 5592

在自然語言處理中,我們經常需要用到n元語法模型。

其中,有關中文分詞的一些概念是我們需要掌握的,譬如:

unigram 一元分詞,把句子分成乙個乙個的漢字

bigram 二元分詞,把句子從頭到尾每兩個字組成乙個詞語

trigram 三元分詞,把句子從頭到尾每三個字組成乙個詞語.

我們來簡單的做個練習:

輸入的是斷好詞的文字,每個句子一行。

統計詞unigram和bigram的頻次,並將它們分別輸出到`data.uni`和`data.bi`兩個檔案中。

[python]view plain

copy

#!/usr/bin/env python

class

ngram(object):  

def__init__(

self

, n):  

# n is the order of n-gram language model

self

.n = n  

self

.unigram = {}  

self

.bigram = {}  

# scan a sentence, extract the ngram and update their

# frequence.

## @param    sentence    list

# @return   none

defscan(

self

, sentence):  

# file your code here

forline 

insentence:  

self

.ngram(line.split())  

#unigram

ifself

.n == 

1:  

try:  

fip = open("data.uni"

,"w"

)  except

:  print

>> sys.stderr ,

"failed to open data.uni"

fori 

inself

.unigram:  

fip.write("%s %d\n"

% (i,

self

.unigram[i]))  

ifself

.n == 

2:  

try:  

fip = open("data.bi"

,"w"

)  except

:  print

>> sys.stderr ,

"failed to open data.bi"

fori 

inself

.bigram:  

fip.write("%s %d\n"

% (i,

self

.bigram[i]))  

# caluclate the ngram of the words

## @param    words       list

# @return   none

defngram(

self

, words):  

# unigram

ifself

.n == 

1:  

forword 

inwords:  

ifword 

notin

self

.unigram:  

self

.unigram[word] = 

1else

:  self

.unigram[word] = 

self

.unigram[word] + 

1# bigram

ifself

.n == 

2:  

num = 0

stri = ''

fori 

inwords:  

num = num + 1

ifnum == 

2:  

stri  = stri + " "

stri = stri + i  

ifnum == 

2:  

ifstri 

notin

self

.bigram:  

self

.bigram[stri] = 

1else

:  self

.bigram[stri] = 

self

.bigram[stri] + 

1num = 0

stri = ''

if__name__==

"__main__"

:  import

sys  

try:  

fip = open(sys.argv[1

],"r"

)  except

:  print

>> sys.stderr, 

"failed to open input file"

sentence =   

forline 

infip:  

iflen(line.strip())!=

0:  

uni = ngram(1

)  bi = ngram(2

)  uni.scan(sentence)  

bi.scan(sentence)  

關鍵詞和相關詞如何布局使用

布局常見的版塊和作用 降低頁面的重複度,為其他頁面吸引蜘蛛促收錄 為特定頁面提高權重,提高或穩定該頁面的排名 除了提高當前頁面相關性,也有更新機制的作用 文字塊優化要怎麼做 嵌入相關詞,越多越好,不要堆砌,尤其是首頁,提高頁面相關性,也是變相的提公升主詞密度 文字塊是企業站中很重要的一部分,通常首頁...

迷魂術和哭窮計

下棋,有時候不能過分的暴露實力,要不然棋全明了就不好下了。正確的作法是適當的時候露適當的棋。這個尺度看起來好像很能掌握。要做到這一點的基礎是有相當的判斷水平。只有判斷準確才能做到這一點判斷越準就做的越好。如面對是排長等小棋 方法一 用個小棋吃,這樣就可以使自己的小棋變大棋。要點 要走得快,裝作很有自...

IP TCP UDP ICMP校驗和的區別和計算

ip資料報的校驗和只檢驗ip資料報的首部。當傳送ip包時,需要計算ip報頭的校驗和 把校驗和字段置為0 對ip頭部中的每16bit進行二進位制求和 如果和的高16bit不為0,則將和的高16bit和低16bit反覆相加,直到和的高16bit為0,從而獲得乙個16bit的值 將該16bit的值取反,存...