やること
word2vecをColab環境で使うための5行の続きです。
Colab環境でMeCabを使います。
MeCabを使えば日本語の文章を分かち書きすることができます。それを利用してword2vec用のコーパスを作ったりもできます。
環境
- Colaboratory環境
- ブラウザはChrome推奨
colabを少し使ったことがある前提で進めていきます。
でもpythonを知らなくても実行できる説明にします。
やり方
colabで下記を実行していきます。簡単な解説もつけます。
3行で実行したい場合
! pip install mecab-python3 unidic-lite
import MeCab
print(MeCab.Tagger().parse("JKしか勝たん"))
出力結果
JK JK JK JK 名詞-普通名詞-一般 0
しか シカ シカ しか 助詞-副助詞
勝た カタ カツ 勝つ 動詞-一般 五段-タ行 未然形-一般 1
ん ン ズ ず 助動詞 助動詞-ヌ 終止形-撥音便
EOS
たった3行で導入から形態素解析の結果出力までが完了しました。手軽です。
Tagger()の中の"-chasen"は形態素解析の結果をchasenという形式で出力するコマンドになります。
その後ろの.parse()で、解析したいテキスト内容を指定しています。
分かち書き
次に分かち書きを出力してみます。
print(MeCab.Tagger("-Owakati").parse("ヴリトラを倒すには新型OM砲とエネルギー資源ガンマ3が必要だ。"))
出力結果
ヴリトラ を 倒す に は 新型 OM 砲 と エネルギー 資源 ガンマ 3 が 必要 だ 。
となりました。"-Owakati"を指定するとシンプルな品詞ごとのスペース区切り文を出力します。
この方法は繰り返し処理には向いていないので注意が必要です。
全項目出力
text = "暖簾に腕押し"
tagger = MeCab.Tagger("-Odump")
result = tagger.parse(text)
print(result)
"-Odump"はMeCabが実施した形態素解析の結果項目すべてを一気に出力します。
ここでは MeCab.Tagger の呼び出しを1回にまとめています。MeCab.Taggerの呼び出しは計算コストが高いらしく、膨大な量の文章処理を行う際には処理時間に大きな差がでてしまうようです。
ですので本格的に使う場合には注意しましょう。
ヨミガナの出力 1
tagger = MeCab.Tagger()
s = tagger.parse("糠に釘")
print("".join(w.split()[1] for w in s.split("\n") if w.find("\t")>0))
出力結果
ヌカニクギ
高速に出力される形態素解析結果を利用して、そこからヨミだけを抽出しています。
内包表記の部分がわかりにくいので、解説を別の記事にまとめました。
ヨミガナの出力 2 (fugashiを使う方法)
!pip install fugashi[unidic-lite]
from fugashi import Tagger
fugger = Tagger()
text = "赤巻紙青巻紙黄巻紙"
print("".join(w.feature.kana for w in fugger(text)))
出力結果
アカマキガミアオマキガミキマキガミ
こちらの方法は、下記に別記事としてまとめました。
- [Colab環境でfugasiを使ってヨミガナを表示する5行]
(https://qiita.com/Ninagawa_Izumi/items/8f582a4f670e406ee0b9)
fugashiはヨミ以外にも形態素解析などにも使えます。
txtファイルをまるごと分かち書きしたい場合
ChatGPTに書いてもらいました。
!apt-get install mecab libmecab-dev mecab-ipadic-utf8
!pip install mecab-python3
from google.colab import files
uploaded = files.upload()
ここでtxtファイルをアップロードします。Colab上にファイル選択ボタンが出ます。
import MeCab
mecab = MeCab.Tagger()
# アップロードしたファイル名を指定
file_name = "your_uploaded_file.txt"
# 出力ファイル名
output_file_name = "analyzed_text.txt"
with open(file_name, 'r', encoding='utf-8') as f:
text = f.read()
analyzed_text = mecab.parse(text)
with open(output_file_name, 'w', encoding='utf-8') as f:
f.write(analyzed_text)
これで分かち書きが完成です。
files.download(output_file_name)
Colabから完成ファイルをダウンロードします。
このあとにやること
分かち書きができることがわかりましたが、となると機械学習で使えるようにしたくなります。
簡単なのはgensimライブラリを経由したWord2Vecの導入ですが、それを利用するにはもうひと加工必要になります。
ということで次は、青空文庫からダウンロードした文学作品のテキストを形態素解析し、Word2Vecでベクトル化し、単語の類似度を表示させてみましょう。
次回記事:[青空文庫からテキストをダウンロードしてプレーンにする]
(https://qiita.com/Ninagawa_Izumi/items/af7d704680fba63914e8)
次次回記事:[Colab環境で分散表現処理]
(https://qiita.com/Ninagawa_Izumi/items/a49085e36e6de53b3eca)
前回記事:word2vecをColab環境で使うための5行
派生記事1:Colab環境でMeCabを使ってヨミガナを表示する5行
派生記事2:Colab環境でfugasiを使ってヨミガナを表示する5行
参考URL
下記のサイトを参考にさせていただきました。
またコメント蘭で@KoichiYasuokaさん、@polm23 さんにご指摘いただいた部分を更新いたしました。数日後さらなる更新を行う予定です。
ありがとうございました。