原文:http://blog.163.com/andy_tsg/blog/static/1617002462010521027588/
前一个月在赶一篇准备投CIKM 2010的关于transfer learning 和文本分类的paper。虽然实验效果证明了当初的idea不是很work,所以论文最终还是没能make出来,但这个过程还是很有收获的。这里分享下我处理reuters-21578的数据集的一些经验,因为在实验初期处理这个数据集花了我整整两天的时间,费了不少周折,希望对要处理这个数据集的同学有点帮助。
该测试集可以在http://www.daviddlewis.com/resources/testcollections/reuters21578/下载到。这个测试集应该是使用最广泛的文本分类标准测试集(之一?)了,也是我处理过的测试集中最麻烦的一个(其他的如SRAA,20 Newsgroups等)。
1. 这个数据集中的所有记录并不是一股脑拿来全部都用的,学术界有好几种划分的方法,通常最最常用的是ModApte划分方法(关于如何划分的细节可以参见下载包里README.txt文件的介绍)
2. 这些数据文件貌似是有一定的格式的,我刚开始也试图把他们当做标准的xml文档来处理(因为下载包里还像模像样的包含了一个SGML DTD 的文件),但老是报错。最终发现很多的记录格式是错误的,而且错误千奇百怪。所以干脆放弃,直接把它们全部看做文本文件来处理得了
3. 并不是所有按照ModApte划分得到的记录都能拿来使用,因为有些记录的<TOPICS>与</TOPICS>之间并没有包含任何的topic信息(比如reut2-000.sgm文件的第307行记录,写个程序可以检测出有不少这种情况,仅举一例),所以只好丢弃
4. 并不是所有的包含topic的记录都包含有<BODY>字段和<TITLE>字段(比如reut2-000.sgm文件中的第3099行记录,同样这种情况也有不少),但是因为这种情况通常在<TEXT>字段中还是包含了一些文字信息的,所以我选择并不将它丢弃
5. 由于有4,所以我处理时并不是只将<BODY>字段和<TITLE>字段看作记录的正文,而是将去除所以包含在成对的<和>之间的内容和有关topic的内容后得到的所剩下的部分当做记录正文来看待。这样处理的后果是包含了<DATA>、<PLACES>、<PEOPLE>、<ORGS>、<EXCHANGES>、<COMPANIES>、<UNKNOWN>等字段的信息。但实际上这些字段提供的信息相对是很少的,而且如果有提供的话也是跟记录的正文有关联的,所以我认为这种处理方式还是比较合适的
6. 抽取出记录内容后将其中所有的非英文字符去除,并将英文字符全部转换为小写