【Python】janome|「複合名詞化」+「名詞」を一つの単語にして簡易辞書の作成を試みる
日本語の文章を分析する前に、単語ごとに分割する処理を行う必要があります。
その処理にはjanomeを使用させていただいています。
janomeのインストールは手軽に行えます。
pip3 install janome
環境
python3 -V Python 3.9.2 pip3 show janome Name: Janome Version: 0.4.2
janomeで形態素解析をする時の「名詞+名詞」の扱いです。
そのまま処理をうと「名詞」と「名詞」が分離して出力されます。
# Janomeを使うための宣言 from janome.tokenizer import Tokenizer import collections # ファイルを読み込む fp = open("ファイルの場所と名前.txt","r") text = fp.read() # Janomeの準備 t = Tokenizer() tokens = t.tokenize(text) for token in t.tokenize(text): print(token)
以下のように「2週間後」が
「2」、「週間」、「後」と3つに分かれてしまいます。
2 名詞,数,*,*,*,*,2,ニ,ニ
週間 名詞,接尾,助数詞,*,*,*,週間,シュウカン,シューカン
後 名詞,接尾,副詞可能,*,*,*,後,ゴ,
週間 名詞,接尾,助数詞,*,*,*,週間,シュウカン,シューカン
後 名詞,接尾,副詞可能,*,*,*,後,ゴ,
そのため「2週間後」をひとつの単語にしたいと思いました。
そこで
① Analyzerフレームワークを使いCompoundNounFilter()で「連続する名詞の複合名詞化」を行います。
② 複合名詞化の後に「名詞」が続いた場合も一つの単語にするような処理を行います。
② 「簡易辞書」フォーマットが使用できるのでそれを理容師ます。
最終的に「<表層形>,<品詞>,<読み>」でcsvファイルを出力します。
from janome.tokenizer import Tokenizer from janome.analyzer import Analyzer from janome.tokenfilter import * import pandas as pd my=open("ファイルの場所と名前.txt").read() a = Analyzer(token_filters=[CompoundNounFilter()]) book=[] corpus=[] for token in a.analyze(my): tab_list=token.base_form book.insert(-1,tab_list) if token.part_of_speech.split(',')[1]=="複合": corpus.insert(-1,token.base_form) hon=[] meisi=[] yomi=[] for tuika in corpus: hon.insert(-1,tuika) meisi.insert(-1,"名詞") yomi.insert(-1,"読み") df1 = pd.DataFrame(hon) df2 = pd.DataFrame(meisi) df3 = pd.DataFrame(yomi) df1['B'] = df2 df1['C'] = df3 df1.to_csv("簡易辞書を出力.csv",header=False, index=False)
2週間後 名詞 * * * * * 2週間後 読み 読み
と「複合名詞化」+「名詞」が1つの単語になりました。
後は、気になる単語を手作業でcsvに入力していきます。
例えば、
がん剤,名詞,読み
は「抗がん剤」と手入力し直します。
抗がん剤,名詞,読み
短文を扱うなら、こういう方法もありかなと思いました。