学海无涯

在每天的学习中不断成长

常用链接

统计

最新评论

计算主题映射概率(一)读取文档主题分布

本次使用的语料一共有10934个文档,假设每个文档的主题分布是一样的。一个文档对应一个主题分布。因此,在计算主题映射概率之前,需要先对语料进行预处理,首先需要在语料库中读入主题分布。每个文档由<doc></doc>来区分。
原始的语料文档的格式如下所示:

这是第一个文档中的前两句话。而读入主题分布之后的文档如下所示:

我们发现,其中加入了<src_topic>和<tgt_topic>这两个部分。前者是源端语言的主题分布,后者是目标端语言的主题分布。这些主题分布都是从指定文件中读入的。主题分布的文件中格式为:

这是源语言主题分布中的第一和第二个主题分布,每个主题分布包含100个主题分布概率。因此只要将每个分布读到语料中每个文档中的每个句子中。   
      整个算法的思想比较简单,首先找个每个文档,再在文档中定位到每个句子,在句子的对齐信息后面插入主题分布即可。首先给出的是定位到每个句子的代码:
 1 string read_bead(string bead,string topic)
 2 {
 3     string str,str_lag,result;
 4     istringstream input(bead,istringstream::in);
 5     size_t x=0,y=0;
 6     while(getline(input,str))
 7     {
 8         str_lag.append(str);
 9         str_lag.push_back('\n');
10         y=str_lag.find("</bead>");//通过</bead>的标记来定位句子的末尾
11         if (y!=-1)
12         {
13             result+=read_topic(str_lag,topic);
14             str_lag.clear();
15         }
16     }
17     result=result+"</doc>";
18     return result;
19 }
找到句子之后再在句子的对齐信息之后插入主题分布:
1 string read_topic(string bead,string topic)
2 {
3     size_t x=0,y=0;
4     x=bead.find("</aligment>");
5     bead.insert(x+12,topic);
6     return bead;
7 }
其中topic的string是事先从主题分布文件中读入的。
      这样就完成了对语料的预处理,接下去就要进行对主题映射概率的计算。

参考文献:
1、A Topic Similarity Model for HPB_Xinyan Xiao_ACL 2012
2、Hidden Topic Markov Model

posted on 2012-08-06 19:31 nlp 阅读(405) 评论(0)  编辑 收藏 引用 所属分类: 原创


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理