最大概率分詞法

2021-05-08 18:30:07 字數 1684 閱讀 9504

extern cstring separator;

extern int maxwordlength;

extern long corpussize;

cmydictionary pdict; // 定義乙個詞典類物件,全域性變數

// 以下是最大概率法分詞程式

struct candidate candidates[100];// 假定最多的候選詞數

short gettmpwords(cstring &s)

}return i;

}void getprev(short i)

short j,minid=-1;

// for(j=i-1;j>=0;j--)

// for(;candidates[j].offset+candidates[j].length==candidates[i].offset;j--)

for(j=i-1;j>=0;j--)

if(candidates[i].offset-candidates[j].offset>=8) // 向左查詢候選詞最遠不超過4個漢字

break;

}candidates[i].goodprev=minid;

candidates[i].sumfee=candidates[i].fee+candidates[minid].sumfee;

return;

}cstring segmenthzstrmp(cstring s1)

cstring segmentsentencemp (cstring s1) 

}// 以下處理漢字串

i=2;

dd=s1.getlength();

while(i=176)

//  while(i=128 && (unsigned char)s1[i]!=161)

i+=2;

s2+=segmenthzstrmp(s1.left(i));

s1=s1.mid(i);}//

// 以下程式用於將表示時間的單位合併成乙個分詞單位

int tmppos;

const char * p;

cstring s2_part_1;

if (s2.find("  年/")>=0)

}if (s2.find("  月/")>=0)

}if (s2.find("  日/")>=0)

}//合併時間單位程式段結束

//return s2;

}void segmentafilemp (cstring filename)

file * in, * out;

in = fopen((const char*) filename,"rt");

if(in==null)

filename=changefilename(filename,"-seg");

out = fopen((const char*) filename,"wt");

if(out==null)

cstdiofile infile(in),outfile(out);

char s[2048];

cstring line;

while(infile.readstring(s,2048))

infile.close();

outfile.close();

}// 最大概率法分詞程式結束

最大概率分詞

這裡介紹一種分詞的方法 最大概率分詞,也叫1 gram分詞,因為它不考慮上下文關係,只考慮當前詞的概率。我們需要有乙個詞典,裡面記錄每個詞的頻次,比如 基於這個詞典,我們可以將一句話用乙個有向無環圖 dag 的表示出來,比如 這個圖裡面,每個節點是乙個字,邊為兩點構成詞的概率。分詞的問題,就是找出這...

自然語言處理 MP最大概率中文分詞

課程作業,只完成了最基本的演算法,還有不足的地方,例如一些多位數的分詞方式等,大家可以適當參考。1.語言模型說明 語言模型為bigram,儲存在乙個 n n 的numpy矩陣lm中,訓練過程 laplace平滑僅在計算的二維計數表的每乙個位置進行 1操作處理後極大似然估計得到概率 kn平滑處理後某個...

基於正向最大化詞表中文分詞法。

以前做知識管理系統的時候,由於需要建立全文檢索和統計詞頻,需要對中文文字進行分詞。對於中文分詞,國內做到好的應該是中科院自然研究所,但是相對比較複雜,我看了幾次沒有看明白.由於平常我們的知識系統 對分詞的要求沒有這麼高,所以 就選擇了最大化的詞表分詞法.詞表選擇的是人民 97版的詞表.實際效果可以達...