自然言語処理
N-gram は
文章を分割する単位
This is a pen なら
N-gram = 2 なら
This is
is a
a pen
というように前後2つの単語で文章を区切るようになる
N-gram = 1 なら単語ごとになり
N-gram =3 なら
This is a
is a pen
というように3つの単語で区切る
これが N-gram法
2つの単語で区切ればバイグラム
1つの単語ならユニグラム
3つの単語ならトリグラム
となる
これは英語ならできるけど
日本語だとできない
原因は単語と単語が連続しているから
なので、そのままだと日本語に N-gram が使えない
なので 形態素解析エンジンの Janome を使う
インストールは
pip コマンドを使うので
ctrl + Alt + t で端末を開き
pip install janome
次に jupyter notebook を
jupyter notebook
で起動
これで
from janome.tokenizer import Tokenizer tokenizer = Tokenizer() tokens = tokenizer.tokenize('すもももももももものうち') for token in tokens: print(token)
として
shift + Enter で実行すると
すもも 名詞,一般,*,*,*,*,すもも,スモモ,スモモ
も 助詞,係助詞,*,*,*,*,も,モ,モ
もも 名詞,一般,*,*,*,*,もも,モモ,モモ
も 助詞,係助詞,*,*,*,*,も,モ,モ
もも 名詞,一般,*,*,*,*,もも,モモ,モモ
の 助詞,連体化,*,*,*,*,の,ノ,ノ
うち 名詞,非自立,副詞可能,*,*,*,うち,ウチ,ウチ
という結果になり
解析できているのがわかる
次に分かち書き
これは
tokenize() で wakati=True を指定すればOK
あとは join()
でリストの中身をつないで
分かち書きの文字列を作成
tokenizer = Tokenizer() tokens = tokenizer.tokenize('すもももももももものうち',wakati=True) print(tokens) wakati =" ".join(tokens) print(wakati)
結果は
tokenizer = Tokenizer()
tokens = tokenizer.tokenize(‘すもももももももものうち’,wakati=True)
print(tokens)
wakati =” “.join(tokens)
print(wakati)
[‘すもも’, ‘も’, ‘もも’, ‘も’, ‘もも’, ‘の’, ‘うち’]
すもも も もも も もも の うち