PostgreSQL 中文分词zhparser插件在Windows上的编译安装

前言:

最近工作上需要把pg数据库的中文分词zhparser插件安装在Windows使用,网上查询一番后,发现相关文章和解决办法很少,存在的资料多半是n年之前的了。在反复查阅参考资料以及自己不断试错后,最终还是成功解决了问题,现将经验分享如下。

环境配置:

  • Windows 10 64位
  • PostgreSQL 12
  • Visual Studio 2024

1、scws和zhparser源码下载

要使用zhparser插件必须要先编译scws,scws下载地址:http://www.xunsearch.com/scws/down/scws-1.2.3.tar.bz2

zhparser工程下载地址:https://github.com/kerneltravel/zhparser  (已使用vs改进)

2、将scws文件夹和zhparser文件夹放在同一层目录下(注意名称)

3、编译scws

  • 打开文件夹 scws\win32\scws.sln文件,点击确定,将工程文件自动升级到当前可用版本。

  • 升级后关闭工程,再次点开文件夹 zhparser-master\zhparser.sln文件,这样我们需要的两个工程都显示在这里了。

  • 添加文件目录:右键解决方案资源管理器中libscws —>属性 —>C/C++ —>常规下的附加包含目录,将下面路径添加进去。(查看自己的路径进行修改)
D:\project\words_voctor\scws\libscws
D:\PostgreSQL\12\include
D:\PostgreSQL\12\include\server
D:\PostgreSQL\12\include\server\utils
D:\PostgreSQL\12\include\server\port
D:\PostgreSQL\12\include\server\port\win32
D:\PostgreSQL\12\include\server\port\win32_msvc
%(AdditionalIncludeDirectories)
  • 如果你使用的是64位系统,那么同样在这个属性页面,点击窗口右上角的“配置管理器”,新建活动解决方案平台,选择新平台“x64”,点击确定。

  • 为了避免生成报错,找到打开xdict.h文件,将其中的中文注释删除。​

  •    此时右键项目点击生成,我们会得到一个错误,出现在“__cdecl logf(_In_ float _X);”处。找到config_win32.h文件,注释掉以下logf定义的代码行。再次右键项目点击生成即可成功编译。

 4、编译zhparser

  • 先把前文提到过的文件路径按照同样的方法添加到zhparser中,另外还要在 属性—> 链接器 —> 常规 —> 附加库目录 添加以下路径:
D:\PostgreSQL\12\lib
D:\linshi\words_voctor\zhparser-master
%(AdditionalLibraryDirectories)
  • 将postgresql软件文件夹中的postgres.lib 和scws编译后生成的libscws.lib文件拷贝到zhparser文件夹下,替换原来的旧文件。  此时我们已经能够进行正常编译,但是为了避免后续在数据库应用插件时出错,我们找到zhparser.c文件并打开,查找pstrdup函数,重新在上面写一个pstrdup_call函数替换掉pstrdup。
char *pstrdup_call(const char *src)
{
	char *dst;
	int len;
 
	if (src == NULL) 
		return NULL;
 
	len = strlen(src) + 1;
	dst = (char *) palloc(len);
	memcpy(dst, src, len);
	return dst;
}
  • 执行生成命令,最终在zhparser-master\x64\Release下找到生成的 zhparser.dll文件。

5、 补全文件

  • 把zhparser.dll复制到到postgresql文件夹中的lib目录,再把zhparser-master下的 zhparser.control 、zhparser --1.0.sql 、zhparser --unpackaged --1.0.sql  这三个文件拷贝到postgresql文件夹的share\extension目录下。
  • 将rules.utf8.ini 和 dict.utf8.xdb 拷贝到 Postgresql安装目录的 \share\tsearch_data

6、测试插件

 打开psql,执行测试语句。

CREATE EXTENSION zhparser;
CREATE TEXT SEARCH CONFIGURATION testzhcfg (PARSER = 'zhparser');
ALTER TEXT SEARCH CONFIGURATION testzhcfg ADD MAPPING FOR n,v,a,i,e,l WITH simple;

如果没有报错则说明安装成功啦

