ni_haruのブログ

ほぼ日記

Pythonで言語処理100本ノックを解く 06. 集合

Python言語処理100本ノックを解いてみます。
7本目です。

環境

Ubuntu 16.04.3 LTS
Python 3.5.2

06. 集合

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

解答

from nlp05 import char_n_gram

if __name__ == "__main__":
    setX = set(char_n_gram("paraparaparadise",2))
    setY = set(char_n_gram("paragraph",2))
    print("X", setX)
    print("Y", setY)
    print("和集合", setX | setY)
    print("積集合", setX & setY)
    print("差集合(X-Y)", setX - setY)
    print("差集合(Y-X)", setY - setX)
    print("集合Xにseが含まれるか?", "se" in setX)
    print("集合Yにseが含まれるか?", "se" in setY)

前回の問題で作成した、n-gramを取得する関数を使っています。
集合演算はかなり簡潔に、分かりやすく書くことが出来ますね。