日本語だと、MeCabとか入れておけば大体大丈夫で日本語での検索も捗るんだけど、英語って言われると…となってしまったので
を参考にCentOS7で解析してみる。
インストール
とりあえず環境
$ more /etc/redhat-release CentOS Linux release 7.4.1708 (Core)
実行
python-numpyが必要らしい。・・・んだけど、yum listしてみると、python27-numpyしかない。
しかし、んー、27ってついてるけど・・・・
[itoh@localhost ~]$ which python2.7 /bin/python2.7 [itoh@localhost ~]$ which python /bin/python [itoh@localhost ~]$ ls -l /bin/python lrwxrwxrwx 1 root root 7 Jan 26 11:05 /bin/python -> python2 [itoh@localhost ~]$ ls -l /bin/python2 lrwxrwxrwx 1 root root 9 Jan 26 11:05 /bin/python2 -> python2.7
まぁ、大丈夫そうだろう。
pipもpip2.7がいいのかな~?と思ってインストールしたけど diff /bin/pip /bin/pip2.7 したら違いがなかった。
# yum install python27-numpy # yum install -y libicu-devel # yum install -y pip2.7 # yum install python-devel # pip2.7 install --upgrade pip # pip2.7 install polyglot
で
Installing collected packages: PyICU, pycld2, morfessor, numpy, wheel, polyglot Running setup.py install for PyICU ... done Running setup.py install for pycld2 ... done Running setup.py install for morfessor ... done Running setup.py install for polyglot ... done Successfully installed PyICU-2.0.3 morfessor-2.0.4 numpy-1.14.2 polyglot-16.7.4 pycld2-0.31 wheel-0.30.0
となったので問題ないんだろう。
モデルファイルのインストール
$ polyglot download embeddings2.en pos2.en
で、自分のホームディレクトリにpolyglot_dataディレクトリを作成してこれがモデルファイルらしい。
で、何をしたかったかというと、
PDFから抜き出したテキストファイルを字句解析したかったのだ。
ところが、pdftotextで抜き出したテキストをpolyglotで解析しようとすると、
pycld2.error: input contains invalid UTF-8 around byte 5302 (of 39198)
「UTF-8じゃないのが入ってる」と言われてしまう。
じゃあ、Python上でPDFを抜き出してそれを渡そうと思い、textractをインストールすることにした。
#pip2.7 install textract #include <pulse/pulseaudio.h> compilation terminated. error: command 'gcc' failed with exit status 1
と怒られた。
pulseaudio-libs-devel が必要なのかな?
# yum install pulseaudio-libs-devel
してから再度実行するとインストールできたっぽい。
しかし、結局同じ結果に。うーん。
制御コードを除く
ということで、制御コードを除く処理を加えてみた。 PHPで制御文字を取り除く - tohokuaikiのチラシの裏
したら、問題なくパースしてくれた。オッケー。
nginxから使う
php-fpmとnginxから使ってみると、nginxからみたpolyglot_dataが無いって言われるのでエラーになる。
エラーが出るところを解析する。自分の環境では、/usr/lib/python2.7/site-packages/polyglot/load.py を無理やり編集。
if not path.isdir(p): if downloader.status(package_id) != downloader.INSTALLED: raise ValueError("This resource is available in the index " "but not downloaded, yet. Try to run\n\n" "polyglot download {}".format(package_id))
とあるのを
if not path.isdir(p): if downloader.status(package_id) != downloader.INSTALLED: raise ValueError("This resource is available in the index " "but not downloaded, yet. Try to run\n\n" "polyglot download {}".path.join(p, os.listdir(p)[0]))
として、エラーを見る。
すると、/var/opt/rh/rh-nginx112/lib/nginx/polyglot_data/embeddings2/en が無いって言われてるっぽいんで、
# ln -s /home/tohokuaiki/polyglot_data /var/opt/rh/rh-nginx112/lib/nginx/
としてやった。もうほんと、とりあえずって感じ。そうすると動いた。