MikiTech

文系新卒エンジニアの学習記録

【Python】言語処理100本ノック2020 06. 集合

問題

nlp100.github.io

paraparaparadise”と”paragraph”に含まれる文字bi-gramの集合を,それぞれ, XとYとして求め,XとYの和集合,積集合,差集合を求めよ.さらに,’se’というbi-gramがXおよびYに含まれるかどうかを調べよ.

コード

def nGramWord(text, num):
    #スライス
    result = [text[index : index+num ] for index in range(len(text)-num+1)]

    return result
    

#n_Gramに入れる
X = nGramWord("paraparaparadise", 2)
Y = nGramWord("paragraph",2)

print("Xのデータ:" + str(X))
print("Yのデータ"+ str(Y))

#set型のデータ
print("和集合")
print(set(X) | set(Y))
print("積集合")
print(set(X) & set(Y))
print("差集合")
print(set(X) - set(Y))

#'se'が含まれているかどうかの確認
print("Xに'se'は含まれているか?:" + str('se' in X))
print("Yに'se'は含まれているか?:" + str('se' in Y))

n-gramを作るプログラムは05.n-gramと同じなので省略します。
問題は、和集合・積集合・差集合です。

ここにやはりお世話になりました。  

note.nkmk.me

set型は重複しない要素(同じ値ではない要素、ユニークな要素)のコレクションで、和集合、積集合、差集合などの集合演算を行うことができる。

ふむふむ。
どうやら和集合、積集合、差集合の演算を行うためにはset型を使うようなので、

print("和集合")
print(set(X) | set(Y))
print("積集合")
print(set(X) & set(Y))
print("差集合")
print(set(X) - set(Y))

set型のデータにキャスト変換。
あとは、和を求めるためには |を使い、
積を求めるために、&
そして差を求めるために、/を使って完了です。

#'se'が含まれているかどうかの確認
print("Xに'se'は含まれているか?:" + str('se' in X))
print("Yに'se'は含まれているか?:" + str('se' in Y))

残りは、seが含まれているかの確認で、 inを使えば簡単に出すことができました。

以上、言語処理100本ノック2020 06. 集合でした!
もっと良いコードがあればぜひ教えて下さい。m( )m