开发者社区 问答 正文

如何在MySQL varchar列中创建最常见子串的有序列表?

我有一个具有两千行的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次出现“ I” 2次出现“有” 1次“鸡肉” .etc .etc 另外,我可能想要维护一个子字符串列表,以便从列表中忽略它们,例如“ I”,“ will”和“ have”。重要的是要注意,我不知道人们会发布什么。

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

有人可以建议最好的方法吗?感谢大家!

问题来源于stack overflow

展开
收起
保持可爱mmm 2019-11-18 17:52:02 497 分享 版权
1 条回答
写回答
取消 提交回答
  • 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。我不建议这样做!

    2019-11-18 17:52:17
    赞同 展开评论