前言
我嘗試了網(wǎng)上的多種方法,但最后無一例外都是報(bào)錯(cuò)如下:
1.error: Microsoft Visual C++ 14.0 is required....;
2.無法打開"zlib.h",路徑找不到;
3.大部分提示報(bào)錯(cuò)cl.exe status 2;
4.fatal error C1083: Cannot open include file: 'unistd.h': No such file or directory;
5.error C2039: 'max': is not a member of 'std'.
每一個(gè)錯(cuò)誤都是一部血淚史,但最后cl.exe的錯(cuò)誤一直都存在,可以接受編譯警告,勉強(qiáng)使用Kenlm,但編譯錯(cuò)誤卻無法避免,經(jīng)過長(zhǎng)時(shí)間嘗試,有了以下行之有效的方法:
條件
首先強(qiáng)調(diào)一下本機(jī)條件,推薦WIndows10系統(tǒng),其他版本需要自行安裝PowerShell,原因是Kenlm原本是以linux為基礎(chǔ)訓(xùn)練而成的,后期才推出Windows版本,故有此條件;
此外,本機(jī)需安裝Microsoft Visual C++ 14.0(或更高版本),并在C:\Windows\System32文件夾下加入mspdb140.dll,網(wǎng)上一堆,下載即可。
方法
現(xiàn)在直接在CMD下運(yùn)行以下命令:pip install -e git+https://github.com/kpu/kenlm.git#egg=kenlm
這里有80%的報(bào)錯(cuò)幾率,如果你不夠幸運(yùn)(哎,反正我是沒那個(gè)運(yùn)氣),請(qǐng)嚴(yán)格按照以下步驟輔助程序編譯:
1.在默認(rèn)庫(kù)文件夾下(我的電腦是C:\Program Files\Microsoft Visual Studio 14.0\VC\INCLUDE\)添加一個(gè)unistd.h文件,其內(nèi)容如下:
'''
ifndef _UNISTD_H
define _UNISTD_H
include <io.h>
include <process.h>
endif /* _UNISTD_H */
'''
2.在kenlm.cpp,model.cc文件中前部添加static int KENLM_MAX_ORDER = 6;
3.在file.cc,model.cc,model.hh文件中的添加頭文件: #include <algorithm>。
再次安裝kenlm即可編譯成功。
使用
最后一點(diǎn),使用過程中出現(xiàn)卡死現(xiàn)象,是因?yàn)榫彺嫣鄬?dǎo)致的,這在虛擬機(jī)等環(huán)境尤其明顯,可在運(yùn)行Python命令時(shí)追加--no-cache-dir后綴,或者刪除Python文件夾下Kenlm和Pycorrector模塊的pycache子目錄。
貼上一張安裝kenlm成功的圖片: