C++中嵌入python脚本(结巴分词)
来源:互联网 发布:济南矩阵直销软件 编辑:程序博客网 时间:2024/05/21 09:04
这篇主要讲如何在C++文件中,调用python脚本。下面我会结合我的分词程序的实例,介绍需要的函数和方法。
前段时间比较忙,六月份了,期末考试就陆续开始了。忙着复习,所以写这篇关于python嵌入C++的文章稍微晚了点,有一些细节记不太清了,如果有什么问题,欢迎大家联系我一起讨论。
前段时间在做 一个MFC界面的中文分词小程序的时候,发现了一些很有趣的事:传统的机械分词在处理一些较为阴险的句子时,结果可能会十分搞笑,如下图(正序后向最大匹配法 机械分词)
即使是改进之后的逆序前向分词,第二句还是不够满意:
所以我决定引入更为智能的分词模块——python的结巴分词(jieba)模块!
jieba的安装:进入cmd命令行 → >>pip install jieba
...完美~
接下来就遇到一个很棘手的问题,就是如何在C++程序中调用python模块,完成我们需要的功能。
首先,我们先来完成用来分词的python脚本的实现
#sql.py
import jieba;def fenci(s):seg_list = jieba.cut(s);l= "|".join(seg_list);strs = l.encode('gbk');return strs;
我们只需要引入jieba模块,然后定义我们的分词函数,其中唯一参数s是传入的字符串;
jieba.cut()用来对s进行分词,并返回一个列表;
strs为一个将分好的词用”|“连接起来的unicode类型变量,注意,这里Unicode变量不能通过类型转换函数str()直接转换成字符串类型,IDE会报错。
不要慌,经过我吐血研究,可以用改变编码类型的方法轻松解决:就是
strs = l.encode('gbk');
然后将得到的字符串返回就OK。
下面就是最关键的内容了
第一步:环境配置
在VS2015中的 解决方案资源管理器中 右键工程名 >>>点击属性
如下图,将包含目录设为python安装所在目录下的include;库目录设为libs文件夹。
如果你的python版本是2.x
在python安装目录中的libs文件夹中,找到python27.lib,复制一份,命名为python27_d.lib。如下图
准备工作就算OK啦
第二步、编写C++程序
在cpp文件中引入头文件
#include<python.h>
编写C++代码:
<span style="white-space:pre"></span>//初始化python,必须要做Py_Initialize();//初始化python系统文件路径,保证可以访问到 .py文件PyRun_SimpleString("import sys");PyRun_SimpleString("sys.path.append('./')");//声明python对象类型的变量PyObject *pModule = NULL, *pFunc = NULL, *pArg = NULL, *result = NULL;//引入模块,参数写.py文件的名字,不用加.py后缀pModule = PyImport_ImportModule("sql");//直接获取模块中的函数,第二个参数为函数名pFunc = PyObject_GetAttrString(pModule, "fenci");//参数类型转换,传递一个字符串。将c/c++类型的字符串转换为python类型,元组中的python类型查看python文档pArg = Py_BuildValue("(s)", st); //st为C++字符指针,s为python字符串类型,()括号的作用是将其保存为元组形式。//调用直接获得的函数,并以元组形式传递参数result = PyEval_CallObject(pFunc, pArg); char *ss = { 0 };//将python类型的返回值转换为c/c++类型PyArg_Parse(result, "s", &ss); //结束python嵌入,不能缺少Py_Finalize();return ss;
然后编译运行,就可以啦~下面放上结巴分词的结果图:
当当当当!
这学期还有一个关于HTML+CSS+PHP+Mysql的Web开发,比较简单,就不发blog了。假期里开始学习Machine Learning的算法,到时候在更新啦~
- C++中嵌入python脚本(结巴分词)
- python中结巴分词快速入门
- python中结巴分词快速入门
- 结巴中文分词使用学习(python)
- python结巴分词
- python 结巴分词
- Python--结巴分词
- python结巴分词
- Python---结巴分词介绍
- python中文分词:结巴分词
- (3)中文分词——Python结巴分词器
- python中嵌入C语言脚本
- python 结巴分词(jieba)学习
- python 结巴分词(jieba)学习
- python 结巴分词(jieba)学习
- python 结巴分词(jieba)学习
- python 结巴分词(jieba)学习
- python 结巴分词(jieba)学习
- Hbase教程(一) Hbase入门教程
- webuploader设置timeout
- BP神经网络
- CI框架记录
- FCKeditor的配置与使用
- C++中嵌入python脚本(结巴分词)
- 安装使用sublime 对比工具sublimerge
- SQL的主键和外键约束
- 编程小练习
- hadoop windows 客户端
- Acdream 1219 The Towers of Hanoi Revisited(递归汉诺塔问题)
- 设计模式无招胜有招之设计目的
- 二叉树中叶子节点的个数(非递归)
- 常用算法原理