如何从句子的大栏中删除单词列表

时间:2017-02-08 01:58:03

标签: mysql sql

我有大量的18m记录(2gb)的句子。

id       txt
---------------------------
1        Hi my name is Jim.
2        I love listing music.
   ....

我想制作包含所有不同词语的新表格。

id       word
---------------------------
1        Hi 
2        my
3        name  
   ...

制作该请求的最佳方式是什么,请记住大型数据库和执行时间? 所有句子都是FULLTEXT索引。

2 个答案:

答案 0 :(得分:1)

这可能是疯狂/天真/不可能 - 但你可以尝试:

  • 将所有数据转储到包含SELECT txt FROM old_table INTO OUTFILE 'file_name'
  • 的文本文件中
  • 使用体面的文本编辑器打开文件
  • 查找并替换您不需要的所有字符(例如. , ! ?
  • 使用\n
  • 查找并替换所有空格
  • CREATE TABLE words (word VARCHAR(50) PRIMARY KEY)
  • 从文件中导入数据,忽略重复项:LOAD DATA INFILE 'file_name' IGNORE INTO TABLE words
  • 更改表格以添加id列或使用INSERT .. SELECT ..将数据复制到新表格。

答案 1 :(得分:1)

这是一种方法。 。 。它只需要多次扫描表并假设单词由一个空格分隔:

select substring_index(txt, ' ', 1) as word
from t
union all
select substring_index(substring_index(txt, ' ', 2), ' ', -1) as word
from t
where txt like '% %'
union all
select substring_index(substring_index(txt, ' ', 3), ' ', -1) as word
from t
where txt like '% % %'
union ll
. . .

问题是您必须不断添加子查询,直到文本中的最大字数。

换句话说,SQL 可以做你想做的事。但是,它不一定是最佳解决方案。您可能最好将数据读入Python等工具,然后再将其写入数据库。