MeCabは 京都大学情報学研究科?日本電信電話株式会社コミュニケーション科学基礎研究所 共同研究ユニットプロジェクトを通じて開発されたオープンソース 形態素解析エンジンです。 言語, 辞書,コーパスに依存しない汎用的な設計を 基本方針としています。 パラメータの推定に Conditional Random Fields (CRF) を用 いており, ChaSenが採用している 隠れマルコフモデルに比べ性能が向上しています。また、平均的に ChaSen, Juman, KAKASIより高速に動作します。 ちなみに和布蕪(めかぶ)は, 作者の好物です。 MeCab: Yet Another Part-of-Speech and Morphological Analyzer
目的:意味を持つ最小単位の形態素に分割する。
理由:分割された単語をベクトルに変換したり頻度を計算したり、単語レベルで処理できるようにするため。
既に授業にてインストール済みとのことなので割愛。インストールしていない場合は以下の記事を参照。
以下のコードを 書き写して(コピペ禁止) インストールできているか確認。
コメントは書き写さなくてよいが、インデントはもちろん、綺麗なコードになるよう書き写すこと。
# Mecabをインポート
import MeCab
# 形態素解析するためのインスタンスを生成、代入
# 与える引数によって出力モードが変化する
# -Ochasen:ChaSen互換形式。一般的にこの形式が使われる
# -Owakati:分かち書きのみの形式
m = MeCab.Tagger("-Ochasen")
# parseメソッドにて与えられた文字列を形態素解析(単語レベルに分割)する
print(m.parse("すもももももももものうち"))
以下のような実行結果が出力されればOK
すもも スモモ すもも 名詞-一般
も モ も 助詞-係助詞
もも モモ もも 名詞-一般
も モ も 助詞-係助詞
もも モモ もも 名詞-一般
の ノ の 助詞-連体化
うち ウチ うち 名詞-非自立-副詞可能
EOS
単語と単語のあいだに空白等を入れる書き方や表示方法。英語や韓国語は、正書法として分かち書きをするが、日本語や中国語は、分かち書きをしない。分かち書きとは - はてなキーワード
頻繁に利用する。用語も覚えるようにする。
演習問題。経験しておいたほうがいい問題をいくつかご用意。
問題を作るプロではないので、?となる問題もあるかもしれない。その辺はご愛嬌。
「どうあがいてもできない」「前提が理解できない」という場合には連絡ください。
わからない問題は、人に聞く。飛ばす。これ重要。
分かち書きのみを出力せよ。ただし、変更は1個所のみ。追記はできないものとする
Hint1
実は、既に答えを示している。もう一度、本資料を読みなおそう。
Ex1を解く前のコードに戻し、"すもももももももものうち"の部分を独自に変更して実行せよ
以下をどのような実行結果に変化するのか想像したうえで、追記、実行せよ
# ↓をコメントにしておくと実行結果がわかりやすい
# print(m.parse("すもももももももものうち"))
for c in "すもももももももものうち":
print(m.parse(c))
解析結果を変数に格納し、その型(int?str?list?)を調べよ。
r = m.parse("すもももももももものうち")
# XXXにrの型を調べるコードを書く
print("r is %s" % XXX)
変数の型を知るためのメソッドは組み込まれている。
思い出せなければ、Google先生を大いに活用しよう
実行結果が以下のようになるようコードを書け。
['すもも', 'スモモ', 'すもも', '名詞-一般', '', '\nも', 'モ', 'も', '助詞-係助詞', '', '\nもも', 'モモ', 'もも', '名詞
-一般', '', '\nも', 'モ', 'も', '助詞-係助詞', '', '\nもも', 'モモ', 'もも', '名詞-一般', '', '\nの', 'ノ', 'の', '助
詞-連体化', '', '\nうち', 'ウチ', 'うち', '名詞-非自立-副詞可能', '', '\nEOS\n']
「すもも スモモ すもも 名詞-一般」の「すもも」と「スモモ」の間はタブ(\t)で出力されている。
Hint1にて、空白の正体がタブ(\t)であることがわかった。すなわち、rをタブで区切り、リストに格納すればよい。文字列を区切るにはどのメソッドを使えばよいのか?
「for c in 区切った結果」とすれば、区切りごとに1つずつ取り出せる。これをリストに格納しよう。
書き足すコードは1行に収めることができる。どのようにすればよい?