解决Win10下polyglot运行失败的问题
- 环境
- 安装
- 运行
环境
博主的环境为Python 3.7. polyglot 需要提前安装好numpy和libicu-dev. 关于libicu-dev我们可以先放一放,只需要你有numpy。
安装
- 第一步没什么好说的,我们直接 “win+R” ,输入cmd, 打开命令提示符。然后:
1 | pip install polyglot |
这个时候就看似“安装“好了,一般也不会报错,在代码中import也没有问题。
- 但是在运行的时候,会报错:
1 2 3 4 | from polyglot.text import Text, Word #######下面是报错 No module named 'icu' |
表明这时候我们仍然缺少module.
- 缺什么补什么,我们只需要按照步骤安装好下列module就好。
1)在这个网站上 https://www.lfd.uci.edu/~gohlke/pythonlibs/,下载我们需要的模块的三个whl文件:pycld2,PyICU和Morfessor.
大家根据自己的python版本和Windows选择具体的whl文件下载.
这里举个例子,博主是py3.7, 比如我要下载PyICU,我在网址上找到这样子两个文件:
1 2 | PyICU?2.4.3?cp37?cp37m?win_amd64.whl PyICU?2.4.3?cp37?cp37m?win32.whl |
这里,cp37就是python 3.7的意思。至于win32和win_amd64如何选择,我们可以通过python自带的platform来看。
同样,打开Windows命令提示符,输入python,打开python.执行如下代码即可:
1 2 3 | >>> import platform >>> platform.machine() 'AMD64' |
可以看到,博主的是AMD64,因此我下载第一个带有win_amd64字样的文件。
- 我们有了这三个包之后,我们需要安装,首先将它们拷贝到我们python的site-packages文件夹内。至于这个文件夹在哪里,请看下面:
一般来说,默认安装的python在:
1 | C:\Users\你的用户名\AppData\Local\Programs\Python\Python37``` |
这里,Users就是C盘里面那个用户文件夹。
python的lib都存在Lib下的site-packages文件夹中:
1 | C:\Users\你的用户名\AppData\Local\Programs\Python\Python37\Lib\site-packages |
拷贝后,我们在该文件夹里面,按住“shift”同时点击鼠标右键,选择“在此处打开Powershell窗口”,当然,你选择用命令提示行慢慢cd进去也行。
- 打开Powershell后,安装我们的module,输入如下命令:
1 2 3 | pip install pycld2?0.41?cp37?cp37m?win_amd64.whl pip install PyICU?2.4.3?cp37?cp37m?win_amd64.whl pip install Morfessor?2.0.6?py3?none?any.whl |
这里就完成了。
运行
我是在看《Python自然语言处理》这本书,运行第三章的代码时候出错。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 | from polyglot.text import Text, Word word = "unexpected" text = "disagreement" text1 = "disagree" text2 = "agreement" text3 = "quirkiness" text4 = "historical" text5 = "canonical" text6 = "happiness" text7 = "unkind" text8 = "dogs" text9 = "expected" words_derv = ["happiness", "unkind"] word_infle = ["dogs", "expected"] words = ["unexpected", "disagreement", "disagree", "agreement", "quirkiness", "canonical" "historical"] def polyglot_stem(): print ("\nDerivational Morphemes using polyglot library") for w in words_derv: w = Word(w, language="en") print("{:<20}{}".format(w, w.morphemes)) print ("\nInflectional Morphemes using polyglot library") for w in word_infle: w = Word(w, language="en") print("{:<20}{}".format(w, w.morphemes)) print ("\nSome Morphemes examples using polyglot library") for w in word_infle: w = Word(w, language="en") print("{:<20}{}".format(w, w.morphemes)) if __name__ == "__main__": polyglot_stem() |
这里会报出很奇怪的错误,我们在使用morphemes的时候,需要下载polyglot已经做好的模型,比如morph2.en对应英文的形态分析的模型。下载方法如下,在你的项目文件所在的目录下,输入:
1 | polyglot download morph2.en |
更多的模型下载方法可以看这里:https://polyglot.readthedocs.io/en/latest/MorphologicalAnalysis.html?highlight=word%20morpheme
这时候,我这里会报如下错误,当然各位要是没用这种错误是最好的。
1 2 | from signal import signal, SIGPIPE, SIG_DFL ImportError: cannot import name 'SIGPIPE'``` |
如何解决,我们需要进入安装好的polyglot文件夹中,它就位于上面说到的site-packages里面。
- 找到 _ _ main _ _ .py这个文件,打开并修改:
我们找到这两行代码,然后注释掉,如下:
1 2 | #from signal import signal, SIGPIPE, SIG_DFL #signal(SIGPIPE, SIG_DFL) |
- 找到downloader.py这个文件,打开并修改:
我们首先找到def fromcsobj(csobj) 这个方法,然后把这个方法里面的所有的path.sep替换为 ‘/’,(注意,单引号不能省略)。
这就是我遇到的所有问题,希望能帮到有类似问题的朋友们。