4

我有一个数据库,其中包含需要分析的原始文本。例如,我收集了数亿个单独网页的标题标签,并根据主题对其进行聚类。我现在有兴趣对每个主题集群的子集执行一些额外的测试。问题有两个方面。首先,我无法将所有文本都放入内存来评估它。其次,我需要并行运行其中的几个分析,所以即使我可以将一个子集放入内存,我当然也无法将许多子集放入内存。

我一直在使用生成器,但通常有必要了解有关已加载和评估的数据行的信息。

我的问题是:处理和分析无法放入内存的数据的最佳方法是什么。数据必须从某种数据库中提取(目前是 mysql,但可能很快就会切换到更强大的解决方案。)

我正在构建处理 Python 数据的软件。

谢谢,

编辑

我将整天对此进行研究和集思广益,并计划继续发表我的想法和发现。请留下您可能有的任何意见或建议。

想法 1:标记单词和 n-gram 并保存到文件。对于从数据库中提取的每个字符串,使用已存在文件中的标记进行标记。如果令牌不存在,请创建它。对于每个单词标记,从右到左组合,直到字符串中所有单词的单一表示存在。搜索包含减少标记的现有列表(可以放入内存)以查找潜在的匹配项和相似性。每个简化的令牌都将包含一个指示令牌类别的标识符。如果发现简化标记(由单词标记组合创建的标记)与感兴趣的标记化字符串分类匹配,但不是直接匹配,那么简化标记将分解为其对应部分,并逐个单词进行比较。标记到感兴趣的字符串。

我不知道是否已经存在可以做到这一点的库或模块,我也不确定我会从中获得多少好处。但是,我的优先事项是:1)节省内存,2)担心运行时间。想法?

编辑 2

Hadoop 肯定会成为这个问题的解决方案。我在 python 和 hadoop 中找到了一些关于自然语言处理的好资源。见下文:

  1. http://www.cloudera.com/blog/2010/03/natural-language-processing-with-hadoop-and-python
  2. http://lintool.github.com/MapReduceAlgorithms/MapReduce-book-final.pdf
  3. http://www.michael-noll.com/tutorials/writing-an-hadoop-mapreduce-program-in-python
  4. https://github.com/klbostee/dumbo/wiki/Short-tutorial

谢谢你的帮助!

4

2 回答 2

3

Map/Reduce就是为此目的而创建的。

最好的 map reduce 引擎是 Hadoop,但它的学习曲线很高,需要很多节点才值得。如果这是一个小项目,您可以使用MongoDB,这是一个非常易于使用的数据库,并且包含一个使用 Javascript 的内部 map reduce 引擎。map reduce 框架非常简单易学,但它缺少使用 Hadoop 在 JDK 中可以获得的所有工具。

警告:您一次只能在 MongoDB 的 map reduce 引擎上运行一个 map reduce 作业。这对于链接作业或中等数据集(<100GB)来说没问题,但它缺乏 Hadoop 的并行性。

于 2012-07-17T16:27:05.407 回答
0

目前 mysql 但可能很快就会切换到更强大的解决方案。

请不要更糟——对于大多数类型的任务来说,MySQL 是最好的解决方案。

要处理海量数据,请使用iteratoolsBuild a Basic Python Iterator

关于如何迭代数据。这取决于你的算法。

于 2012-07-17T15:47:45.167 回答