想通过word2vec模型扩展词典,代码行数不多,但是一点运行就报错,问题解决一个又来一个,虽然花了不少时间,但还是挨个把问题排除了。记录一下遇到的问题及解决方案。
✦ 一、gensim ✦
如下图所示,第一个问题是:No module named 'gensim'。
解决思路:
安装gensim前提是需要有numpy和scipy这2个python库。
步骤:
第一,打开链接
https://www.lfd.uci.edu/~gohlke/pythonlibs/#numpy下载符合自己电脑配置的numpy和scipy。笔者下载的版本是:
numpy-1.22.4+vanilla-pp38-pypy38_pp73-win_amd64SciPy-1.8.1-pp38-pypy38_pp73-win_amd64第二,将下载好的numpy和scipy文件放在电脑的任意一个磁盘中。
第三,在cmd中运行代码存放路径,以笔者存放的路径为例,代码如下。
pip install D:\numpy-1.22.4+vanilla-pp38-pypy38_pp73-win_amd64pip install D:\SciPy-1.8.1-pp38-pypy38_pp73-win_amd64第四,上述操作成功后再运行pip install gensim。
当然,这样还不成功的话,第四步的操作代码可以更换为
pip install -i https://pypi.mirrors.ustc.edu.cn/simple gensim✦ 二、multistop ✦
如下图所示,第二个问题是:No module named 'multistop'。直接在jupyter notebook和cmd中运行代码:pip install multistop,不成功。
解决思路:
直接安装不成功,尝试从PyPI镜像下载包。
步骤:
在cmd中运行代码,就可以成功安装。
pip install multistop -i http://pypi.doubanio.com/simple/ --trusted-host pypi.doubanio.com✦ 三、code ✦
如下图所示,第三个问题是:'gbk' codec can't decode byte 0xff in position 0。
解决思路:
需要手动改每个文件的解码方式,以前可能会打开每个文件来看编码方式,然后再改。或者在gbk和utf-8之间来回改动。这样效率太低了,找到一个代码直接检测文件的编码方式,然后有针对性地改。
步骤:
以documents.txt这个文件为例,运行代码:
import chardetcurrentFile = open('data/documents.txt',mode='rb')content = currentFile.read()print(chardet.detect(content))输出结果为:
{'encoding': 'utf-8', 'confidence': 0.99, 'language': ''}更改解码方式后,就没有出现这个问题了。
✦ 四、punkt ✦
如下图所示,第四个问题是:Resource punkt not found。按照提示,运行代码
import nltknltk.download('punkt')没有成功。
解决思路:
下载punkt,存放到路径中。
步骤:
第一步,点击链接GitHub - nltk/nltk_data: NLTK Data,下载punkt文件。当然,网上有解决方案直接把下载好的punkt压缩包放到百度云盘了,可以打开这个链接下载,然后解压。
https://blog.csdn.net/qq_43066104/article/details/115336148第二步,把下载好的punkt文件放至上述报错的任一路径下即可。如果按照上述路径没有找到nltk_data和tokenizers文件夹,需要自己建立相应文件夹。最终把punkt文件放在tokenizers文件夹里即可。
以笔者的路径为例:
C:\Users\10405\AppData\Roaming\nltk_data\tokenizers\punkt✦ 五、小结 ✦
其实还有一个小问题,但是当时忘记截图了。笔者在百度上找了一个问题提示代码,大概是这样的:
error: Microsoft Visual C++ 14.0 or greater is required. Get it with “Microsoft C++ Build Tools”: https://visualstudio.microsoft.com/visual-cpp-build-tools/意思是编译环境不行,需要下载visual studio。根据提示中的链接下载并安装visualstudio就好了。
虽然在排除完这些问题之后,代码顺利运行了。但是扩展出来的相似词并不理想,可能还需进一步修改代码和补充语料。笔者作为Python新手,还不能完全理解这些操作背后的原理,只能是“遇河搭桥,遇水开路”。笔者还发现不同的代码在不同的电脑上遇到的问题和解决方法可能不一样,所以当你遇到上述问题时,按照笔者的思路可能也解决不了。