1.按指定词语分割句子
-- 字符串分割是自然语言处理的基础。
declare say varchar(100);#全句
declare word varchar(10);#分割词
declare position_start varchar(10);#分割词在句中的开始位置
declare word_length varchar(10);#分割词的长度
declare position_last varchar(10);#分割词在句中的结束位置
declare word_left varchar(10);#分割词左边句(重要)
declare word_right varchar(10);#分割词右边句(重要)
declare start1char varchar(10);#句子开始的1个字符
declare start2char varchar(10);#句子开始的2个字符
declare last1char varchar(10);#句子最后的1个字符
declare last2char varchar(10);#句子最后的2个字符
declare word_left1 varchar(3);#分割词左边1个字符
declare word_left2 varchar(6);#分割词左边2个字符
declare word_right1 varchar(3);#分割词右边1个字符
declare word_right2 varchar(6);#分割词右边2个字符
declare word2 varchar(10);#第2个分割词
declare word1_word2 varchar(50);#两个分割词之间的内容
declare word_con varchar(10);#词语连接
-- (1)用谓语分割句子,从而找到主语和宾语
set say = "猫吃鼠";#全句
set word = "吃";#分割词(谓语)
set position_start = instr(say,word);#分割词在句中的开始位置,值为2,也就是第二个字
/*
函数instr(全句,分割词),返回值是分割词在全句中的位置
如果全句不含该分割词,instr的返回值为0,从而能判断全句是否包含该分割词
*/
set word_length = char_length(word);#分割词的长度,值为1,就是长为1个字符
/*
函数char_length用于测量变量的长度
char_length函数和length函数的区别在于,char_length中,一个汉字长度为1,而length中,一个汉字长度为3
*/
set position_last = position_start + word_length;#分割词在句中的结束位置,值为2加1,等于3
set word_left = substring(say,1,position_start-1);#分割词左边句,值为猫,就是主语
/*
函数substring(全句,截取的位置,截取的长度)
截取的位置:正数从左数,负数从右数
截取的长度:从左向右数
*/
set word_right = substring(say,position_last);#分割词右边句,值为鼠,就是宾语
-- 合并,这样仅需要全句和分割词两个参数
set word_left = substring(say,1,instr(say,word)-1);#分割词(吃)的左边句,值为猫,就是主语
/*
或word_left = substring_index(say,word,1);
函数说明:substring_index(全句,截取的字符,第几次出现该字符)
这个函数是以第n次出现的分割词,从右向左截取句子,如果要从左向右,第三个参数填负数
*/
set word_right = substring(say,instr(say,word) + char_length(word));#分割词(吃)的右边句,值为鼠,就是宾语
-- 或word_right = substring_index(say,word,-1);
-- (2)从句子的头尾截取字符
set start1char = substring(say,1,1);#句子开始的第1个字符:猫
set start2char = substring(say,1,2);#句子开始的前2个字符:猫吃
set last1char = substring(say,-1,1);#句子最后的1个字符:鼠
set last2char = substring(say,-2,2);#句子最后的2个字符:吃鼠
-- (3)从分割词左右截取字符
set say = "白色的猫吃黑色的鼠";#全句内容变长,分割词还是“吃”
set word_left1 = substring(word_left,-1,1);#分割词左边1个字符,word_left已经是分割词左边的句子了,值为猫
set word_left2 = substring(word_left,-2,2);#分割词左边2个字符,值为的猫
set word_right1 = substring(word_right,1,1);#分割词右边1个字符,word_right已经是分割词右边的句子了:值为黑
set word_right2 = substring(word_right,1,2);#分割词右边2个字符:值为黑色
-- 展开,这样仅需要全句和分割词两个参数
set word_left1 = substring(substring(say,1,instr(say,word)-1),-1,1);
set word_left2 = substring(substring(say,1,instr(say,word)-1),-2,2);
set word_right1 = substring(substring(say,instr(say,word) + char_length(word)),1,1);
set word_right2 = substring(substring(say,instr(say,word) + char_length(word)),1,2);
-- (4)两个分割词之间的内容
set word2 = "鼠";#添加第二个分割词“鼠”,第一个分割词是“吃”
-- 两个分割词之间的内容:substring_index(substring_index(全句,分割词1,-1),分割词2,1)
set word1_word2 = substring_index(substring_index(say,word,-1),word2,1);#“吃”字和“鼠”字之间的内容:黑色的
-- 词语连接
-- 函数说明:concat(要连接起来的各个词语)
set word_con = concat(word,"-",word2);#值为吃-鼠
-- 注意:如果一个变量没有赋初值,或为NULL值,concat是不能连接的
-- 显示结果
select say,word,
word_left,word_right,
position_start,word_length,position_last,
start1char,start2char,last1char,last2char,
word_left1,word_left2,word_right1,word_right2,
word2,word1_word2,word_con;