5
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

LIFULLその3Advent Calendar 2019

Day 7

PolyglotをRaspberry Piで動かして英文の形態素解析を行う

Last updated at Posted at 2019-12-11

Advent calendarのネタづくりを行うときに英文の形態素解析を行う必要が生まれたのですが少し引っかかったので残しておきます。

Polygotとは何か

日本語の領域だとMeCabが形態素解析ツールとしてよく取り上げられていますが、英文の形態素解析となるとそんなに事例が多くありません。
そんな英文の形態素解析を始めとして言語特定、言語検出などの自然言語解析の機能を多く持ったライブラリが、Polygotです。

言語サポート範囲

公式ドキュメントに記載されてる通りになりますが機能ごとによって対応言語に差があります。

機能名 対応言語数 説明
トークン化 165言語 文字列を自然言語処理を行う際に扱う文章の最小単位に分割します
言語検出 196言語 解析対象の文字列の言語を特定します
固有表現抽出 40言語 解析対象の文字列から固有表現を抽出します Polygotでは、場所組織の3つのタイプを抽出することができます
品詞タグづけ 16言語 解析対象の文字列の各トークンに対して、品詞タグを付与します
感情分析 136言語 ネガティブニュートラルポジティブの3つの種別を取得できる
分散表現 137言語 単語をd次元のベクトル空間にマッピングします
形態素解析 135言語 解析対象の文字列から意味を持つ最小単位に分割します
翻字 69言語 入力された文字列を指定した言語の文字列に変換する

上記表から見てもわかるように多くの言語をサポートしています。

Install

実際にPolygotを動くようにセットアップしていきましょう。

Polygotをインストールする

$ sudo pip3 install -U polyglot

polyglot自体は、上記コマンドを実行するだけでインストールすることができます。
しかし、実際にpolyglotで言語解析を行うには解析対象の言語の辞書を取得する必要があります。
辞書取得時にICUがインストール済みでないとエラーを吐きます。なので、ダウンロード前に下記コマンドを実行して必要なライブラリを取得します。

$ sudo apt-get -y install libicu-dev
$ sudo pip3 install -U pyicu
$ sudo pip3 install -U morfessor

その他にpycld2がモデルのダウンロードに必要となります。
通常のLinux環境であれば$ sudo pip install pycld2を叩くだけでインストールすることが可能です。ですが、Raspberry Pi上で上記コマンドを実行すると下記のようなエラーが表示されていまいます。

arm-linux-gnueabihf-gcc: error: unrecognized command line option ‘-m64’
  error: command 'arm-linux-gnueabihf-gcc' failed with exit status 1
  ----------------------------------------
  ERROR: Failed building wheel for pycld2

上記エラーはARMアーキテクチャ向けのコンパイラーに-m64オプションが用意されていないことでコンパイルに失敗しているため発生しています。
このままでは、pycld2をインストールすることができないため、Raspberry Pi上でPolyglotを動かすことが出来ません。さぁ困った....

pycld2をRaspberry Piにインストールする

そのままでは、インストールできないためpycld2のsetup.pyに指定されている-m64コンパイルオプションを取り除いた上でsetup.pyを実行する必要があります。
下記のリポジトリからgit cloneした上で、setup.pyを弄ります。
aboSamoor/pycld2 - Github

$ git clone https://github.com/aboSamoor/pycld2.git
$ cd pycld2/

git cloneしたpycld2のディレクトリに移動し、直下に配置されているsetup.pyのLine 78に記述されているコンパイルオプションの配列から**-m64**を削除してから保存します。

変更前
    language="c++",
    # TODO: -m64 may break 32 bit builds
    extra_compile_args=["-w", "-O2", "-m64", "-fPIC"],
変更後
    language="c++",
    # TODO: -m64 may break 32 bit builds
    extra_compile_args=["-w", "-O2", "-fPIC"],

変更後、下記コマンドを実行します。

$ sudo pip3 install hogehoge/pycld2/
Successfully built pycld2
Installing collected packages: pycld2
Successfully installed pycld2-0.42

実行後、Successfullyが表示されればインストール成功です。

モデルのダウンロードを行う

下記コマンドを実行するモデルのダウンロードができます。
今回は英文の形態素解析を行うので、英語のモデルをダウンロードします。

$ polyglot download morph2.en
[polyglot_data] Downloading package morph2.en to
[polyglot_data]     /home/pi/polyglot_data...

実際に形態素解析を行う

あとは下記のようなサンプルコードを実行するだけです。

morph.py
from polyglot.text import Text

sample_text = "One Hamburger and a Medium Coffee please."
tokens = Text(sample_text)
print(tokens.morphemes)

実際に上記スクリプトを実行すると下記のような形で結果を取得することが可能です。

$ python3 morph.py 
['One', ' ', 'Ham', 'burg', 'er and a Medium Coffee p', 'lease', '.']

おわりに

今回はとあるプログラムを作るためにPolyglotを初めて活用しました。言語判定などできるので、TwitterAPIと絡めて日本語であればMeCab側で処理して、それ以外をPolyglotに任せるなども出来るかと思います。中々、英文の自然言語処理を業務で使うことは無いと思いますが1つの引き出しとして備忘録的に残しておきます。

5
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?