0

我有一个包含几千行的 MySQL 数据库表。该表设置如下:

id | text

id列是一个自动递增的整数,并且该text列是一个 200 个字符的 varchar。

假设我有以下行:

3 | I think I'll have duck tonight

4 | Maybe the chicken will be alright

5 | I have a pet duck now, awesome!

6 | I love duck

那么我想要生成的列表可能是这样的:

  • “鸭子”出现 3 次
  • “我”出现 3 次
  • 出现 2 次“有”
  • “鸡”出现 1 次

另外,我可能想要维护一个从列表中忽略的子字符串列表,例如'I'、'will'和'have。重要的是要注意,我不知道人们会发布什么。

我没有要监视的单词列表,我只想找到最常见的子字符串。然后,我将通过编辑查询手动从列表中过滤掉任何不感兴趣的错误子字符串。

谁能建议最好的方法来做到这一点?谢谢大家!

4

3 回答 3

2

MySQL 已经为你做到了。

首先确保您的表是 MyISAM 表

在列上定义 FULLTEXT 索引

在 shell 命令行上导航到存储 MySQL 数据的文件夹,然后键入:

myisam_ftdump -c yourtablename 1 >wordfreq.dump

然后,您可以处理 wordfreq.dump 以消除不需要的列并按频率降序排序。

毫无疑问,您可以使用单个命令行和一些 sed/awk 魔法来完成上述所有操作。您可以将其合并到您的程序中,而无需转储文件。

关于 myisam_ftdump 的更多信息:http: //dev.mysql.com/doc/refman/5.0/en/myisam-ftdump.html

哦...还有一件事,MySQL 的停用词已预编译到引擎中。并且不索引具有 3 个或更少字符的单词。完整列表在这里:

http://dev.mysql.com/doc/refman/5.0/en/fulltext-stopwords.html

如果此列表不能满足您的需要,或者您需要计算少于 3 个字符的单词,唯一的方法是使用不同的 FULLTEXT 规则重新编译 MySQL。我不建议这样做!

于 2008-10-30T05:44:03.560 回答
0

解压到平面文件,然后使用您喜欢的快速语言、perl、python、ruby 等来处理平面文件。

如果您的技能组合中没有一种这些语言,那么开始使用一种语言是一项完美的小任务,而且不会花费您很长时间。

一些数据库任务在数据库之外执行起来要容易得多。

于 2008-10-30T00:03:59.037 回答
0

您可能想查看 MySQL Full-Text Parser Plugins

于 2008-10-30T00:10:28.227 回答