很多朋友们以为 SQL 是用来处理结构化数据的;而文本是典型的非结构化数据(unstructured data)。其实 SQL 可以处理文本,而且比 Python 更方便 。
这篇文章简要介绍如何用 MySQL 来分词,构造词表,词向量,和计算文本的相似度。本文中的例子,用 TiDB 应该也可以跑通。微调之后,Apache Hive 和阿里巴巴 MaxCompute 应该也是可以的。
导入数据
为了简单,我们用一个只有三行(三个文档)的文本文件(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 |
+-