【发布时间】:2014-06-24 03:37:04
【问题描述】:
我正在尝试从 MySQL 数据库(使用 MYSQL 工作台)中充满文本(字符串)的表中计算最常用的单词。我通过阅读另一篇文章(由 Kickstart 编写)得到了这段代码。 此代码使用一个名为整数的单独表,其中包含从 0 到 9 的 10 列进行计数。
主表的表架构。我主要只对“文本”列的数据感兴趣。
'Id', 'int(11)', 'NO', 'PRI', '0', ''
'PostId', 'int(11)', 'YES', 'MUL', NULL, ''
'Score', 'int(11)', 'YES', 'MUL', NULL, ''
'Text', 'varchar(4000)', 'YES', '', NULL, ''
'CreationDate', 'varchar(25)', 'YES', '', NULL, ''
'UserId', 'int(11)', 'YES', 'MUL', NULL, ''
'UserDisplayName', 'varchar(255)', 'YES', '', NULL, ''
SQL 查询:
SELECT aWord, COUNT(*) AS WordOccuranceCount
FROM (SELECT SUBSTRING_INDEX(SUBSTRING_INDEX(concat(Text, ' '), ' ', aCnt), ' ', -1) AS aWord
FROM table
CROSS JOIN (
SELECT a.i+b.i*10+c.i*100 + 1 AS aCnt
FROM integers a, integers b, integers c) Sub1
WHERE (LENGTH(Body) + 1 - LENGTH(REPLACE(Text, ' ', ''))) >= aCnt) Sub2
WHERE Sub2.aWord != ''
GROUP BY aWord
ORDER BY WordOccuranceCount DESC
LIMIT 10
它列出了前 10 个单词,但它们都是短单词,例如 a、the、you、me... 等。
如何更改它以跳过某些类似的单词?
我怎样才能让它说,只计算 5 个字符及以上的单词?
整数表的架构 'i', 'int(11)', 'NO', 'PRI', NULL, ''
来自这篇文章的原始帖子和代码。我是新手,无法在上面发布任何内容,所以我不得不在这里问。
determining most used set of words php mysql
非常感谢您的帮助!
【问题讨论】:
-
你能给我们一个你的表模式的样本吗?
-
如果你用表模式更新你的问题会更好
-
用架构更新了问题。谢谢!
-
感谢大家的帮助。如何使未找到的单词仍然在结果中列为 WordOccuranceCount 为 0?目前未找到的单词未列在最终结果中。感谢大家的帮助