tbsmcd.net : Home | Archives | Tags | Search | Profile

言語処理100本ノック2020 を始めた 第1章

2020-04-24

Jupyter notebook

言語処理100本ノック 2020 - NLP100 2020

関連記事: tag 言語処理100本ノック

なぜ?

最近 Python を書いてないこともあり、思うところもあり。

環境

Python3 + Anaconda + Jupyter Notebook

インストール等については気が向いた時に。

code

以下ネタバレ

.
.
.
.
.
.
.
.
.

まず第1章から

# 000
st = 'stressed'
ans = ''
for i in range(len(st)):
    ans += st[-i - 1]
print(ans)
# 000
st = 'stressed'
print(st[::-1]) # [start:stop:step] start = 0 つまり1文字目の前から
# 001
st = 'パタトクカシーー'
print(st[0] + st[2] + st[4] + st[6])
# 001
st = 'パタトクカシーー'
print(st[::2]) # 000 と同様
## 002
pc = 'パトカー'
tx = 'タクシー'
print(''.join([p + t for p, t in zip(pc, tx)])) # zip : 複数の list の要素をまとめて読む, 内包表記のことを忘れている
# 003
txt = 'Now I need a drink, alcoholic of course, after the heavy lectures involving quantum mechanics.'
words = txt.replace(',', '').replace('.', '').split()
[len(word) for word in words]
# 004
txt = 'Hi He Lied Because Boron Could Not Oxidize Fluorine. New Nations Might Also Sign Peace Security Clause. Arthur King Can.'
words = txt.replace('.', '').split()
target = [1, 5, 6, 7, 8, 9, 15, 16, 19]
res = {}
i = 1
for i, w in enumerate(words): #  enumerate 忘れる
    if (i + 1 in target):
        res[w[0:1]] = i + 1 
    else:
        res[w[0:2]] = i + 1
res
# 005
def n_gram(target, n): # スライスは文字列でもリストでも出来る
    return [target[i:i + n] for i in range(len(target) - n + 1)]

target = 'I am an NLPer'

# 文字 bi-gram
print(n_gram(target, 2))

# 単語 bi-gram
print(n_gram(target.split(' '), 2))
# 006
def n_gram(target, n):
    return set([target[i:i + n] for i in range(len(target) - n + 1)])

X = n_gram('paraparaparadise', 2)
Y = n_gram('paragraph', 2)

# 和集合
print(X | Y)
# 積集合
print(X & Y)
# 差集合
print(X - Y)
# 存在確認
print('se' in X)
print('se' in Y)
# 007
def sent(x, y, z):
    return(str(x) + '時の' + str(y) + '' + str(z))
print(sent(12, '気温', 22.4))
# 008
def cr(st):
    res = ''
    for s in list(st):
        if s.isalpha and s.islower
            res += chr(219 - ord(s))
        else:
            res += s
    return res

code = cr("I'm happy.")
string = cr(code)

print(code)
print(string)
## 009
import random

def make_rand(s):
    if len(s) <= 4:
        return s
    else:
        li = list(s)
        first = li.pop(0)
        last = li.pop(-1)
        random.shuffle(li)
        return first + ''.join(li) + last

text = 'I couldn’t believe that I could actually understand what I was reading : the phenomenal power of the human mind .'
res = ''
for w in text.split(' '):
    res += make_rand(w)

print(res)

最初の方はスライスなどを思い出すために複数パターン書いてみたが、あとの方では飽きてる。

Tags: 言語処理100本ノック Python