【python】自然言語処理100本ノックやってみた!【06本目】
演習問題が載っているサイトはこちらです。
06.集合
"paraparaparadise"と"paragraph"に含まれる文字bi-gramの集合を,それぞれ, XとYとして求め,XとYの和集合,積集合,差集合を求めよ.
さらに,'se'というbi-gramがXおよびYに含まれるかどうかを調べよ.
- 和集合とは、どちらの要素にも属する集合であること
- 積集合とはどちらにも含まれている要素の集合であること
- 差集合とはある集合の要素に属していて、他の集合には属していない要素の集合
ということが解れば、この問題は解けます。
def ngram(text,n,X): lastnum=len(text)-n+1 text_list=[] for i in range(lastnum): X.append(text[i:i+n]) text1="paraparaparadise" text2="paragraph" X=[] Y=[] union=[] intersection=[] difference_set=[] ngram(text1,2,X) ngram(text2,2,Y) #和集合を求める for i in range(len(X)): union.append(X[i]) for u in range(len(Y)): if(Y[u] not in union): union.append(Y[u]) print(union) #積集合を求める for i in range(len(X)): if(X[i] in Y): intersection.append(X[i]) print(intersection) #差集合を求める for i in range(len(X)): if(X[i] not in Y): difference_set.append(X[i]) print(difference_set) #seの有無を調べる checked=False for i in range(len(X)): if "se" in X[i]: checked=True for u in range(len(Y)): if "se" in Y[u]: checked=True print(checked)