MySQL中的n-gram计数

时间:2011-09-21 14:40:18

标签: mysql full-text-search nlp n-gram

我正在构建一个大约有10,000条记录的MySQL数据库。每条记录都包含一个文本文档(大多数情况下是几页文本)。我想在整个数据库中进行各种n-gram计数。我已经用Python编写了算法,这将是我想要的包含大量文本文件的目录,但要做到这一点,我需要从数据库中提取10,000个文本文件 - 这将有性能问题。

我是MySQL的新手,所以我不确定它是否有任何内置功能进行n-gram分析,或者是否有好的插件可以做到这一点。请注意,在我的分析中,我需要达到至少4克(最好是5克),所以我见过的简单的2克插件在这里不起作用。我还需要能够在进行n-gram计数之前从文本文档中删除停用词。

来自社区的任何想法?

谢谢,

罗恩

2 个答案:

答案 0 :(得分:1)

我的建议是使用像lucene / solr这样的专用全文搜索索引程序,它对这类东西有更丰富和可扩展的支持。它需要你学习一点才能设置它,但听起来好像你想在一个难以在MySQL中自定义的水平上乱七八糟。

答案 1 :(得分:0)

如果你真的想过早地优化;)你可以translate your python into C然后用薄mysql UDF wrapper code包裹它。

但我强烈建议您一次只加载一个文档并在其上运行python脚本以填充n-gram的mysql表。我现在每把钉子的锤子都是Django。它是ORM与mysql表交互并优化这些交互。我正在使用它在python中对production sites的数百万记录数据库进行统计,这些数据库必须在不到一秒的时间内返回大量数据。如果你找到比mysql更好的东西,比如postgre,任何python ORM都会让你更容易切换出你的数据库。最好的部分是有很多python和django工具来监控应用程序性能的各个方面(python执行,mysql加载/保存,内存/交换)。这样你就可以解决正确的问题。可能是连续的批量mysql读取并不会减慢你的速度......