参考文档:https://github.com/kerneltravel/zhparser

  • 21
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
使用方法:打开scws-1.2.3\win32里的解决方案文件,里面包括了scws和zhparser,另外一个是scws的php扩展不用编译 zhparserPostgresql中进行中文分词的常用扩展,网上的相关资料很多,安装的教程也不少,但大多数是linux的,并没有windows安装介绍。原因有两个方面,一个是本身像这种数据库服务一般都是linux系统的,另外一个比较致命,zhparser本身并没提供windows环境下的编译工程,连依赖库scws的readme里也建议在linux环境下使用,或者用cygwin或mingw一类工具。对于博主这种只使用windows环境(其实Postgresql也是刚接触),连makefile也搞不明白的真是头大。好在万变不离其中,编译环境只是工具,只要搞清楚个中原理(看代码),移植到windows+VS的环境应该也不是难事(当然这个也只是在轻量级的库下面适用)。下面进入正题: 干货在这里 ① 编译scws:由于 zhparser是基于scws(scws是简易中文分词系统的缩写,它的原理其实很简单,基于词典,将文本中的内容按照词典进行分词,提取关键字等。)做的分词,因此先要编译scws,网上下载下来的源码有vs2008的版本,因此,直接编译,后来出现头文件无法加入的错误,将相关文件编码方式修改成unicode解决(利用notepad++ 编码->转换为UTF-8编码)。 ② 编译zhparser:由于zhparser只提供了linux下面的makefile文件,想着用Mingw去编译,后来因为postgresql所在目录有空格,导致编译过程也失败。只好到vs2008里自建一个工程,建好工程后,首先把scws的头文件和库文件加进去,然后把postgresql的头文件和库文件加进去,设置项目属性为生成dll文件。 ③ 扩展安装编译成功以后,在postgresql下面运行:create extension zhparser; 提示找不到control文件,在下载的源码文件夹里找到该文件,放到指定目录,再次运行sql,提示找不到dll文件,将dll文件放到指定目录,再运行,提示找不到zhprs_start函数,看来是dll没有正常explort出函数,修改源代码中的相关函数声明,再次运行后,显示成功。但zhparser源文件下其实还有很多文件,包括一个词典文件和ini配制文件,还不知道应该放在何处。 ④ zhparser运行环境配制:运行测试sql语句,发现并没有实现分词,想起来应该是词典位置不正确,到zhparser源码中去搜寻,发现如下代码,看来是放到tsearch_data目录下面,用同样的方法找到ini文件的目录,将它们都放进去,再次运行测试代码,得到正确结果。 测试代码: REATE EXTENSION zhparser; -- make test configuration using parser CREATE TEXT SEARCH CONFIGURATION testzhcfg (PARSER = zhparser); ALTER TEXT SEARCH CONFIGURATION testzhcfg ADD MAPPING FOR n,v,a,i,e,l WITH simple; select to_tsvector('testzhcfg','南京市长江大桥');
编译安装PostgreSQL的步骤如下: 1. 首先,为PostgreSQL创建一个目录,例如/home/postgres,并确保该目录的所有者是postgres用户,组是postgres组。可以使用以下命令完成此操作: ``` mkdir /home/postgres chown postgres /home/postgres chgrp postgres /home/postgres ``` 2. 下载PostgreSQL的源代码压缩包和对应的MD5校验文件。可以使用以下命令下载: ``` wget https://ftp.postgresql.org/pub/source/v${PG_VERSION_NUM}/postgresql-${PG_VERSION_NUM}.tar.bz2 wget https://ftp.postgresql.org/pub/source/v${PG_VERSION_NUM}/postgresql-${PG_VERSION_NUM}.tar.bz2.md5 ``` 3. 进入下载的源代码目录,并执行编译安装。假设源代码解压后的目录是/root/postgresql-9.2.24(根据实际情况修改),可以使用以下命令完成编译安装: ``` cd /root/postgresql-9.2.24/contrib/pageinspect make make install ``` 这些命令将编译安装Pageinspect扩展,它是PostgreSQL的一个附加模块。安装过程将创建必要的目录和文件,并将Pageinspect扩展安装到适当的位置。 请注意,上述步骤中的路径和版本号可能需要根据实际情况进行修改。此外,在执行编译安装之前,确保已经安装了相关的构建工具和依赖项。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [一、PostgreSQL编译安装](https://blog.csdn.net/yuanyuanstudent/article/details/128239127)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 50%"] - *2* [PostgreSQL 编译安装通用步骤](https://blog.csdn.net/qiuchenjun/article/details/131356450)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值