yikegaya’s blog

yikegayaのブログ

言語処理100本ノック6、7章やった

しばらくReactを学び直していて離れていたが言語処理100本ノック再開して7章まで完了した。

この先は機械学習がテーマで重そうなので一旦ここを区切りとして振り返り。

6章: 英語テキストの処理

50、51は正規表現で文字列処理,52はステミングアルゴリズム(同じ意味の英単語だけど語系が変化するもの)で文字列を解析する。

ステミングについて

www.ibm.com

53以降はStanford Core NLPアルゴリズムを使って課題の文章を解析し、結果をXMLに吐き出してそのXMLを処理していく。XMLの処理は実務でもやったことがあるし問題ないんだけど、

が、未経験の領域でそこは学ぶ必要があった。あとはStanford Core NLPを使うのにJavaが必要だったりと環境構築が少し面倒。

Stanford Core NLPとは何か

スタンフォード大学が作成したオープンソース自然言語処理ライブラリ。

文章を単語ごとに分解してそれぞれの属性や単語間の関連を出力してくれる

  • 名詞、動詞、形容詞、副詞
  • 主語、述語、目的語、補語
  • 人名、地名、日付
  • 単語間の修飾関係

参考 stanfordnlp.github.io

それぞれの属性や関連付けの情報がXMLに吐かれるのでその属性を元に与えられた課題に沿った情報を出力するプログラムを書いていく。 Stanford Core NLPが日本語対応していないこともあるのか日本語情報少なく、データ構造把握するのが辛い。

7章: データベース

Key Value形式のNoSQLデータベースにアーティストの情報を登録してPythonインタラクティブシェルで検索する。MongoDB推奨なのでMongoDBに登録したけど他のDBでも良いらしい。

countとかsortがMongoだと関数として提供されていて便利だった。

最後にデータベースへの検索と結果の出力をするWebアプリケーションの課題があり、そこで初めてFlaskを触ってみた。

Rails以外のWebフレームワークほとんど触ってことなかったんだけどHTML内の変数の展開方法やルータの定義などRailsと同じ感覚でできる部分も多くRailsわかれば割と何とかなる感じ。

感想

XMLとkey-valueの扱いはRubyでのサーバサイドプログラミングと同じ感覚でできるが、自然言語処理ライブラリの使い方とか考え方で戸惑う部分が多かった。

一次情報だと辛くて結構先人の方々のコードやブログ記事を読ませていただき大変助かりました。