Word列出了很多文章 - 文档术语矩阵

时间:2009-12-25 02:23:34

标签: words full-text-indexing text-analysis frequency-analysis

我有近150k土耳其文章。我将使用文章进行自然语言处理研究。 我想在处理文章后存储每篇文章的文字和频率。

我现在将它们存储在RDBS中。

我有3张桌子:

文章 - > article_id的,文字
单词 - > word_id,type,word
Words-Article - > id,word_id,article_id,frequency(word_id的索引,article_id的索引)

我将查询

  • 文章中的所有单词
  • 每篇文章的一个词的频率
  • 所有文章和文章中的单词出现

我在文章表中有数百万行。我一直在这个项目中使用RDBS。现在开始使用mysql并使用oracle。但是我不想使用oracle并且想要比mysql更好的性能。

另外,我必须在装有4gb内存的机器上处理这项工作 简单地说,如何存储文档术语矩阵并对其进行一些查询?表现是必要的。可以“键值数据库”在性能上击败mysql吗?或者什么可以击败mysql?

如果您的答案编程语言依赖,我在python中编写代码。但是C / C ++,Java还可以。

2 个答案:

答案 0 :(得分:0)

也许可以查看lucene(或php中的Zend_Search_Lucene)。这是非常好的FTS引擎。

答案 1 :(得分:0)

对于150k篇文章,words_articles表中必须有几亿行。只要您正确配置MySQL,这是可管理的。

一些提示:

  • 确保您的表格是MyISAM,而不是InnoDB。
  • 删除words_articles表中的id字段,并将(word_id,article_id)作为主键。另外,在words_articles表中为word_id和article_id创建单独的索引:

    ALTER TABLE words_articles
    DROP PRIMARY KEY,
    ADD PRIMARY KEY (word_id, article_id),
    ADD INDEX (word_id),
    ADD INDEX (article_id);
    

    (在单个alter语句中执行所有操作可以提供更好的性能)。

  • 在单词表中创建单词索引:

    ALTER TABLE words ADD INDEX (word);
    
  • 调整my.cnf。具体来说,增加缓冲区大小(尤其是key_buffer_size)。 my-huge.cnf可能是一个很好的起点。