#前回まで
前回は、janomeの基本を見つつ.txt内の文を分割した。
今回は、不要な品詞の消去と使われた単語の回数、複合名詞化をやっていく。
参考にさせていただいているサイトはこちら↓
https://note.nkmk.me/python-janome-tutorial/
#Analyzerフレームワーク
Analyzerフレームワークを使用すれば、今回やりたいことが全てできるらしい。
他にも、大文字小文字の変換、出力する品詞の指定ができるとのこと。
#不要な品詞を消去
不要な品詞を消去するには、POSStopFilterを使う。
from janome.tokenizer import Tokenizer
#今回使うモジュール達↓
from janome.analyzer import Analyzer
from janome.charfilter import *
from janome.tokenfilter import *
f = open("sample.txt", "r", encoding="UTF-8")
text = f.read()
t = Tokenizer()
# ここから変わってる
char_filters = [UnicodeNormalizeCharFilter(),
RegexReplaceCharFilter("","")]
token_filters = [POSStopFilter(["助詞", "記号"]), # POSStopFilter 表示しない
ExtractAttributeFilter("surface")]
a = Analyzer(char_filters = char_filters,
token_filters = token_filters)
for token in a.analyze(text):
print(token)
ちなみに、import * がよく分からず、自分で好きに変数みたいに入れていいのかと思ってたらちゃんと意味があった。そりゃそうだ、流石に初学者すぎ。
Pythonの「from import *」の使い方を現役エンジニアが解説【初心者向け】から引用
##実行結果
むかし
むかし
ある
ところ
おじいさん
おばあさん
住ん
い
まし
た
.
.
.
助詞も記号(見えてないけど)もしっかり消えている。
#使われている単語のカウント
使われている単語をカウントするには、TokenCountFilter()を使う。
from janome.tokenizer import Tokenizer
from janome.analyzer import Analyzer
from janome.charfilter import *
from janome.tokenfilter import *
f = open("sample.txt", "r", encoding="UTF-8")
text = f.read()
t = Tokenizer()
char_filters = [UnicodeNormalizeCharFilter(),
RegexReplaceCharFilter("","")]
token_filters = [ExtractAttributeFilter("surface")]
a = Analyzer(token_filters=[POSStopFilter(["助詞", "記号"]),
TokenCountFilter()])
g_count = a.analyze(text)
for i in g_count:
print(i)
POSStopFilter([ ])は、a = Analyzer( )の方でも指定できるらしいから、token_filtersの方を消している。(逆だと怒られちゃう)
TokenCountFilter()は文末に置かないといけない。
##実行結果
('むかし', 2)
('ある', 2)
('ところ', 1)
('おじいさん', 6)
('おばあさん', 9)
('住ん', 1)
('い', 2)
('まし', 18)
('た', 25)
.
.
.
##複合名詞化
複合名詞にするには、CompoundNounFilterを使う。
POSStopFilterを使って記号のみを消している。
from janome.tokenizer import Tokenizer
from janome.analyzer import Analyzer
from janome.charfilter import *
from janome.tokenfilter import *
f = open("sample.txt", "r", encoding="UTF-8")
text = f.read()
t = Tokenizer()
char_filters = [UnicodeNormalizeCharFilter(),
RegexReplaceCharFilter("","")]
token_filters = [ExtractAttributeFilter("surface")]
a = Analyzer(token_filters=[POSStopFilter(["記号"]),
CompoundNounFilter()])
for token in a.analyze(text):
print(token)
###実行結果
むかしむかし 名詞,複合,*,*,*,*,むかしむかし,ムカシムカシ,ムカシムカシ
ある 連体詞,*,*,*,*,*,ある,アル,アル
ところ 名詞,非自立,副詞可能,*,*,*,ところ,トコロ,トコロ
に 助詞,格助詞,一般,*,*,*,に,ニ,ニ
おじいさん 名詞,一般,*,*,*,*,おじいさん,オジイサン,オジーサン
と 助詞,並立助詞,*,*,*,*,と,ト,ト
おばあさん 名詞,一般,*,*,*,*,おばあさん,オバアサン,オバーサン
が 助詞,格助詞,一般,*,*,*,が,ガ,ガ
住ん 動詞,自立,*,*,五段・マ行,連用タ接続,住む,スン,スン
で 助詞,接続助詞,*,*,*,*,で,デ,デ
い 動詞,非自立,*,*,一段,連用形,いる,イ,イ
まし 助動詞,*,*,*,特殊・マス,連用形,ます,マシ,マシ
た 助動詞,*,*,*,特殊・タ,基本形,た,タ,タ
.
.
.
#まとめ
今回は、品詞の消去、単語のカウント、複合名詞化をやっていった。他にも使えるものはあるから、その都度使っていければいいと思う。
次回は、何をしようか。WordCloudの方に入っていってもいいかもしれない。