您的位置:首页 > 其它

srilm 阅读文档11

2011-05-16 11:44 337 查看
LMStats.h LMStats.cc
文档作者:jianzhu
创立时间:08.09.18
--------------------------------------
1、概述
--------------------------------------
这两个文件主要定义了语言模型中用于对句子,文本
和词的统计分析的接口。
LMStats类
该类提供了如下函数
a) 构造函数
b) 析构函数
c) 基于词的countSentence纯虚函数
d) 基于词索引的countSentence纯虚函数
e) 基于句子countString统计函数
f) 基于文件的countFile统计函数
g) 读文件read纯虚函数
h) 写文件write纯虚函数

--------------------------------------
2、函数功能解释
--------------------------------------
a) 构造函数
<src>
0 LMStats::LMStats(Vocab &vocab)
1 : vocab(vocab), openVocab(true)
2 {
3 addSentStart = true;
4 addSentEnd = true;
5 }
</src>
功能:构造函数,初始化成员变量值

细解:第1行通过成员初始化列表的方式,对成员变量vocab和openVocab初始化
第3-4行分别将addSentStart和addSentEnd成员初始化为true。

e) 基于句子countString统计函数
<src>
0 unsigned int
1 LMStats::countString(char *sentence)
2 {
3 static VocabString words[maxWordsPerLine + 1];
4 unsigned int howmany;
5
6 howmany = vocab.parseWords(sentence, words, maxWordsPerLine + 1);
7
8 if (howmany == maxWordsPerLine + 1) {
9 return 0;
10 } else {
11 return countSentence(words);
12 }
13 }
</src>
功能:本函数主要用于分析句子中的词,同时更新相关词的统计量。

细解:第3行在堆上分配了一个金泰的字符串指针buffer,用于保存分析出的词
第6行调用vocab对象的成员函数parseWords分析出sentence中的每一个词并将其
保存到words中。(注:由于parseWords内部是通过调用strtok来分析句子的,
而strtok本身并不会分配内存,只是修改了句子中分隔符的内容,同时进行了指针
偏移操作,因此这里不存在内存泄漏问题)
第8-10行判断howmany是否达到了每一句词的上限,如果达到了该上限,则返回0。
否则执行第11行。
第11行通过调用基于词的countSentence函数更新相关词的统计量。

f) 基于文件的countFile统计函数
<src>
0 unsigned int
1 LMStats::countFile(File &file)
2 {
3 int numWords = 0;
4 char *line;
5
6 while (line = file.getline()) {
7 unsigned int howmany = countString(line);
8
9 /*
10 * Since getline() returns only non-empty lines,
11 * a return value of 0 indicates some sort of problem.
12 */
13 if (howmany == 0) {
14 file.position() << "line too long?/n";
15 } else {
16 numWords += howmany;
17 }
18 }
19 if (debug(DEBUG_PRINT_TEXTSTATS)) {
20 file.position(dout()) << this -> stats;
21 }
22 return numWords;
23 }
</src>
功能:本函数主要用于分析文件中的词,同时更新相关词的统计量

细解:第6-18行循环处理文件中每一句,并更新分析出的词的相应统计量
第6行调用file对象的成员函数getline从文件中读出每一行。
第7行调用基于句子的countString函数分析每一句中的词,同时更新相应
词的统计量,并保存分析出的词数。
第16行记录当前文件中的词数。
第19-21行根据分析结果输出当前文件的状态信息,主要是perpelxity值。

--------------------------------------
知识点:
--------------------------------------
基类
本类是一个基类,声明了一些纯虚函数,这些纯虚函数的实际实现由子
类来定义,同时定义了一些子类公用的函数。该方法很好地体现了面向对象
的编程思想。
LMStats基类中定义了vocab成员对象,该对象主要用于后面ngram统计时
的字符串到索引的映射。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: