👩‍💻

言語処理100本ノック 2020 (Rev 2) 第1章: 準備運動 06. 集合

2023/01/06に公開約1,200字

問題

06. 集合

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

solution06.py
def n_gram(target, n=2):
    return [target[idx:idx + n] for idx in range(len(target) - n + 1)]

text_x = 'paraparaparadise'
text_y = 'paragraph'

X = n_gram(text_x)
Y = n_gram(text_y)

#print(f'和集合: {set(X) | set(Y)}')
print(f'和集合: {set(X).union(set(Y))}')

#print(f'積集合: {set(X) & set(Y)}')
print(f'積集合: {set(X).intersection(set(Y))}')

#print(f'差集合: {set(X) - set(Y)}')
print(f'差集合: {set(X).difference(set(Y))}')

print('se' in (set(X) & set(Y)))
output
和集合: {'di', 'gr', 'is', 'ar', 'ag', 'pa', 'ra', 'ap', 'se', 'ph', 'ad'}
積集合: {'ra', 'ap', 'ar', 'pa'}
差集合: {'se', 'is', 'di', 'ad'}
False

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

https://github.com/kurokawa5/nlp100_2020/blob/main/chapter01/solution06.py

参考記事

第1章: 準備運動
N-gramの作り方
集合の演算を行う(和集合、積集合、差集合、対称差集合)
Python, set型で集合演算(和集合、積集合や部分集合の判定など)

Discussion

ログインするとコメントできます