Message in a bottle

海に流すボトルメッセージのような、脈絡もないことを書き連ねていくブログです

【python】自然言語処理100本ノックやってみた!【06本目】

演習問題が載っているサイトはこちらです。

言語処理100本ノック 2015

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)