大切なものは、見えるところに。

乳がんかな?と疑い始めてからの日々を、振り返りながら、ゆるやかに綴ります。

【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に入力していきます。
例えば、

がん剤,名詞,読み


は「抗がん剤」と手入力し直します。

抗がん剤,名詞,読み



短文を扱うなら、こういう方法もありかなと思いました。