gpt4 book ai didi

php - 找出 MySQL/PHP 中最流行的单词

转载 作者:行者123 更新时间:2023-11-29 14:24:23 33 4
gpt4 key购买 nike

我有一个包含近 100,000 条评论的数据库,我想检测最常用的单词(使用停用词来避免常见单词)。

我只想执行一次此操作,然后使用一些最流行的单词来标记包含它们的评论。

您能帮助我使用查询和 PHP 代码来执行此操作吗?谢谢!

最佳答案

我认为最简单的方法是:

  • 创建两个新表:keywords(id、word)和 keywords_comments(keyword_id、comment_id、count)
    • keywords 保存唯一 ID 和您在文本中找到的关键字
    • keywords_comments 为包含该关键字的每条评论之间的每个连接存储一行。在 count 中,您将保存该关键字在评论中出现的次数。两列 keywords_id + comment_id 一起形成唯一的或直接的主键。
  • 从数据库中检索所有评论
  • 解析所有评论并按非字符(或其他边界)分割
  • 将这些条目写入您的表格

示例

您有以下两条评论:

Hello, how are you?!

Wow, hello. My name is Stefan.

现在您将迭代它们并按非字符分割它们。这将导致每个文本出现以下小写单词: - 第一条短信:你好,怎么样,是,你 - 第二条文字:哇,你好,我的名字,是,斯特凡

解析完其中一段文本后,您就可以将其再次插入数据库中。我猜您不想将 100.000 条评论加载到 RAM 中。

所以会这样:

  • 解析第一个文本并获取上面的关键字
  • 将每个关键字写入 tabke keywords(如果尚不存在)
  • 设置从关键字到评论的引用 (keywords_comments) 并正确设置计数(在我们的示例中,每个单词在每个文本中只出现一次,您必须对其进行计数)。
  • 解析第二个文本
  • ...

小幅改进

对于 100,000 条评论,您可能需要使用一个非常简单的改进,即使用计数变量或为每条评论添加一个新字段has_been_analyzed。然后您可以从数据库中逐条评论地阅读它们。

当我按 block 读取数据时,我通常使用计数变量,并且知道数据不能从我开始的方向改变(即,直到我当前所在的点为止,它都会保持一致)。然后我做了类似的事情:

SELECT * FROM table ORDER BY created ASC LIMIT 0, 100
SELECT * FROM table ORDER BY created ASC LIMIT 100, 100
SELECT * FROM table ORDER BY created ASC LIMIT 200, 100

考虑一下,只有当我们确定我们认为已经阅读过的地方没有要添加的日期时,这才有效。例如。使用 DESC 不起作用,因为可能会插入数据。然后整个偏移量就会中断,我们会将一篇文章读两遍,而永远不会读新文章。

如果您无法确保外部计数变量保持一致,您可以添加一个新字段analyzed,您在阅读评论后立即将其设置为 true。然后您可以随时查看哪些评论已被阅读,哪些评论尚未阅读。 SQL 查询将如下所示:

SELECT * FROM table WHERE analyzed = 0 LIMIT 100 /* Reading chunks of 100 */

只要您不并行化工作负载(使用多个客户端或线程),此方法就有效。否则,您必须确保读取+设置 true 是atomar(同步)。

关于php - 找出 MySQL/PHP 中最流行的单词,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11267329/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com