要你命三千——TVCG二十年版

words

0.交待背景


  最近在尝试学习论文写作,写着写着就感觉无比词穷:想写“某某设计代表/展示了某某信息”,翻来覆去都是用show/display/represent/encode几个词,重复感太强,怎么都不够味。怎么办呢?底子太薄,上网上查同义词仿佛大海捞针,怕选词选歪,如何是好?
  我们领域只有一本顶级期刊TVCG(IEEE Transactions on Visualization and Computer Graphics),每年领域内优秀的会议论文都会收到期刊里去,我们毕业的条件之一也是看能不能把论文发到上面去。琢磨了一番后,决定干脆从TVCG的论文里查词选词,这样一来就算用的不妙,至少也不容易用歪。于是就决定统计分析所有TVCG的论文,生成词汇表,平时可以掏出来读一读,就算不能立马升天,也能裨补阙漏,有所广益。说干就干。

1.收集所有论文


  问过组里师兄,说server上只藏有近五年的paper。我感觉五年还是不够多,上IEEEXplore看了一眼发现TVCG似乎是1995创刊,至今21年,在IEEEXplore上全部都有收录,按年份和volume整理。初步分析网页后发现页面结构规整,没有什么特别的trick,最终下载的pdf链接是个静态链接,唯一的限制就是通过该静态链接下载pdf要先经过科大网络的授权验证(我试了一下不能用迅雷批量下载),于是决定写爬虫来抓取自创刊以来的所有paper。
  写完爬虫爬取,发现有反爬虫机制,不能同时访问过多,多了就会干掉我的爬虫,只能老实的一篇一篇爬,爬完了再检查完整性,然后再补爬损坏的paper。总共2900+篇paper,爬了三天才爬完。爬到最后还差一百多篇的时候惊动了管理员,把我的IP给封了,没有警告信囧,至今上不去IEEEXplore。
  换了个电脑把剩下的paper全部爬完,共2937个pdf。

2.从PDF到TXT文本


  2937个pdf并不是全部都是论文,有一些pdf(比如封面、封底、reviewer之类的)是没有作者列表的,过滤掉这些,剩下共有2489篇pdf是有作者列表的,我简单的认为这些pdf都是论文。下一步就是将这些pdf转成TXT的文本,再做进一步的分析。
  起初我以为python更成熟,有相关的类库可以用。调查了一番用了一个python的库pdfminer来将pdf转成txt,这个库是分析pdf页面的布局然后进行抽词的,抽了一遍之后发现效果不是很好,抽出来的文本都黏在一块,没法做分词。
  于是进一步调研,发现js的相关类库似乎更多更成熟,于是转用nodejs来解决。用了一个叫pdf.js的来完成相关工作。我起先以为pdf.js是先将pdf画到canvas上,再做图像识别,然后再抽成文本。后来发现好像也是裸着分析页面布局来抽词的,但是抽出来的效果比python搞的好了很多。可以满足简单的文本分析要求。
  最后还有二十多个pdf不知道是加密了还是怎么的,始终抽不出词来。迫不得已使出大招ORC(Optical Character Recognition)来解决他们,最终全部就范。

3.文本处理NLP


  文本处理我采用了python大名鼎鼎的NLTK库,洗文本、分句、分词、再洗文本、去掉停用词、词干化、统计词频信息,大保健一条龙下来,得到了我要的词汇表以及统计信息。

1
2
3
4
5
6
7
'computer', 'graphics', 'ieee', 'visualization', 'transactions', 'vol',
'email', 'received', 'article', 'work', 'reprints', 'send', 'obtaining',
'section', 'abstract', 'fig', 'accepted', 'eferences', 'references',
'ntroduction', 'introduction', 'manuscript', 'information', 'authors',
'tvcgcomputerorg', 'published', 'society', 'also', 'university', 'please',
'index', 'term', 'paper', 'cknowledgments', 'acknowledgments'
// 自己添加的停用词

  除了英文常见的停用词外,由于有一些期刊投稿相关的词汇以及章节名的词汇在每个pdf里都有,于是我把他们都作为停用词去掉了。
  好,最终的答案马上就要揭晓了,大家可以猜猜看,哪些词的总词频最高(Term frequency in all papers),哪些词在paper中最常上镜(document frequency)?

4.词汇概况


  答案揭晓!先上原词词频十强!

WordTerm FrequencyDocument Frequency
0data1070262337
1using565312406
2time469252349
3used433592390
4set381262327
5visual361182200
6different347562348
7method339702210
8image339051880
9number325682384

  是不是感觉都是很常见的四级词汇?不仅前十个是四级词汇,前五百个基本都是四级词汇,囧rz..
  下面再附上词干化后的十强:

WordTerm FrequencyDocument Frequency
0use1441812443
1data1070782337
2visual642272338
3point566722306
4set565872376
5method555862349
6time552032388
7comput542852405
8imag540632101
9model537432308

  嗯不错,还是很常见。前十个词高度领域相关,use\data\visual\method\model,按出现顺序仿佛都能拼成一句话..
  我们来过滤一下,把六成以上文章都出现过的词汇给过滤掉,再排序取词频前十强看看:

WordTerm FrequencyDocument Frequency
0surface312701568
1volume279441566
2graph221221411
3users212361441
4figure183571387
5flow180571110
6mesh17772958
7virtual160521191
8nodes15773970
9participants15250557

  哼哼到这感觉就体现了领域内的子方向:surface是什么其实我不知道; volume是不是代表了volume rendering呢; graph占据了领域内的大半壁江山; data flow\text flow\各种flow,flow图一般都优雅美观; virtual已然是在半数文章都出现了,接下来的VR\AR热,岂不是更要爆发一波?

  总的来说,似乎写好tvcg文章对词汇的要求貌似并不高,我翻到两千多词去看基本都是四级词汇…或许文章结构和逻辑更为重要。抽出来的词好像更能体现圈子里的各类话题,算是从侧面了解领域现状吧。最后想看完整词汇表的话点击这里(左边是词干化后的词汇,右边是原词,点击表头可以切换排序方式)。

热评文章