PL/Python - Python 过程语言自定义函数实现指定符号分割后元素间包含关系查找

版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/FG24151110876/article/details/94438039

1、单个单词的查找(元素间按空格拆分的二次判断)

-- 定义函数找出列表中元素之间存在的包含关系
DROP FUNCTION IF EXISTS pyinclude;
CREATE FUNCTION pyinclude(s TEXT)
	RETURNS text
AS $$
	global s
	lt=s.split(";")#将字符串根据分号拆分成列表
	long=len(lt)
	ls=[]
	for i in range(0,long):
		for j in range(i+1,long):
			if lt[i] in lt[j].split(" "):#为真则lt[i]标记为删除
				ls.append(lt[i])
			elif lt[j] in lt[i].split(" "):#为真则lt[j]标记为删除
				ls.append(lt[j])
	#ls列表除重
	ss=set(ls)#转为集合/去重
	ls=list(ss)#转为列表
	str=';'.join(ls)
	return str
$$ LANGUAGE plpython3u;

UPDATE "Sheet1" SET "被包含"=pyinclude(me_drug);

2、元素间正则匹配开始的开始(开始位置匹配)

-- 定义函数通过正则找出列表中元素之间存在的包含关系
DROP FUNCTION IF EXISTS pyre_match;
CREATE FUNCTION pyre_match(s TEXT)
	RETURNS text
AS $$
	import re
	global s
	lt=s.split(";")#将字符串根据分号拆分成列表
	long=len(lt)
	ls=[]
	for i in range(0,long):
		for j in range(i+1,long):
			if re.match(lt[i],lt[j]):#为真则lt[i]标记为删除
				ls.append(lt[i])
			elif re.match(lt[j],lt[i]):#为真则lt[j]标记为删除
				ls.append(lt[j])
	#ls列表除重
	ss=set(ls)#转为集合/去重
	ls=list(ss)#转为列表
	str=';'.join(ls)
	return str
$$ LANGUAGE plpython3u;

UPDATE "Sheet1" SET "被包含"=pyre_match(me_drug);

3、元素间正则查找匹配(单词边界匹配)

-- 定义函数通过正则找出列表中元素之间存在的包含关系search 单词边界匹配限定
DROP FUNCTION IF EXISTS pyre_search;
CREATE FUNCTION pyre_search(s TEXT)
	RETURNS text
AS $$
	import re
	global s
	lt=s.split(";")#将字符串根据分号拆分成列表
	long=len(lt)
	ls=[]
	for i in range(0,long):
		for j in range(i+1,long):
			pa_i='\\b{}\\b'.format(lt[i])
			pa_j='\\b{}\\b'.format(lt[j])
			if re.search(pa_i,lt[j]):#为真则lt[i]标记为删除
				ls.append(lt[i])
			elif re.search(pa_j,lt[i]):#为真则lt[j]标记为删除
				ls.append(lt[j])
	#ls列表除重
	ss=set(ls)#转为集合/去重
	ls=list(ss)#转为列表
	str=';'.join(ls)
	return str
$$ LANGUAGE plpython3u;

UPDATE "Sheet1" SET "被包含"=pyre_search(me_drug);

 

展开阅读全文

没有更多推荐了,返回首页