言語処理100本ノックchap01_06
言語処理100本ノックの6章6問目。
言語処理100本ノック 2015
問題は、2つの短文のbigramを作り、比較して、その和集合、積集合、差集合を見つけろというもの(ちゃんとした課題文はリンク先にあります)。n-gramを作る関数は5問目で作ったので、それを利用して以下のように各集合を探してみました(言語処理100本ノックchap01_05 - 百折不撓)。
print("n-gramの数を入力してください") N = int(input()) print("文章1を入力してください") para0 = input() #para0 = "paraparaparadise" print("文章2を入力してください") para1 = input() #para1 = "paragraph" bigram0 = ngram(N, para0) bigram1 = ngram(N, para1) ###空白文字を1つのbigramとしてしまっている場合は、ここで削除(chap1_05.pyを修正すべき) if "" in bigram0: bigram0.remove("") if "" in bigram1: bigram1.remove("") X, Y = set(bigram0), set(bigram1) print("X: {}, Y: {}\n".format(X, Y)) """和集合OR""" wa = X.union(Y) print("OR: {}".format(wa)) """積集合AND""" seki = X.intersection(Y) print("AND: {}".format(seki)) """差集合diff""" sa = X.difference(Y) print("diff: {}".format(sa)) """Searching for <se> """ set_se = {"se"} print("Searching for \"se\" in X\n".format(X.intersection(set_se))) print("Searching for \"se\" in Y\n{}".format(Y.intersection(set_se)))
set型?という集合表現をpythonは持っているのですね。そして、その演算と言うか、集合同士の関係も比較できるメソッドを持っている。数十文字からなる1文同士の比較なら、人間の目でも出来ますが、もっと長い文章になると難しいので、やはり便利ですね。
と言うわけで、この問題は、set型のメソッドの手習い?みたいな課題でした。