我有一个数据库,其中包含需要分析的原始文本。例如,我收集了数亿个单独网页的标题标签,并根据主题对其进行聚类。我现在有兴趣对每个主题集群的子集执行一些额外的测试。问题有两个方面。首先,我无法将所有文本都放入内存来评估它。其次,我需要并行运行其中的几个分析,所以即使我可以将一个子集放入内存,我当然也无法将许多子集放入内存。
我一直在使用生成器,但通常有必要了解有关已加载和评估的数据行的信息。
我的问题是:处理和分析无法放入内存的数据的最佳方法是什么。数据必须从某种数据库中提取(目前是 mysql,但可能很快就会切换到更强大的解决方案。)
我正在构建处理 Python 数据的软件。
谢谢,
编辑
我将整天对此进行研究和集思广益,并计划继续发表我的想法和发现。请留下您可能有的任何意见或建议。
想法 1:标记单词和 n-gram 并保存到文件。对于从数据库中提取的每个字符串,使用已存在文件中的标记进行标记。如果令牌不存在,请创建它。对于每个单词标记,从右到左组合,直到字符串中所有单词的单一表示存在。搜索包含减少标记的现有列表(可以放入内存)以查找潜在的匹配项和相似性。每个简化的令牌都将包含一个指示令牌类别的标识符。如果发现简化标记(由单词标记组合创建的标记)与感兴趣的标记化字符串分类匹配,但不是直接匹配,那么简化标记将分解为其对应部分,并逐个单词进行比较。标记到感兴趣的字符串。
我不知道是否已经存在可以做到这一点的库或模块,我也不确定我会从中获得多少好处。但是,我的优先事项是:1)节省内存,2)担心运行时间。想法?
编辑 2
Hadoop 肯定会成为这个问题的解决方案。我在 python 和 hadoop 中找到了一些关于自然语言处理的好资源。见下文:
- http://www.cloudera.com/blog/2010/03/natural-language-processing-with-hadoop-and-python
- http://lintool.github.com/MapReduceAlgorithms/MapReduce-book-final.pdf
- http://www.michael-noll.com/tutorials/writing-an-hadoop-mapreduce-program-in-python
- https://github.com/klbostee/dumbo/wiki/Short-tutorial
谢谢你的帮助!