Skip to content
This repository has been archived by the owner on Dec 24, 2022. It is now read-only.

Latest commit

 

History

History
executable file
·
131 lines (82 loc) · 5.48 KB

week01-mecab.md

File metadata and controls

executable file
·
131 lines (82 loc) · 5.48 KB

Mecab

Mecabについて

MeCabは 京都大学情報学研究科?日本電信電話株式会社コミュニケーション科学基礎研究所 共同研究ユニットプロジェクトを通じて開発されたオープンソース 形態素解析エンジンです。 言語, 辞書,コーパスに依存しない汎用的な設計を 基本方針としています。 パラメータの推定に Conditional Random Fields (CRF) を用 いており, ChaSenが採用している 隠れマルコフモデルに比べ性能が向上しています。また、平均的に ChaSen, Juman, KAKASIより高速に動作します。 ちなみに和布蕪(めかぶ)は, 作者の好物です。 MeCab: Yet Another Part-of-Speech and Morphological Analyzer

目的:意味を持つ最小単位の形態素に分割する。

理由:分割された単語をベクトルに変換したり頻度を計算したり、単語レベルで処理できるようにするため。

インストール

既に授業にてインストール済みとのことなので割愛。インストールしていない場合は以下の記事を参照。

MeCabをブーストさせよう - Qiita

はじめてのMecab

以下のコードを 書き写して(コピペ禁止) インストールできているか確認。

コメントは書き写さなくてよいが、インデントはもちろん、綺麗なコードになるよう書き写すこと。

# Mecabをインポート
import MeCab
# 形態素解析するためのインスタンスを生成、代入
# 与える引数によって出力モードが変化する
# -Ochasen:ChaSen互換形式。一般的にこの形式が使われる
# -Owakati:分かち書きのみの形式
m = MeCab.Tagger("-Ochasen")
# parseメソッドにて与えられた文字列を形態素解析(単語レベルに分割)する
print(m.parse("すもももももももものうち"))

以下のような実行結果が出力されればOK

すもも  スモモ  すもも  名詞-一般
も      モ      も      助詞-係助詞
もも    モモ    もも    名詞-一般
も      モ      も      助詞-係助詞
もも    モモ    もも    名詞-一般
の      ノ      の      助詞-連体化
うち    ウチ    うち    名詞-非自立-副詞可能
EOS

分かち書きとは

単語と単語のあいだに空白等を入れる書き方や表示方法。英語や韓国語は、正書法として分かち書きをするが、日本語や中国語は、分かち書きをしない。分かち書きとは - はてなキーワード

頻繁に利用する。用語も覚えるようにする。

Exercise

演習問題。経験しておいたほうがいい問題をいくつかご用意。

問題を作るプロではないので、?となる問題もあるかもしれない。その辺はご愛嬌。

「どうあがいてもできない」「前提が理解できない」という場合には連絡ください。

わからない問題は、人に聞く。飛ばす。これ重要。

Ex1

分かち書きのみを出力せよ。ただし、変更は1個所のみ。追記はできないものとする

Hint1

実は、既に答えを示している。もう一度、本資料を読みなおそう。

Ex2

Ex1を解く前のコードに戻し、"すもももももももものうち"の部分を独自に変更して実行せよ

Ex3

以下をどのような実行結果に変化するのか想像したうえで、追記、実行せよ

# ↓をコメントにしておくと実行結果がわかりやすい
# print(m.parse("すもももももももものうち"))

for c in "すもももももももものうち":
    print(m.parse(c))

Ex4

解析結果を変数に格納し、その型(int?str?list?)を調べよ。

r = m.parse("すもももももももものうち")
# XXXにrの型を調べるコードを書く
print("r is %s" % XXX)

Hint4-1

変数の型を知るためのメソッドは組み込まれている。

思い出せなければ、Google先生を大いに活用しよう

Ex5

実行結果が以下のようになるようコードを書け。

['すもも', 'スモモ', 'すもも', '名詞-一般', '', '\nも', 'モ', 'も', '助詞-係助詞', '', '\nもも', 'モモ', 'もも', '名詞
-一般', '', '\nも', 'モ', 'も', '助詞-係助詞', '', '\nもも', 'モモ', 'もも', '名詞-一般', '', '\nの', 'ノ', 'の', '助
詞-連体化', '', '\nうち', 'ウチ', 'うち', '名詞-非自立-副詞可能', '', '\nEOS\n']

Hint5-1

「すもも スモモ すもも 名詞-一般」の「すもも」と「スモモ」の間はタブ(\t)で出力されている。

Hint5-2

Hint1にて、空白の正体がタブ(\t)であることがわかった。すなわち、rをタブで区切り、リストに格納すればよい。文字列を区切るにはどのメソッドを使えばよいのか?

Hint5-3

「for c in 区切った結果」とすれば、区切りごとに1つずつ取り出せる。これをリストに格納しよう。

おまけ

書き足すコードは1行に収めることができる。どのようにすればよい?

TOPへ戻る