对Twitter数据进行预处理/消毒



我需要预处理原始twitter数据集(大约1 GB的文本文件)。预处理(包括删除停止词、特殊符号、URL)后,我将使用lucene对它们执行索引。

你们中的任何人能建议一下净化推文的最佳方法吗?

以下是数据示例:

60730027    6298443824  thank you echo park. you've changed A LOT, but as long as I'm getting paid to make you move, I'm still with it! 2009-12-03 02:54:10
60730027    6297282530  fat Albert Einstein goin in right now over here!!!  2009-12-03 01:35:22
60730027    6283122724  SATURDAY NIGHT AT THE TAVERN:  http://yfrog.com/4aka3cj 2009-12-02 16:21:40
60730027    6283105517  FRIDAY NIGHT AT THE GRIFFIN: http://yfrog.com/3glqzj    2009-12-02 16:21:04

第一列编号对应于用户位置。然而,我不确定第二列的编号对应于什么。

为了对数据进行消毒,我会用城市名称替换用户位置代码,删除时间戳,删除停止字符、URL等。

请就如何进行提出建议。

提前感谢!

首先需要加入位置代码列,将其替换为城市名称。由于locationCode-city元组(映射)的数量相对较小(约400),因此可以进行映射侧联接。

在作业提交之前,首先将映射文件添加到缓存中。根据Hadoop版本使用:

// prior to 2.2.0
DistributedCache.addCacheFile(new Path(path/cityCode_NameMappings.txt).toUri(), conf);
//OR 2.2.0 onwards. DistributedCache is deprecated 
job.addCacheFile(new Path(filename).toUri());

使用在Mapper的setup方法中检索

Path[] cacheFiles = DistributedCache.getLocalCacheFiles(job);
// OR
Path[] cacheFiles = context.getLocalCacheFiles();

通过名称识别文件,读取文件并将内容放入静态HashMap<code,name>中,并使用它来替换map方法中实际twitter数据文件传入行中的代码。当可能的映射数量相对较少时,可以采用相同的策略来替换第二列(当前超出范围)。

最后,只选择实际tweet的正文,regex和简单的字符串操作似乎就足够了。现在您有两个选项:

  1. 使用Reducer类进行文本提取。此方式代码替换推特正文提取将以单独的抽象形式进行。

  2. 在Mapper本身中进行处理,并将减速器的数量设置为零。这将是一个只有地图的作业,虽然看起来会更快有点乱。

选择权在你。同样,如果您的城市代码映射数量很大,那么您别无选择,只能执行reduce-side联接。这将是相对的实现起来很复杂。

第二个想法:如果您可以自由选择除原始Lucene之外的其他索引工具,我建议您使用ElasticSearch(基于Lucene构建)。然后,您可以使用配置单元进行连接,并使用配置单元ES集成将数据加载到索引中。尽管如此,你还是必须进行文本处理(也许蜂箱serde可以做到这一点)。

相关内容

  • 没有找到相关文章

最新更新