如何知道段落中包含多少个单词?

时间:2009-11-23 04:00:04

标签: mysql function

我可以使用哪些MySQL功能?

例如,

  

我可以使用什么Mysql功能?

包含6个单词。

2 个答案:

答案 0 :(得分:3)

我知道没有内置的函数,但我在MySQL的String Functions文档的评论中发现了这一点:


我在mysql中寻找word_count(“string”),最后想出了一个用户定义的函数,对我来说非常有用,注意:我用的是实际空间。

DROP FUNCTION IF EXISTS word_count;
CREATE FUNCTION word_count (f_string text(5000)) RETURNS smallint(10)
BEGIN
DECLARE new_string text(5000);
WHILE INSTR(f_string,'<space><space>')>0
DO
SET new_string=(select REPLACE(f_string,'<space><space>','<space>'));
SET f_string=new_string;
END WHILE;

RETURN (select LENGTH(TRIM(f_string))-LENGTH(REPLACE(TRIM(f_string),'<space>',''))+1);
END
//

结果如下

  

的MySQL&GT;选择word_count(“Balaji Devarajan”)WORD_COUNT;

+------------+
| WORD_COUNT |
+------------+
|          2 |
+------------+
1 row in set (0.00 sec)
  

的MySQL&GT;选择word_count(“Balaji Devarajan”)WORD_COUNT;

+------------+
| WORD_COUNT |
+------------+
|          2 |
+------------+
1 row in set (0.00 sec)
  

的MySQL&GT;选择word_count(“Balaji Devarajan”)WORD_COUNT;

+------------+
| WORD_COUNT |
+------------+
|          2 |
+------------+
1 row in set (0.01 sec)

答案 1 :(得分:1)

没有函数来计算MySQL(或ANSI SQL,或我熟悉的任何其他DBMS)中的单词。

你可以通过使用字符串替换来计算文本中的空格数,可能伪造它:

SELECT LENGTH(colname)-LENGTH(REPLACE(colname, ' ', ''))+1 AS wordcount FROM tablename;

这不是真正的单词计数,但只要每个单词只用一个空格分隔就可以工作。

为了获得更好的单词匹配,你需要一个正则表达式,但MySQL中没有正则表达式替换,所以你不能使用替换技巧。您可以使用REGEXP / RLIKE匹配选择具体的6字长值:

SELECT * FROM tablename WHERE colname RLIKE '^[^[:alnum:]]*[[:alnum:]]+([^[:alnum:]]+[[:alnum:]]+){5}[^[:alnum:]]*$';

无论哪种方式,这都很慢。每次执行查询时,必须在表的每一行上执行字符串替换或正则表达式匹配。如果单词数是您经常进行的查询,则需要通过添加(可能是索引的)列来存储单词数来优化(非规范化)表。