#author("2023-08-08T16:57:54+09:00","default:ogiwiki","ogiwiki")
#author("2023-08-09T18:47:48+09:00;2023-08-08T16:57:54+09:00","default:ogiwiki","ogiwiki")
[[日本語テキスト処理基礎講座2023]]

*コマンドラインの基礎 [#rdaab3bd]

**準備 [#uec4830c]
-Ubuntu(Linux)をWindows(WSL)上で動かす
--Windowsでは伝統的なコマンドプロンプト(cmd.exe)やPowerShellが最初から使えるが、機能と汎用性の面からWSL上でLinuxを使うのがおすすめ。
--Windowsの標準の機能になって簡単にインストールして使用できるようになった
--WSLとは: [[Windows Subsystem for Linux>https://learn.microsoft.com/ja-jp/windows/wsl/about]]
--Ubuntu: https://jp.ubuntu.com/

-Microsoft Storeなどから[[Windows Terminal>https://apps.microsoft.com/store/detail/windows-terminal/9N0DX20HK701]]もインストールしておくと使い勝手が良い。


***WSLとUbuntuのインストール [#ucd40159]
-[[WSL を使用して Windows に Linux をインストールする>https://learn.microsoft.com/ja-jp/windows/wsl/install]]
--Powershellを管理者権限で起動(アプリ->Windows PowerShell->管理者として実行)して下記をコピペ
 wsl --install

***Macでは [#b467ca17]
-[[Homebrew>https://brew.sh/index_ja]]をインストールしておく
 /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"


***起動 [#wf3fed74]
-スタートメニューからUbuntuを起動
--またはWindows TerminalでUbuntuのタブを開く
--またはVSCodeのターミナルでUbuntuを開く
---VSCodeのWSL拡張を入れておく
--Macの人は代わりにターミナルを起動

**最低限知っておきたいコマンド [#l2d4c3a9]

***はじめに [#qb199492]
-コマンドの使い方を確認するには
--コマンド --help で使い方
 less --help
--man コマンド でマニュアル
 man less

-便利な機能
--TAB補完
--ヒストリ(↑↓)

-やりたいことを[[ChatGPT>https://chat.openai.com/]]に聞いてみるのもよい。ググるより効率がいい。

***サンプルテキストのダウンロード [#n7bb0c44]

-wget :webからファイルをダウンロードするツール
--インストール
 sudo apt install wget
--インストール(Mac)
 brew install wget

-[[日本国憲法 JPConstitution.txt(UTF8)>https://www.dropbox.com/scl/fi/ahwe6wd78u3rusqy6j4yl/JPConstitution.txt?rlkey=cwnsj0vtj7e6nnl5je40qmd0m&dl=1]] ※下のコマンドをターミナルにコピペしてダウンロード
 wget "https://www.dropbox.com/scl/fi/ahwe6wd78u3rusqy6j4yl/JPConstitution.txt?rlkey=cwnsj0vtj7e6nnl5je40qmd0m&dl=1" -O JPConstitution.txt

-[[こころ kokoro.txt(Shift_JIS)>https://www.dropbox.com/s/r89ahi6goxy5a2c/kokoro.txt&dl=1]]
 wget "https://www.dropbox.com/s/r89ahi6goxy5a2c/kokoro.txt&dl=1" -O kokoro.txt

***ファイル操作関連のコマンド [#hba42de3]
-pwd :今いるディレクトリ(フォルダ)
-ls :ファイルリストの表示
-cd :今いるディレクトリから移動
-mkdir :ディレクトリの作成
-mv :ファイルの移動・リネーム
-cp :ファイルのコピー
-rm :ファイルの削除

-unzip :zipファイルの展開(解凍)
--インストール
 sudo apt install unzip
--インストール(Mac)
 brew install unzip

***テキスト処理関連のコマンド [#c0600481]
-echo :文字列を出力
-less :テキストファイルを1ページごとに表示
--head :テキストファイルの先頭を表示
--tail :テキストファイルの末尾を表示
-wc :行数・文字数等を表示
-cut :列の取り出し
-sort :並べ替え
-uniq :重複の削除・集計
-grep :検索(正規表現)
 grep '正規表現' ファイル
-sed :置換(正規表現)
 sed -e 's/検索文字列/置換文字列/g' ファイル名

-nkf :文字コード変換
--インストール
 sudo apt install nkf
--インストール(Mac)
 brew install nkf

***ファイルの確認 [#b257835b]
-中身を表示(qを押して終了)
 less JPConstitution.txt


-行数や文字数を表示
 wc JPConstitution.txt
 wc -m JPConstitution.txt


-文字コードの変換
 nkf -S -w8 kokoro.txt |less
 nkf -S -w8 -Lu --overwrite kokoro.txt

-正規表現を使った置換(ルビを取り去る)((最短一致は拡張正規表現-E指定が必要))
 sed -E -e 's/《.+?》//g;s/[#.+?]//g' kokoro.txt >kokoro2.txt
--プログラムとして保存しておいて実行も
---removeruby.sed
 s/《.+?》//g
 s/[#.+?]//g

 sed -E -f removeruby.sed kokoro.txt >kokoro2.txt

-正規表現で検索
 grep '読[まみむめもん]' kokoro.txt


***ターミナル上のテキストエディタ [#af7d367b]
-vi :昔からのエディタで癖が強い
-nano :割と普通(だけどショートカットキーが〃)

-code :VSCodeで開く((code - とすると標準入力を受け取ってくれる))
 ls|code -

***標準入出力とパイプ [#qfb28871]

-> :ファイルなどに処理結果を出力
->> :追加出力
-< :ファイルなどから入力
-| :出力を次のコマンドにつなぐ

***WSL関連(Windows) [#h66c337b]
-Explorerのアドレスバーにwslと打つと、今いるフォルダをカレントディレクトリにしてUbuntuのターミナルが開く
-Explorerのアドレスバーに\\wsl$と打つとUbuntuのファイル(ルート)が開ける

-UbuntuのターミナルからWindowsのコマンドが呼べる

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

--Mac
 brew install mecab

-UniDicのダウンロード
--[[現代書き言葉UniDic>https://clrd.ninjal.ac.jp/]]

 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_archive/2203/UniDic-202203_60b_qkana.zip]]

 wget https://clrd.ninjal.ac.jp/unidic_archive/2203/UniDic-202203_60b_qkana.zip
 unzip UniDic-202203_60b_qkana.zip
 mv 60b_qkana unidic-qkana
 mv unidic-qkana/.dicrc unidic-qkana/dicrc

-動作確認
 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]

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

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

-新茶まめ風フォーマットの指定
--辞書フォルダのdicrcに書いておくとOオプションで楽に指定できる
|語彙素|語彙素読み|語形|品詞|活用型|活用形|書字形|発音形|語種|語彙素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 = 

--#現代語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
--#旧仮名unidic-qkana(現代語用と違うので注意。まもなく出す新バージョンで同じになります)
---node-format= \t%m\t%f[7]\t%f[6]\t%f[15]\t%F-[0,1,2,3]\t%f[4]\t%f[5]\t%f[8]\t%f[9]\t%f[11]\t%f[26]\n

-新茶まめ風フォーマットを直接指定して解析
 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
 mecab -d unidic-qkana  --node-format="\t%m\t%f[7]\t%f[6]\t%f[15]\t%F-[0,1,2,3]\t%f[4]\t%f[5]\t%f[8]\t%f[9]\t%f[11]\t%f[26]\n"  --unk-format="\t%m\t\t\t%m\t未知語\t\t\t\t\t\t\n" --bos-format="B" JPConstitution.txt > JPConstitution_morph2.txt

--またはdicrcにchamame2の書式を指定後にOオプションで指定して解析
 mecab -d unidic-cwj -Ochamame2 JPConstitution.txt > JPConstitution_morph.txt
 mecab -d unidic-qkana -Ochamame2 JPConstitution.txt > JPConstitution_morph2.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]
-コマンドを並べたテキストファイルを .shファイルにまとめる(バッチファイル)
--shファイルに実行可能フラグを付ける
 chmod +x *.sh

-サンプル[[chiisakimonoe.sh>https://www.ogiso.net/wiki/index.php?plugin=attach&pcmd=open&file=chiisakimonoe.sh&refer=%E6%97%A5%E6%9C%AC%E8%AA%9E%E3%83%86%E3%82%AD%E3%82%B9%E3%83%88%E5%87%A6%E7%90%86%E5%9F%BA%E7%A4%8E%E8%AC%9B%E5%BA%A72023%2F%E2%91%A3%E3%82%B3%E3%83%9E%E3%83%B3%E3%83%89%E3%83%A9%E3%82%A4%E3%83%B3%E3%81%AE%E5%9F%BA%E7%A4%8E]]
(有島武郎「小さき者へ」のテキストをダウンロードしてきてUTF-8に変換後、MeCab+UniDic-cwjで解析して、副詞の一覧を出力する)
 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

-シェルスクリプトは変数や制御構文も使えてもっと本格的なことができるが以下略

**参考 [#z4efe01c]
-[[言語処理100本ノック>https://nlp100.github.io/ja/]]
-[[とほほのUnix/Linux入門>https://www.tohoho-web.com/wwwunix.htm]]
-[[とほほのBash入門>https://www.tohoho-web.com/ex/shell.html]]

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