- 签证留学 |
- 笔译 |
- 口译
- 求职 |
- 日/韩语 |
- 德语
接下来要搜索一支名为RIMM的股票:
>>> lotsOtweets = fpGrowth.getLotsOfTweets('RIMM')
fetching page 1
fetching page 2
lotsotweets列表包含14个子列表,每个子列表有100条推文。可以输入下面的命令来查看推文的内容:
>>> lotsOtweets [0][4] .text
u"RIM: Open The Network, Says ThinkEquity: In addition, RIMM needs to reinvent its image, not only demonstrating ... http://bit.ly/lvlVlU"
正如所看到的那样,有些人会在推文中放人URL。这样在解析时,结果就会比较乱。因此必须去掉URL,以便可以获得推文中的单词。下面程序清单中的一部分代码用来将推文解析成字符串列表,另一部分会在数据集上运行FP-growth算法。将下面的代码添加到fpGrowth.py文件中。
程序清单2 文本解析及合成代码
上述程序清单中的第一个函数里添加了一行代码用于去除URL。这里通过调用正则表达式模块来移除任何URL。程序清单2中的另一个函数mineTweets()为每个推文调用textParse。最后,mineTweets()函数将命令封装到一起,来构建FP树并对其进行挖掘。最后返回所有频繁项集组成的列表。
下面看看运行的效果:
>>> reload(fpGrowth)
<module 'fpGrowth' from 'fpGrowth.py'>
Let's look for sets that occur more than 20 times:
>>> listOfTerms = fpGrowth.mineTweets(lotsOtweets, 20)
How many sets occurred in 20 or more of the documents?
>>> len(listOfTerms)
455
我写这段代码的前一天,一家以RIMM股票代码进行交易的公司开了一次电话会议,会议并没有令投资人满意。该股开盘价相对前一天封盘价暴跌22%。下面看下上述情况是否在推文中体现:
>>> for t in listOfTerms:
... print t
set ([u'rimm', u'day'])
set ([u'rimm', u'earnings'])
set ([u'pounding', u'value'])
set ([u'pounding', u'overnight'])
set ([u'pounding', u'drops'])
set ([u'pounding', u'shares'])
set ([u'pounding', u'are'])
set ([u'overnight'])
set ([u'drops', u'overnight'])
set ([u'motion', u'drops', u'overnight'])
set ([u'motion', u'drops', u'overnight', u'value'])
set ([u'drops', u'overnight', u'research'])
set ([u'drops', u'overnight', u'value', u'research'])
set ([u'motion', u'drops', u'overnight', u'value', u'research'])
set ([u'motion', u'drops', u'overnight', u'research'])
set ([u'drops', u'overnight'; u'value'])
尝试一些其他的minSupport值或者搜索词也是蛮有趣的。
我们还记得FP树的构建是通过每次应用一个实例的方式来完成的。这里假设已经获得了所有数据,所以刚才是直接遍历所有的数据来构建Fp树的。实际上可以重写createTree()函数,每次读人一个实例,并随着Twitter流的不断输入而不断增长树。FP-growth算法还有一个map-reduce版本的实现,它也很不错,可以扩展到多台机器上运行。Google使用该算法通过遍历大量文本来发现频繁共现词,其做法和我们刚才介绍的例子非常类似。
责任编辑:admin