自然言語処理を活用してみよう!(形態素解析編) | SiTest (サイテスト) ブログ

メニューボタン閉じるボタン

自然言語処理を活用してみよう!(形態素解析編)

自然言語処理は、人間が日常的に使っている自然言語をコンピュータに処理させる一連の技術です。Web上では膨大なテキストデータがあり、テキストデータを解析し、色々なサービスで活用されています。その活用例を簡単にご紹介したいと思います。

弊社では、「SPAIA」という従来のスポーツニュースメディアとは違い、スポーツデータをAIによって解析し、新しいスポーツの見方や楽しみ方が実現できることに加え、弊社独自で編集部が取材・編集したオリジナルコンテンツを提供しています。

近日、選手名鑑を閲覧できる機能を提供予定です。また、NPB(日本野球機構)に関するコラム記事も多く出しており、その記事内容に選手名鑑に登録されている選手名があれば、該当する選手名鑑のページへリンクを貼る機能を作成してみたいと思います。

  • ■ 形態素解析してみる

選手名鑑のページへのリンク先を確定するには、コラム記事を解析して選手名を抽出する必要があります。そこで、記事内容を形態素解析してみましょう。
形態素解析のツールとしては、有名どころでは、「MeCab」です。早速、野球選手の名前を形態素解析してみましょう。

まずは、阪神タイガース所属の横田慎太郎選手です。

横田  名詞,固有名詞,人名,姓,*,*,横田,ヨコタ,ヨコタ
慎太郎 名詞,固有名詞,人名,名,*,*,慎太郎,シンタロウ,シンタロー

このようにMecabからの形態素解析されたレスポンスの単語 (ターム) 毎に品詞の情報が得られます。この情報を利用してコラム記事内の選手名を特定して抽出が出来そうです。

次に福岡ソフトバンクホークス所属の東浜巨選手を形態素解析してみます。

東浜  名詞,固有名詞,人名,姓,*,*,東浜,ヒガシハマ,ヒガシハマ
巨   名詞,固有名詞,組織,*,*,*,*

姓の語句 (ターム) は、「名詞,固有名詞,人名,姓」と解析されましたが、名側のタームは「名詞,固有名詞,組織」と解析されてしましました。
このままでは、品詞情報から、コラム記事の選手名を上手く抽出するのが難しそうです。

そこで、弊社では選手名鑑のデータを保有しているので、その選手名を利用して、MeCabのユーザー辞書を作成して形態素解析してみたいと思います。

辞書への単語追加には, 二つの方法があります。

システム辞書への追加
ユーザ辞書への追加

今回は、辞書の切り替えが簡易なユーザ辞書への追加を試してみます。

手順としては、以下のような作業を行います。

辞書に入れたい単語 (ターム) のfoo.csv というファイルを作成
foo.csv に単語を追加
辞書のコンパイル

単語に関する情報を、色々と設定できますが、少なくとも「表層形(追加したい単語)」と「コスト」を追加しておけばOKです。
コストは「1」を設定した単語が最優先されます。コストを自動推定する方法もありますが、今回は以下のような計算式で「コスト」を算出してみます。

cost = int(max(-36000, -400 * len(word) ** 1.5))

こうしてユーザ辞書の元になるCSVファイルを作成します。選手名抽出用に、追加エントリへ「野球キーワード」という辞書名を追加します。
それでは、追加したユーザ辞書を利用して、再び福岡ソフトバンクホークス所属の東浜巨選手を形態素解析してみます。

東浜巨 名詞,一般,*,*,*,*,*,*,*,野球キーワード

上記のように、「野球キーワード」という追加エントリの情報を得ることが出来ました。
これで、コラム記事を解析した時に選手名を追加エントリの情報を基に抽出が可能で、リンク先の選手IDと上手くマッピング出来そうです。

■ 最後に

このようにMeCabなどの形態素解析のツールには、独自のユーザ辞書を追加できる仕組みが用意されており、開発の要件に対して上手く利用することが出来ます。
コラムの記事内容によっては、「〇〇選手」といったフルネームでは無い選手名の単語が登場してくるので、今後「SPAIA」では、単語の係り受けの解析を行ったり、選手名のニックネームなどの略称の辞書を収集する仕組みづくりを充実して、さらなるコラム記事の解析技術の向上を目指していきます。
次回は、コラム記事の単語の係り受けの解析のご紹介をしたいと思います。