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版的詞表.實際效果可以達...