广告
返回顶部
首页 > 资讯 > 数据库 >SQL中怎么处理文本数据
  • 173
分享到

SQL中怎么处理文本数据

2024-04-02 19:04:59 173人浏览 薄情痞子
摘要

sql中怎么处理文本数据,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。导入数据  为了简单,我们用一个只有三行(三个文档)的文本文件(a.

sql中怎么处理文本数据,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。

导入数据

  为了简单,我们用一个只有三行(三个文档)的文本文件(a.txt)作为原始数据。Mysql 只支持从特定的目录导入文件中的数据。可以用如下 SQL 语句查询这个目录:

  mysql> SHOW VARIABLES LIKE "secure_file_priv";

  +------------------+-----------------------+

  | Variable_name | Value |

  +------------------+-----------------------+

  | secure_file_priv | /var/lib/mysql-files/ |

  +------------------+-----------------------+

  把 a.txt 拷贝到这个目录(/var/lib/mysql-files/)之后,可以用如下语句导入创建一张表,并且导入数据。因为表里的 id 是自动生成的,所以导入过程会给每一行(每一个文档)分配一个文档 id。

  CREATE DATABASE IF NOT EXISTS play;USE play;

  DROP TABLE IF EXISTS docs;

  CREATE TABLE IF NOT EXISTS docs (

  id INT NOT NULL AUTO_INCREMENT,

  doc TEXT,

  PRIMARY KEY (id));

  LOAD DATA INFILE “/var/lib/mysql-files/a.txt”

  INTO TABLE docs (doc);

  现在我们可以检查一下结果

  mysql> SELECT * FROM docs;

  +----+------------------------+

  | id | doc |

  +----+------------------------+

  | 1 | fresh carnation flower |

  | 2 | mother day |

  | 3 | mother teresa |

  +----+------------------------+

  分词

  有一些数据库系统,比如阿里云上的 MaxCompute 提供分词用的 UDF,是一个特色。本文假设没有这样的功能。仅仅按照空格来分词,SQL 也是可以通过 inner join 做到的。

  因为分词是把一个字符串变成多条记录。具体的说,要取出字符串中第一个、第二个、第三个。。。子串。所以我们需要一个自然数序列。我们可以通过上面例子里自动产生文档 ID 的机制,生成这个序列。下面的语句创建一个表 incr,其中只有一列,是自动产生的自然数序列。

  DROP TABLE IF EXISTS incr;

  DROP PROCEDURE IF EXISTS generate_sequence;

  CREATE TABLE IF NOT EXISTS incr (

  n INT NOT NULL AUTO_INCREMENT,

  PRIMARY KEY (n));

  DELIMITER //

  CREATE PROCEDURE generate_sequence()

  BEGIN

  DECLARE i int DEFAULT 0;

  WHILE i < 5 DO   INSERT INTO incr () VALUES ();   SET i = i + 1;   END WHILE;   END   //   DELIMITER ;   CALL generate_sequence;   上面语句创建了 SQL 子程序(procedure),其中的循环往 incr 表里增加了 5 条记录,从而产生了一个 1 到 5 的自然数序列。我们可以修改其中的 5 为其他任何数值,来创建更长或者更短的序列。   mysql> select * from incr;

  +----+

  | n |

  +----+

  | 1 |

  | 2 |

  | 3 |

  | 4 |

  | 5 |

  +----+

  利用这个序列,我们可以把每个字符串分割成最多 5 个(或者更多)的子串。

  CREATE TABLE doc_Words

  SELECT

  docs.id,

  SUBSTRING_INDEX(SUBSTRING_INDEX(docs.doc, ' ', incr.n), ' ', -1) word

  FROM

  incr INNER JOIN docs

  ON CHAR_LENGTH(docs.doc)

  -CHAR_LENGTH(REPLACE(docs.doc, ' ', ''))>=incr.n-1

  ORDER BY

  id, n;

  上面语句里的 join 操作把每条记录(字符串,或者叫文档)复制了 5 份;而 SELECT 操作选取每个复制中的第 i 个子串(word);CREATE TABLE 把结果写入一张新的表 doc_words,其内容如下。

  mysql> select * from doc_words;

  +----+-----------+

  | id | word |

  +----+-----------+

  | 1 | fresh |

  | 1 | carnation |

  | 1 | flower |

  | 2 | mother |

  | 2 | day |

  | 3 | mother |

  | 3 | teresa |

  +----+-----------+

  停用词

  很多时候,我们回想剔除分词结果中的停用词(stopwords)。假设我们有一个停用词表 —— 下文中用 (SELECT 'fresh')替代 —— 假设这个词表里只有一个单词了,下面语句剔除掉 doc_words 表中的停用词。

  mysql> SELECT * FROM doc_words WHERE word NOT IN (SELECT 'fresh');

  +----+-----------+

  | id | word |

  +----+-----------+

  | 1 | carnation |

  | 1 | flower |

  | 2 | mother |

  | 2 | day |

  | 3 | mother |

  | 3 | teresa |

  +----+-----------+

  词向量

  仅仅分词还不足以计算文档距离,还需要统计每个文档里,每个词出现的次数 —— 也就是词向量。下面的 SQL 语句可以很方便地做这件事。

  CREATE TABLE doc_word_count

  SELECT id, word, count(word) as count

  FROM doc_words GROUP BY id, word;

  我们看看结果。

  mysql> SELECT * FROM doc_word_count;

  +----+-----------+-------+

  | id | word | count |

  +----+-----------+-------+

  | 1 | carnation | 1 |

  | 1 | flower | 1 |

  | 1 | fresh | 1 |

  | 2 | day | 1 |

  | 2 | mother | 1 |

  | 3 | mother | 1 |

  | 3 | teresa | 1 |

  +----+-----------+-------+

  归一化词向量

  通过归一化词向量,我们可以得到一个文档的词分布(word distribution);这是计算文档相似度的输入。为了归一,需要能统计文档的长度,这可以通过 GROUP BY id 来实现。

  mysql> SELECT id, sum(count) as len FROM doc_word_count GROUP BY id;

  +----+------+

  | id | len |

  +----+------+

  | 1 | 3 |

  | 2 | 2 |

  | 3 | 2 |

  +----+------+

  基于上述方法,下面的 SQL 语句从 doc_words 表推导出 doc_word_dist 表,表示词分布。

  CREATE TABLE doc_word_dist

  SELECT doc_word_count.id, word, count/len AS prob

  FROM doc_word_count,

  (SELECT id, sum(count) as len FROM doc_word_count GROUP BY id) s

  WHERE doc_word_count.id = s.id;

  我们检查一下结果。

  mysql> SELECT * FROM doc_word_dist;

  +----+-----------+--------+

  | id | word | prob |

  +----+-----------+--------+

  | 1 | carnation | 0.3333 |

  | 1 | flower | 0.3333 |

  | 1 | fresh | 0.3333 |

  | 2 | day | 0.5000 |

  | 2 | mother | 0.5000 |

  | 3 | mother | 0.5000 |

  | 3 | teresa | 0.5000 |

  +----+-----------+--------+

  文档相似度

  有了归一化的词向量,下面语句计算文档之间的两两相似度(pairwise similarity)。我们用的是 dot product similarity。

  SELECT x.id, y.id, sum(x.prob*y.prob)

  FROM doc_word_dist x, doc_word_dist y

  WHERE x.id > y.id AND x.word = y.word

  GROUP BY x.id, y.id;

  在这个非常简单的例子里,第二个和第三个文档里共同出现了一个单词“mother”。而其他任何文档对(pairs)都没有共用的词,所以结果只有一行。

  +----+----+--------------------+

  | id | id | sum(x.prob*y.prob) |

  +----+----+--------------------+

  | 3 | 2 | 0.25000000 |

  +----+----+--------------------+

  AI + SQL

  从这个例子我们可以看到。虽然文档 2 和 3 在词向量空间有一定相似度,但是其实一个是关于特蕾莎修女,一个是关于母亲节 —— 英语里 mother 有修女和母亲两个意思 —— 这结果不合理。反而是 文档 1 “康乃馨” 是母亲节必备的礼物,应该存在一定的相似度。

  不管我们用 SQL 还是 python 来做文本分析,我们都希望借助 AI 的力量深刻理解文本,而不是仅仅在字面上做聚类等分析。接下来的文章,我们会更新如何利用 SQLFlow 扩展 SQL,引入 latent topic modeling 技术来做语义理解。

关于SQL中怎么处理文本数据问题的解答就分享到这里了,希望以上内容可以对大家有一定的帮助,如果你还有很多疑惑没有解开,可以关注编程网数据库频道了解更多相关知识。

您可能感兴趣的文档:

--结束END--

本文标题: SQL中怎么处理文本数据

本文链接: https://www.lsjlt.com/news/56702.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • SQL中怎么处理文本数据
    SQL中怎么处理文本数据,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。导入数据  为了简单,我们用一个只有三行(三个文档)的文本文件(a....
    99+
    2022-10-18
  • 怎么使用Python处理文本数据
    本篇内容介绍了“怎么使用Python处理文本数据”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!用python处理文本数据实验目的熟悉pyth...
    99+
    2023-07-02
  • shell 文本数据处理
    文章目录 重定向管道`grep` 模式搜索`sed` 匹配替换`awk` 复杂业务编程(TODO)参考   在 linux shell 中,不同工具、程序间通过文本进行数据交互,即以文本作为输入、输出标准格式。文本成为公共的...
    99+
    2023-08-24
    linux 服务器 运维
  • Python中怎么清理文本数据
    Python中怎么清理文本数据,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。1.文本小写在我们开始处理文本之前,最好先将所有字符都小写。我们这样做的原因是为了避...
    99+
    2023-06-16
  • nlp中怎么处理文本中的数字
    在自然语言处理中,处理文本中的数字通常可以采取以下几种方式:1. 去除数字:可以使用正则表达式或其他方法将文本中的数字直接去除,例如...
    99+
    2023-09-21
    nlp
  • python中怎么处理文本
    这篇文章给大家介绍python中怎么处理文本,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。python处理文本使用方法我们的目的是把记录中包含January的名字列出来,符合“名字 -- 描述”格式的行为有效行。编写p...
    99+
    2023-06-17
  • C#中怎么处理文本文件
    这期内容当中小编将会给大家带来有关C#中怎么处理文本文件,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。C#处理文本文件C#处理文本文件是一种常用的文件格式,所以如何处理文本文件也就成为编程的一个重点。本文...
    99+
    2023-06-18
  • Java中怎么处理大文本文件
    今天就跟大家聊聊有关Java中怎么处理大文本文件,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。集算器与Java应用程序的集成结构如下:下面举例说明集算器协助JAVA查询大文本的基本过...
    99+
    2023-06-17
  • SQL Server中怎么处理日志文件
    本篇文章为大家展示了SQL Server中怎么处理日志文件,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。  SQLServer日志文件归纳及充斥怎么处理  交易日志...
    99+
    2022-10-18
  • 怎么备份SQL数据库的文件到本地
    这篇文章主要讲解了“怎么备份SQL数据库的文件到本地”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“怎么备份SQL数据库的文件到本地”吧!  response...
    99+
    2022-10-18
  • MySQL中文数据问题怎么处理
    下文主要给大家带来MySQL中文数据问题怎么处理,希望这些内容能够带给大家实际用处,这也是我编辑MySQL中文数据问题怎么处理这篇文章的主要目的。好了,废话不多说,大家直接看下文吧。中文数据问题中文数据问题...
    99+
    2022-10-18
  • 怎么从文本文件读入 SQL 参数
    这篇文章给大家介绍怎么从文本文件读入 SQL 参数,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。有时我们希望把参数列表分行存储在文本文件里,执行SQL时再拼到in函数里,从而查询出符合条件的记录。但SQL不能解析文本文...
    99+
    2023-06-03
  • java中怎样使用Files.readLines()处理文本中行数据方式
    java中怎样使用Files.readLines()处理文本中行数据方式,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。使用Files.readLines()处理...
    99+
    2023-06-22
  • sql中怎么处理数据库锁的存储过程
    这篇文章给大家介绍sql中怎么处理数据库锁的存储过程,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。邹建 2004.4复制代码 代码如下: alter proc p_lockinfo...
    99+
    2022-10-18
  • 怎么在SQL Server中处理数据库角色权限
    这期内容当中小编将会给大家带来有关怎么在SQL Server中处理数据库角色权限,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。    1:遍...
    99+
    2022-10-18
  • 让你一文弄懂Pandas文本数据处理
    目录前言1. 文本数据类型1.1. 类型简介1.2. 类型差异2. 字符串方法2.1. 文本格式2.2. 文本对齐2.3. 计数与编码2.4. 格式判断3. 文本高级操作3.1. 文...
    99+
    2022-11-12
  • Pandas数据分析之pandas文本处理
    目录前言文本数据类型字符操作文本格式文本对齐​文本计数和编码格式判断文本高级处理文本分割 文本切片选择 slice划分 partition文本替换指定位置替换重复替换文本连...
    99+
    2022-11-11
  • kafka如何处理各种文本数据
    Kafka本身并不处理各种文本数据,它只是一种分布式消息队列,用于可靠地传输数据。但可以使用Kafka来传输和存储各种文本数据。下面...
    99+
    2023-10-12
    kafka
  • 中文维基百科文本数据获取与预处理
    照例,先讲下环境,Mac OSX 10.11.2 ,Python 3.4.3。 下载数据 方法1:使用官方dump的xml数据 最新打包的中文文档下载地址是:https://dumps.wikimedia.org/zhwiki/lates...
    99+
    2023-01-31
    中文 维基百科 文本
  • SQL Server 中怎么将数据导出为脚本
    SQL Server 中怎么将数据导出为脚本,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。   在SSMS2008(SQL ...
    99+
    2022-10-18
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作