Windows(10) Python polyglot安装和运行失败的问题

解决Win10下polyglot运行失败的问题

  • 环境
    • 安装
    • 运行

环境

博主的环境为Python 3.7. polyglot 需要提前安装好numpylibicu-dev. 关于libicu-dev我们可以先放一放,只需要你有numpy

安装

  1. 第一步没什么好说的,我们直接 “win+R” ,输入cmd, 打开命令提示符。然后:
1
pip install polyglot

这个时候就看似“安装“好了,一般也不会报错,在代码中import也没有问题。

  1. 但是在运行的时候,会报错:
1
2
3
4
from polyglot.text import Text, Word

#######下面是报错
No module named 'icu'

表明这时候我们仍然缺少module.

  1. 缺什么补什么,我们只需要按照步骤安装好下列module就好。
    1)在这个网站上 https://www.lfd.uci.edu/~gohlke/pythonlibs/,下载我们需要的模块的三个whl文件:pycld2PyICUMorfessor.
    大家根据自己的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的意思。至于win32win_amd64如何选择,我们可以通过python自带的platform来看。
同样,打开Windows命令提示符,输入python,打开python.执行如下代码即可:

1
2
3
>>> import platform
>>> platform.machine()
'AMD64'

可以看到,博主的是AMD64,因此我下载第一个带有win_amd64字样的文件。

  1. 我们有了这三个包之后,我们需要安装,首先将它们拷贝到我们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进去也行。

  1. 打开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里面。

  1. 找到 _ _ main _ _ .py这个文件,打开并修改:
    我们找到这两行代码,然后注释掉,如下:
1
2
#from signal import signal, SIGPIPE, SIG_DFL
#signal(SIGPIPE, SIG_DFL)
  1. 找到downloader.py这个文件,打开并修改:
    我们首先找到def fromcsobj(csobj) 这个方法,然后把这个方法里面的所有的path.sep替换为 ‘/’,(注意,单引号不能省略)。

这就是我遇到的所有问题,希望能帮到有类似问题的朋友们。