Help us understand the problem. What is going on with this article?

素人の言語処理100本ノック:06

More than 3 years have passed since last update.

言語処理100本ノック 2015の挑戦記録です。環境はUbuntu 16.04 LTS + Python 3.5.2 :: Anaconda 4.1.1 (64-bit)です。過去のノックの一覧はこちらからどうぞ。

第1章: 準備運動

06.集合

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

出来上がったコード:

main.py
# coding: utf-8


def n_gram(target, n):
    '''指定されたリストからn-gramを作成

    引数:
    target -- 対象リスト
    n -- n-gramのn値(1ならuni-gram、2ならbi-gram...)
    戻り値:
    gramのリスト
    '''
    result = []
    for i in range(0, len(target) - n + 1):
        result.append(target[i:i + n])

    return result


# 集合の作成
set_x = set(n_gram('paraparaparadise', 2))
print('X:' + str(set_x))
set_y = set(n_gram('paragraph', 2))
print('Y:' + str(set_y))

# 和集合
set_or = set_x | set_y
print('和集合:' + str(set_or))

# 積集合
set_and = set_x & set_y
print('積集合:' + str(set_and))

# 差集合
set_sub = set_x - set_y
print('差集合:' + str(set_sub))

# 'se'が含まれるか?
print('seがXに含まれる:' + str('se' in set_x))
print('seがYに含まれる:' + str('se' in set_y))

実行結果:

端末
X:{'ar', 'se', 'di', 'is', 'pa', 'ap', 'ad', 'ra'}
Y:{'ar', 'gr', 'ph', 'ra', 'pa', 'ap', 'ag'}
和集合:{'ar', 'gr', 'se', 'ph', 'di', 'is', 'pa', 'ap', 'ad', 'ra', 'ag'}
積集合:{'ar', 'ap', 'pa', 'ra'}
差集合:{'di', 'is', 'se', 'ad'}
seがXに含まれる:True
seがYに含まれる:False

n_gram()前問の使い回しです。

先輩方の回答には、set.union()set.intersection()set.difference()を使われているものが多いですね。そちらの方が可読性が高いということですが、英語が苦手な私は|&-の方が直感的なので、こちらにしてみました。

それにしても、こんなところでparaparaparadiseが出てくるとは^^
 
7本目のノックは以上です。誤りなどありましたら、ご指摘いただけますと幸いです。

segavvy
IT企業で企画・マーケを担当している元エンジニアです。 C|C#|VBA|Python|全文検索|自然言語処理|機械学習|企画|マーケ|ドラクエ好き|嫁さんはディズニー教|写真は丸まってたペンギン
http://profile.hatena.ne.jp/segavvy/
info-brdg
「SAVVY」シリーズを中心としたプロダクト事業と、IBM iの基幹系SI事業を展開しております!
http://www.info-brdg.co.jp/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away