Traffine I/O

Bahasa Indonesia

2023-02-03

NLP 100 Exercise bab 1:Warm-up

Pengantar

Tokyo Institute of Technology telah menciptakan dan memelihara koleksi latihan NLP yang disebut "NLP 100 Exercise".

https://nlp100.github.io/en/ch01.html

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 X dan Y. Dapatkan gabungan, perpotongan, selisih dari kedua himpunan tersebut. Selain itu, periksa apakah bigram "se" termasuk dalam himpunan X dan 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

https://nlp100.github.io/en/about.html
https://nlp100.github.io/en/ch01.html

Ryusei Kakujo

researchgatelinkedingithub

Focusing on data science for mobility

Bench Press 100kg!