当前位置: 首页 > 面试题库 >

使用SQL确定文本字段的字数统计

马坚
2023-03-14
问题内容

我最近一直在研究一些数据库搜索功能,希望获得一些信息,例如每个文档的平均单词数(例如数据库中的文本字段)。到目前为止,我发现的唯一内容(没有在DB外部进行选择的语言处理)是:

SELECT AVG(LENGTH(content) - LENGTH(REPLACE(content, ' ', '')) + 1)
FROM documents

这似乎可行*,但您还有其他建议吗?我目前使用的是MySQL 4(希望很快将其迁移至该应用程序的版本5),但也对通用解决方案感兴趣。

谢谢!

*我可以想象这是确定它的一种相当粗糙的方法,因为它也没有考虑内容等中的HTML。这个特定项目可以,但是还有更好的方法吗?

更新:
定义“更好”的意思是:更准确,执行效率更高或更“正确”(易于维护,良好实践等)。对于我可用的内容,上面的查询对于该项目来说足够快且准确,但是将来我可能需要类似的内容(所以我问)。


问题答案:

MySQL的文本处理功能不足以满足您的需求。存储功能是一个选项,但可能会很慢。在MySQL中处理数据的最佳选择是添加一个用户定义的函数。无论如何,如果要构建MySQL的较新版本,也可以添加一个native函数。

“正确”的方法是在数据库外部处理数据,因为数据库用于存储而不是处理,并且任何繁重的处理都可能给DBMS带来过多的负担。此外,在MySQL之外计算字数使更改字数定义变得更加容易。更改文档时如何将单词计数存储在数据库中并进行更新?

存储功能示例:

DELIMITER $$
CREATE FUNCTION wordcount(str LONGTEXT)
       RETURNS INT
       DETERMINISTIC
       SQL SECURITY INVOKER
       NO SQL
  BEGIN
    DECLARE wordCnt, idx, maxIdx INT DEFAULT 0;
    DECLARE currChar, prevChar BOOL DEFAULT 0;
    SET maxIdx=char_length(str);
    SET idx = 1;
    WHILE idx <= maxIdx DO
        SET currChar=SUBSTRING(str, idx, 1) RLIKE '[[:alnum:]]';
        IF NOT prevChar AND currChar THEN
            SET wordCnt=wordCnt+1;
        END IF;
        SET prevChar=currChar;
        SET idx=idx+1;
    END WHILE;
    RETURN wordCnt;
  END
$$
DELIMITER ;


 类似资料:
  • 我在寻找一种方法来放弃我的程序中的一个getter。我有一堆动态创建的文本字段: 下面是getter,我想在这里返回聚焦的TextField 处理程序将接收聚焦字段并调用我的“model”-class中的checkInput()方法。 此刻,它接收到一个由我自己设置的预定义字段。检查答案的代码有效。感谢任何帮助我的人,如果我自己找到了一个方法,我一定会把它贴在这里。

  • 注意:下面我讨论的文本字段是一个MFXTextField,我从MaterialFX获得。 我已经搜索了很多关于如何在JavaFX中创建只接受数字的文本字段的内容。我发现了很多视频和帖子,但它们都不适合我,可能是因为它们太老了,只在过去工作过,我真的不知道。 所以,我有一个信用卡文本字段,我需要它来拒绝字母或数字以外的任何内容。这是我的文本字段: 下面是我的代码,它为常规TextField接受Tex

  • 问题内容: 我正在尝试为自己创建一个程序作为哈希图的教程。我要求用户输入文本,然后尝试将其拆分为哈希图,如果单词重复,则增加计数。这是我的程序: 当我输入“随机随机随机”时,我得到:随机0随机1随机2 我需要更改什么才能得到:random 3另外,我是否需要使用迭代器打印出哈希图,还是我使用了OK? 问题答案: 您的初始化错误。您应该初始化为0或1(以计数,而不是索引)。 因此,请首先执行此循环。

  • 问题内容: 如何从mysql db表中检索文本字段,而不是整个文本,仅检索40个左右的字符。 可以在sql中完成此操作,还是需要使用php完成? 基本上我想做的是显示前x个字符,然后让用户单击以查看全部内容。 问题答案: 参见功能。 根据 经验 ,您永远不应该在PHP中做MySQL可以为您做的事情。这样想:您不希望从数据库向请求的应用程序传输超出严格必要的内容。 编辑 如果 要经常使用 同一页面上

  • 我的问题是无法使用和。所以我尝试使用XPath来选择对象,它可以工作,但我无法复制对象并再次添加它。 例如: 我还尝试创建一个自己的对象,但这对我来说也不起作用,因为它没有被接受为JAXB对象。 这是我的代码: 我重新创建了这个问题,因为我想旧的问题有点让人困惑。 我的XML文档(Document.getXML()) 我需要选择文本字段,进行邮件合并,我的计划是复制和移动字段。如果有更好的方法,我

  • 问题内容: 我想从我的文本字段中获取数据并将其设置为int h。并改变了矩形的大小,但我不确定如何从文本字段中获取数据,我在actionperfomred中使用e.getsource很累,但找不到我的文本字段。我的代码如下: 问题答案: 该变量是本地变量。如果要从访问它,则需要将其更改为实例变量。