中英文詞頻統計(MATLAB)
1. 英文詞頻統計
英文詞頻統計很簡單,只需借助split斷句,再統計即可。
完整MATLAB代碼:
function wordcount
%思路:中文詞頻統計涉及到對“詞語”的判斷,需要導入詞典或編寫判斷規則,很復雜。
%最簡單的辦法是直接統計英文詞頻,並由空格直接划分詞語。然后再翻譯即可得到中文詞頻。
%從官方網站上下載的pdf,轉成reportfulltext.txt,存到workspace進行操作 全文共25003個字符。
clc;
clear;
report=fileread('reportfulltext.txt'); %讀入全文
report=regexprep(report,'\W',' '); %不是字符的,都轉換為空格。主要是去除標點符號
report=lower(report); %變成小寫
words=regexp(report,' ','split')'; %根據空格分隔為單詞cell
%至此每個單詞都拿出來了
rank = tabulate(words); %rank是三列向量,包括名稱,出現次數和百分比
ans=sortrows(rank,-2); %只根據第二列進行排序 -2表示降序
xlswrite('results',ans);%輸出為excel文件
end
2. 中文詞頻統計
中文詞頻統計相對復雜一些。關鍵在於:
-
使用合適的語料庫
-
從長到短,匹配詞語。比如句中出現了“計算機”三字詞,我們應該將三個字視為一個詞,而不能把“計算”當做一個詞。
function wordcountchinese
clc;
clear;
report=fileread('reportchinese.txt'); %讀入中文報告,事先已放在工作區
%% dictionary.mat是一個我事先准備好的列向量
%其中dict是14636*1的字典列向量,從網上下載的官方語料庫轉換得到的
load dictionary.mat;
Maxlen=max(cellfun(@length,dict)); %最大詞長,結果是10
%% 按標點初步分詞
cut='[\,\。\、\;\:\!\?\“\”\‘\’\(\)\《\》\<\>\……\·]'; %標點符號的正則表達式
F=regexp(report,cut,'split')'; %轉置,變成3131*1的列向量
% 此時,待分析的句集F和詞典都已就緒
%% 算法原理
% 首先判斷是否為有效句:句長是否大於0。小於0的不操作,相當於跳過
% 若是有效句,計算句長和最大詞長Maxlen的最小值maxlen。待選字串長度不能大於該長度
% 從maxlen長度開始,取出待選字串
% 匹配,成功就輸出,標記。若成功,平移maxlen個單位;若不成功,平移1個單位
% 選出下一個待選字串再匹配,重復操作,直到移動到句長以外
% 如果上一個長度匹配成功,那么就不用再匹配了,該句跳過;如果meet==0,重復上一步操作
% 長度maxlen減到1,也要匹配,因為詞庫中有一個字的詞;maxlen==0是終止信號。
%% 最大匹配法進一步分詞
sentence=[]; %是粗分后F中的每一個元素
word=[];
words={};
k=1;
for i=1:length(F) %遍歷F
sentence=cell2mat(F(i,1)); %把cell轉換成字符串
sentence_len=length(sentence); %求出句長
meet=0; %更新初始狀態
if(sentence_len>0) %有效句
maxlen=min(Maxlen,sentence_len);
while(maxlen>0)
start=1;
while((start+maxlen)<=sentence_len) %索引不能移動到句子外面
word=sentence(start:start+maxlen);
if(ismember(word,dict))%如果匹配成功
meet=1;
words(k)=cellstr(word);
k=k+1;
start=start+maxlen; %移動maxlen個單位再匹配
else
start=start+1; %移動一個單位再匹配
end
end
%已經移動到句子外面了
if(meet==0)
maxlen=maxlen-1;
else
break;
end
end
end
%無效句,句長為0,不處理,直接跳過
end
%% 排序處理
rank = tabulate(words); %rank是三列向量,包括名稱,出現次數和百分比
ANS=sortrows(rank,-2); %只根據第二列進行排序 -2表示降序
xlswrite('resultschinese',ANS(1:50,1:3));%輸出為excel文件 由於詞語將近1777個,因此只輸出前100個
end
十九大中文版報告統計結果: