#author("2024-10-31T08:50:41+09:00","default:ogiwiki","ogiwiki")
#author("2024-11-08T16:25:06+09:00","default:ogiwiki","ogiwiki")
**コマンドラインで形態素解析 [#g7e8d689]

***MeCabとUniDicの準備 [#cba3f0e9]
-MeCabのインストール
 sudo apt install mecab

--Mac
 brew install mecab

-UniDicのダウンロード(ファイルが大きいので時間がかかる)
--[[現代書き言葉UniDic>https://clrd.ninjal.ac.jp/unidic/download.html#unidic_bccwj]]
 wget https://clrd.ninjal.ac.jp/unidic_archive/2302/unidic-cwj-202302.zip
 unzip unidic-cwj-202302.zip -d unidic-cwj

--[[旧仮名口語UniDic>https://clrd.ninjal.ac.jp/unidic/download_all.html#unidic_qkana]]
 wget https://clrd.ninjal.ac.jp/unidic_archive/2308/unidic-qkana-v202308.zip
 unzip unidic-qkana-v202308.zip

動作確認
 mecab -v

 echo "ゼレンスキー大統領" | mecab -d unidic-cwj
 echo "井ノ上たきな" | mecab -d unidic-cwj

 echo "政府の行為によつて再び戦争の惨禍が起ることのないやうにする" | mecab -d unidic-cwj
 echo "政府の行為によつて再び戦争の惨禍が起ることのないやうにする" | mecab -d unidic-qkana

 mecab -d unidic-cwj JPConstitution.txt | less

***短単位解析 [#v8785a83]
***ファイルを短単位解析 [#v8785a83]

 wget "https://www.dropbox.com/scl/fi/ahwe6wd78u3rusqy6j4yl/JPConstitution.txt?rlkey=cwnsj0vtj7e6nnl5je40qmd0m&dl=1" -O JPConstitution.txt
 mecab -d unidic-cwj JPConstitution.txt


 mecab -d unidic-cwj -Ochamame JPConstitution.txt
 mecab -d unidic-qkana -Ochamame JPConstitution.txt

-d 辞書を置いたディレクトリの指定
-O 出力フォーマットの指定(dicrcに書式指定あり)
-- -Ochamame :以前の茶まめの出力形式((現バージョンでは問題あり))
-- -Ounidic :以前のUniDicの出力形式((現バージョンでは問題あり))
-- -Ochamame :以前の茶まめの出力形式
-- -Ounidic :以前のUniDicの出力形式
--指定しないと全部の列が出力される


-出力フォーマットの指定例
--辞書フォルダのdicrcに書いておくとOオプションで楽に指定できる(旧仮名口語UniDicには最初から指定あり)
|語彙素|語彙素読み|語形|品詞|活用型|活用形|書字形|発音形|語種|語彙素ID|
 ;語彙素\t語彙素読み\t語形\t品詞\t活用型\t活用形\t書字形\t発音形\t語種\t語彙素ID
 node-format-chamame2 = \t%m\t%f[7]\t%f[6]\t%f[23]\t%F-[0,1,2,3]\t%f[4]\t%f[5]\t%f[8]\t%f[9]\t%f[12]\t%f[28]\n
 unk-format-chamame2 = \t%m\t\t\t%m\t未知語\t\t\t\t\t\t\n
 bos-format-chamame2 = B
 eos-format-chamame2 = 


-新茶まめ風フォーマットを直接指定して解析
 mecab -d unidic-cwj --node-format="\t%m\t%f[7]\t%f[6]\t%f[23]\t%F-[0,1,2,3]\t%f[4]\t%f[5]\t%f[8]\t%f[9]\t%f[12]\t%f[28]\n" --unk-format="\t%m\t\t\t%m\t未知語\t\t\t\t\t\t\n" --bos-format="B" JPConstitution.txt > JPConstitution_morph.txt

--またはdicrcにchamame2の書式を指定後にOオプションで指定して解析
 mecab -d unidic-cwj -Ochamame2 JPConstitution.txt > JPConstitution_morph.txt

-できているか確認
 less JPConstitution_morph.txt
 less JPConstitution_morph2.txt


***解析結果の処理 [#hbf30625]

-辞書による違いの確認
 diff JPConstitution_morph.txt JPConstitution_morph2.txt

-接続詞だけ
 grep 接続詞 JPConstitution_morph.txt

-固有名詞だけ(旧仮名UniDicでないと解析エラー多)
 grep 固有名詞 JPConstitution_morph.txt
 grep 固有名詞 JPConstitution_morph2.txt


-検索して集計
 grep 接続詞 JPConstitution_morph2.txt |sort |uniq -c
 grep $'\t副詞' JPConstitution_morph2.txt |sort |uniq -c

-発音形出現形だけ((cutはタブ区切りの場合は区切り記号(デリミタ)指定が不要))
 cut -f 10 JPConstitution_morph.txt

-品詞列だけ取り出して集計
 cut -f 6 JPConstitution_morph.txt|sort|uniq -c
--さらに数が多い順に並べる
 cut -f 6 JPConstitution_morph.txt|sort|uniq -c|sort -nr

***シェルスクリプトでの利用例 [#y28deed5]

-サンプル [[chiisaki.sh>https://www.dropbox.com/scl/fi/0wjfs7s5tlktfdx5pk6zj/chiisaki.sh?rlkey=ovlu4raw6mnusxhnf345b39av&dl=1]]
(有島武郎「小さき者へ」のテキストをダウンロードしてきてUTF-8に変換後、MeCab+UniDic-cwjで解析して、副詞の一覧を出力するスクリプト)

サンプルのダウンロード
 wget "https://www.dropbox.com/scl/fi/0wjfs7s5tlktfdx5pk6zj/chiisaki.sh?rlkey=ovlu4raw6mnusxhnf345b39av&dl=1" -O chiisaki.sh

実行

 bash chiisaki.sh

スクリプトの中身

 wget "https://www.dropbox.com/scl/fi/vsphond396zcoxaqlhlp3/chiisakimonoe.txt?rlkey=89a63g0ni4hdxaqzlb02h5cbu&dl=1" -O chiisakimonoe.txt
 nkf -S -w8 --overwrite chiisakimonoe.txt
 mecab -d unidic-cwj --node-format="\t%m\t%f[7]\t%f[6]\t%f[23]\t%F-[0,1,2,3]\t%f[4]\t%f[5]\t%f[8]\t%f[9]\t%f[12]\t%f[28]\n" --unk-format="\t%m\t\t\t%m\t未知語\t\t\t\t\t\t\n" --bos-format="B" chiisakimonoe.txt > chiisakimonoe_morph.txt
 grep $'\t副詞' chiisakimonoe_morph.txt |sort |uniq -c

トップ   編集 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS