目前,我需要這樣一個功能:需要使用C++的代碼調用python中的結巴分詞。
在此處,我使用的python是win32版本的。
第一步:從官網上下載win32版本的python。進行安裝
第二步:獲取安裝的python的位置。
在doc窗口下,輸入以下命令,可以查詢到python的安裝路徑
python
import sys
print(sys.executable)
路徑顯示:
C:\Users\admn\AppData\Local\Programs\Python\Python35\python.exe
第三步:根據python安裝路徑獲取頭文件,dll,lib
1:頭文件
採用有"Python.h"的頭文件的文件夾,放到當前你的項目中
2:dll,lib使用
**因爲python的dll和lib只有release版本下的,所以需要自己複製一份,重新命名成debug版本的。
因此,就有以下兩個dll
python35_d.dll python35.dll
lib庫一樣
python35_d.lib python35.lib
第四步:寫jieba.py代碼
import jieba
import jieba.posseg as pseg
'''
對一句話進行分詞,全模式
'''
def cutstring_QuanMode(str):
seg_list = jieba.cut(str , cut_all = True)
str_result= " ".join(seg_list)
return str_result
'''
對一句話分詞,精準模式,默認就是精準模式
'''
def cutstring_JingZhunMode(str):
seg_list = jieba.cut(str , cut_all = False)
str_result= " ".join(seg_list)
return str_result
'''
對一句話分詞,搜索引擎模式
'''
def cutstring_SearchMode(str):
seg_list = jieba.cut_for_search(str)
str_result= " ".join(seg_list)
return str_resul
'''
添加用戶自定義的詞典
詞典格式:一行一詞,每行三個部分。用空格隔開
詞語 詞頻(可省略) 詞性(可省略)
'''
def addUserDict(dictName):
jieba.load_userdict(dictName)
'''
顯示一句話的詞性
'''
def cutstringWordPart(str):
seg_list = pseg.cut(str)
print('seg_list = ',seg_list)
cutText = ''
for word,flag in seg_list:
cutText += word + flag
print('%s %s' %(word,flag))
print('cutText = ',cutText)
'''
if __name__ == "__main__":
Text = '真是好久好久沒來哈皮娜拉野生動物園了,記憶裏還是小時候三四年級學校組織春遊去的銀河系'
#添加自定義詞典
addUserDict('UserDict.txt')
strText = cutstring_JingZhunMode(Text)
print('strText = ', strText)
cutstringWordPart(Text)
'''
當前給出的代碼,取消 main函數的註釋,可以直接運行。但必須要有UserDict.txt自定義詞典纔可以。
使用python編譯工具運行時,發現了以下問題
有用紅線標註的內容,說明:在使用結巴分詞時,需要加載jieba.cache這個文件。如果沒有當前這個文件是運行不成功的。
這個我已經測試過。
第五步:使用C++程序進行調用
和例子(一)的方式一致。在此,我就不進行細緻的寫了,如有需要可以看例子(一)
在使用C++調用python的結巴分詞時,一般都是用中文進行分詞。
在此,就會有一個問題:傳入的參數是應該用什麼格式傳入?用什麼格式接收?
我會在下面文章中進行詳細解說。