Pengantar
Tokyo Institute of Technology telah menciptakan dan memelihara koleksi latihan NLP yang disebut "NLP 100 Exercise".
Dalam artikel ini, saya akan memberikan contoh jawaban untuk "Chapter 1: Warm-up".
00. Reversed string
Dapatkan string yang menyusun huruf-huruf dari string yang "stressed" dalam urutan terbalik (ekor ke kepala).
print('stressed'[::-1])
desserts
01. “schooled”
Dapatkan string yang menggabungkan huruf pertama, ketiga, kelima, dan ketujuh dalam string "schooled".
print('schooled'[0:7:2])
shoe
02. “shoe” + “cold” = “schooled”
Dapatkan string "schooled" dengan menggabungkan huruf-huruf pada "shoe" dan "cold" satu demi satu dari ujung ke ujung.
char_list = [char1 + char2 for char1, char2 in zip('shoe', 'cold')]
print(''.join(char_list))
schooled
03. Pi
Pisahkan kalimat "Now I need a drink, alcoholic of course, after the heavy lectures involving quantum mechanics." menjadi beberapa kata, dan buat daftar yang elemennya menampilkan jumlah huruf abjad dalam kata yang sesuai.
sentence = 'Now I need a drink, alcoholic of course, after the heavy lectures involving quantum mechanics.'
result = [len(word.strip(',.')) for word in sentence.split()]
print(result)
[3, 1, 4, 1, 5, 9, 2, 6, 5, 3, 5, 8, 9, 7, 9]
04. Atomic symbols
Pisahkan kalimat "Hi He Lied Because Boron Could Not Oxidize Fluorine. New Nations Might Also Sign Peace Security Clause. Arthur King Can." menjadi beberapa kata, dan ekstrak huruf pertama dari kata pertama, ke-5, ke-6, ke-7, ke-8, ke-9, ke-15, ke-16, ke-19, dan dua huruf pertama dari kata lainnya. Buat larik asosiatif (objek kamus atau objek pemetaan) yang memetakan dari string yang diekstrak ke posisi (offset dalam kalimat) kata yang sesuai.
from pprint import pprint
sentence = 'Hi He Lied Because Boron Could Not Oxidize Fluorine. New Nations Might Also Sign Peace Security Clause. Arthur King Can.'
result = ({word[0] if i in {1, 5, 6, 7, 8, 9, 15, 16, 19} else word[:2]: i for i, word in enumerate(sentence.split(), 1)})
pprint(sorted(result.items(), key=lambda x:x[1]))
[('H', 1),
('He', 2),
('Li', 3),
('Be', 4),
('B', 5),
('C', 6),
('N', 7),
('O', 8),
('F', 9),
('Ne', 10),
('Na', 11),
('Mi', 12),
('Al', 13),
('Si', 14),
('P', 15),
('S', 16),
('Cl', 17),
('Ar', 18),
('K', 19),
('Ca', 20)]
05. n-gram
Menerapkan fungsi yang mendapatkan n-gram dari objek urutan yang diberikan (misalnya, string dan daftar). Gunakan fungsi ini untuk mendapatkan bi-gram kata dan bi-gram huruf dari kalimat "I am an NLPer"
def ngram(n, lst):
# [str[i:] for i in range(2)] -> ['I am an NLPer', ' am an NLPer']
# zip(*[str[i:] for i in range(2)]) -> zip('I am an NLPer', ' am an NLPer')
return list(zip(*[lst[i:] for i in range(n)]))
str = 'I am an NLPer'
words_bi_gram = ngram(2, str.split())
chars_bi_gram = ngram(2, str)
print('word bi-gram:', words_bi_gram)
print('char bi-gram:', chars_bi_gram)
word bi-gram: [('am', 'an'), ('I', 'am'), ('an', 'NLPer')]
char bi-gram: [('I', ' '), (' ', 'N'), ('e', 'r'), ('a', 'm'), (' ', 'a'), ('n', ' '), ('L', 'P'), ('m', ' '), ('P', 'e'), ('N', 'L'), ('a', 'n')]
06. Set
Misalkan himpunan bi-gram huruf dari kata “paraparaparadise” dan “paragraph” masing-masing adalah
dan X . Dapatkan gabungan, perpotongan, selisih dari kedua himpunan tersebut. Selain itu, periksa apakah bigram "se" termasuk dalam himpunan Y dan X Y
def ngram(n, lst):
return list(zip(*[lst[i:] for i in range(n)]))
str1 = 'paraparaparadise'
str2 = 'paragraph'
X = set(ngram(2, str1))
Y = set(ngram(2, str2))
union = X | Y
intersection = X & Y
difference = X - Y
print('X:', X)
print('Y:', Y)
print('union:', union)
print('intersection:', intersection)
print('difference:', difference)
print('X included in se:', {('s', 'e')} <= X)
print('Y included in se:', {('s', 'e')} <= Y)
X: {('a', 'r'), ('a', 'p'), ('s', 'e'), ('p', 'a'), ('r', 'a'), ('i', 's'), ('d', 'i'), ('a', 'd')}
Y: {('p', 'h'), ('a', 'r'), ('a', 'p'), ('p', 'a'), ('g', 'r'), ('r', 'a'), ('a', 'g')}
union: {('p', 'h'), ('a', 'r'), ('a', 'p'), ('s', 'e'), ('p', 'a'), ('g', 'r'), ('r', 'a'), ('i', 's'), ('a', 'g'), ('d', 'i'), ('a', 'd')}
intersection: {('p', 'a'), ('r', 'a'), ('a', 'r'), ('a', 'p')}
difference: {('d', 'i'), ('i', 's'), ('a', 'd'), ('s', 'e')}
X included in se: True
Y included in se: False
07. Template-based sentence generation
Menerapkan fungsi yang menerima argumen, x, y, dan z dan mengembalikan string "{y} adalah {z} pada {x}", di mana "{x}", "{y}", dan "{z}" masing-masing menunjukkan nilai x, y, dan z. Selain itu, konfirmasikan string yang dikembalikan dengan memberikan argumen x = 12, y = "suhu", dan z = 22,4.
def create_sentence(x,y,z):
return f'{str(y)} is {str(z)} at {str(x)}'
print(create_sentence(12, 'temperature', 22.4))
Temperature is 22.4 at 12
08. Cipher text
Menerapkan sandi fungsi yang mengonversi string yang diberikan dengan spesifikasi:
- Setiap huruf kecil alfabet c dikonversi menjadi huruf yang kode ASCII-nya (219 - [kode ASCII dari c])
- Menjaga agar huruf-huruf lain tidak berubah
Gunakan fungsi ini untuk menyandikan dan menguraikan pesan bahasa Inggris.
def cipher(str):
rep = [chr(219 - ord(x)) if x.islower() else x for x in str]
return ''.join(rep)
sentence = 'I am titanium.'
sentence = cipher(sentence)
print('encrypt:', sentence)
sentence = cipher(sentence)
print('decrypt:', sentence)
encrypt: I zn grgzmrfn.
decrypt: I am titanium.
09. Typoglycemia
Tulis program dengan spesifikasi tersebut:
- Menerima urutan kata yang dipisahkan oleh spasi
- Untuk setiap kata dalam urutan tersebut:
- Jika kata tersebut tidak lebih dari empat huruf, pertahankan agar kata tersebut tidak berubah
- Jika tidak,
- Pertahankan huruf pertama dan terakhir tidak berubah
- Kocok huruf lain di posisi lain (di tengah kata)
Amati hasilnya dengan memberikan sebuah kalimat, misalnya, "I couldn’t believe that I could actually understand what I was reading : the phenomenal power of the human mind ".
import random
sentence = 'I couldn’t believe that I could actually understand what I was reading : the phenomenal power of the human mind .'
print(' '.join(i[0] + ''.join(random.sample(i[1:-1], len(i[1:-1]))) + i[-1] if len(i) > 4 else i for i in sentence.split()
))
I clnuo’dt beevile that I culod aactully unrsntdead what I was rdianeg : the pahenomenl peowr of the human mind .
References