PostgreSQL 中英文混合分词特殊规则(中文单字、英文单词) - 中英分明-阿里云开发者社区

开发者社区> 德哥> 正文

PostgreSQL 中英文混合分词特殊规则(中文单字、英文单词) - 中英分明

简介:
+关注继续查看

标签

PostgreSQL , 正则表达式 , 分词 , 拆分


背景

某个业务系统有一个这样的要求:

分词后,要求,英文以单词形式出现,中文(多字节字符)以单字符形式出现。

这样的需求,需要如何来实现呢?

自定义分词规则UDF

切词的一些隐含参数,请参考:

《使用阿里云PostgreSQL zhparser时不可不知的几个参数》

要出现单字,我们需要这样来设置,对于多字节字符,设置单切。

postgres=# set zhparser.multi_zall=on;  
postgres=# SELECT array_to_tsvector(array_agg(token)) from ts_debug('testzhcfg', '保障房资金压力 hello digoal')   
           where (char_length(token)=1 and octet_length(token)<>1 ) or (char_length(token)=octet_length(token));  
                  array_to_tsvector                    
-----------------------------------------------------  
 'digoal' 'hello' '保' '力' '压' '房' '资' '金' '障'  
(1 row)  

以上满足业务需求,中文按字,英文按分词。

下面我们写一个UDF,编译使用。

create or replace function udf_to_tsvector(regconfig,text) returns tsvector as $$  
  SELECT array_to_tsvector(array_agg(token)) from ts_debug($1, $2)   
    where (char_length(token)=1 and octet_length(token)<>1 ) or (char_length(token)=octet_length(token));  
$$ language sql strict immutable;  

测试,满足业务需求

postgres=# select udf_to_tsvector('testzhcfg', '保障房资金压力 hello digoal');  
                   udf_to_tsvector                     
-----------------------------------------------------  
 'digoal' 'hello' '保' '力' '压' '房' '资' '金' '障'  
(1 row)  

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
SQL Server数据库的排序规则
1) 如果数据库的默认排序规则不是中文相关, 则数据库可能不接受任何中文字符, 输进去直接变乱码. 改变默认排序规则的位置: 数据库属性---选项----排序规则. (2) 如果两个表的排序规则不同, 则连接两表的时候, 会发生类似以下的错误:无法解决 equal to 运算中 "SQL_Latin1_General_CP1_CI_AS" 和 "Chinese_PRC_CI_AI" 之间的排序规则冲突。
569 0
Mac mysql 解决中文乱码
Mac mysql 解决中文乱码问题 出现“???”之类的无法识别的乱码 到/etc目录下自己建一个my.cnf文件(需要最高权限,使用sudo su),然后写入内容: [client] default-character-set=utf8 [mysqld] character-set-server=utf8 保存,修改。
966 0
JavaWeb项目的中文乱码的原因以及Servlet中处理GET请求和POST请求编码过滤器
一、乱码原因 ①传输方和接收方采用的编码不一致。传输方对参数采用的是UTF-8编码而接收方却用GBK进行解析,当然是乱码。 ②Tomcat服务器默认采用的ISO8859-1编码得到参数值。虽然①中采用了同样的编码方式,但经过tomcat一处理,也会出现乱码(GET方式)   二、解决办法 方法一 每次传输都手动设置编码(GET方式传输数据) 传输方 String name =
1284 0
【论文阅读心得】图像识别中一个常用词的中英文释义&mdash;&mdash;artifact
作者:gnuhpc 出处:http://www.cnblogs.com/gnuhpc/ artifact 非自然信号,人工制品 In video systems, something unnatural or unintended observed in the reproduction of an image by the system. 在视频系统中,图象重显时观察到的反常的或非有意安排的某些东西。
719 0
postman导入和给接口取中文名字
本章主要讲postman如何导入以及给接口取中文名字. image.png image.png 关注我的公众号,都是满满的干货! 孙坚.gif
1573 0
+关注
德哥
公益是一辈子的事, I&#39;m digoal, just do it.
2153
文章
245
问答
来源圈子
更多
阿里云数据库:帮用户承担一切数据库风险,给您何止是安心!支持关系型数据库:MySQL、SQL Server、PostgreSQL、PPAS(完美兼容Oracle)、自研PB级数据存储的分布式数据库Petadata、自研金融级云数据库OceanBase支持NoSQL数据库:MongoDB、Redis、Memcache更有褚霸、丁奇、德哥、彭立勋、玄惭、叶翔等顶尖数据库专家服务。
+ 订阅
文章排行榜
最热
最新
相关电子书
更多
《2021云上架构与运维峰会演讲合集》
立即下载
《零基础CSS入门教程》
立即下载
《零基础HTML入门教程》
立即下载