Description
Programming Assignment #3
(75 points)
ํ์ฑํ (hursung1@postech.ac.kr)
โผ ์ ์ถ ๋ง๊ฐ์ผ: 2021.11.30 23:59
โผ ๊ฐ๋ฐ ํ๊ฒฝ: Windows Visual Studio 2019
โผ ์ ์ถ๋ฌผ
๏ C ์์ค ์ฝ๋ ๋ฐ ์ถ๋ ฅ ํ์ผ (mystring.h, mystring.c, assn3.c)
โข ํ๋ก๊ทธ๋จ์ ์์ค ์ฝ๋์ ์ฑ์ ์์ ์ดํด๋ฅผ ๋๊ธฐ ์ํ ์ฃผ์์ ๋ฐ๋์ ๋ถ์ฌ์ฃผ์ธ์.
๏ ๋ณด๊ณ ์ ํ์ผ (.docx, .hwp ๋๋ .pdf; assn3.docx, assn3.hwp ๋๋ assn3.pdf)
โข ๋ณด๊ณ ์๋ AssnReadMe.pdf๋ฅผ ์ฐธ์กฐํ์ฌ ์์ฑํ์๋ฉด ๋ฉ๋๋ค.
โข ๋ณด๊ณ ์๋ Problem2์ ๋ํด์๋ง ์์ฑํด ์ฃผ์ธ์.
โข ๋ช
์ ์์ฝ (Honor code): ํ์ง์ ๋ค์์ ์์ฝ์ ๊ธฐ์
ํ์ฌ ์ ์ถํด ์ฃผ์ธ์: โ๋๋ ์ด
ํ๋ก๊ทธ๋๋ฐ ๊ณผ์ ๋ฅผ ๋ค๋ฅธ ์ฌ๋์ ๋ถ์ ์ ํ ๋์ ์์ด ์์ํ์์ต๋๋ค.โ ๋ณด๊ณ ์ ํ์ง์ ๋ช
์ ์์ฝ์ด ๊ธฐ์
๋์ด ์์ง ์์ ๊ณผ์ ๋ ์ ์ถ๋์ง ์์ ๊ฒ์ผ๋ก ์ฒ๋ฆฌ๋ฉ๋๋ค.
โข ์์ฑํ ์์ค ์ฝ๋์ ๋ณด๊ณ ์ ํ์ผ์ PLMS๋ฅผ ํตํด ์ ์ถํด ์ฃผ์ธ์.
โผ ์ฃผ์ ์ฌํญ
๏ ์ปดํ์ผ์ด๋ ์คํ์ด ๋์ง ์๋ ๊ณผ์ ๋ 0์ ์ผ๋ก ์ฑ์ ๋ฉ๋๋ค.
๏ ์ ์ถ ๊ธฐํ๋ณด๋ค ํ๋ฃจ ๋ฆ๊ฒ ์ ์ถํ ๋ 20%, ์ดํ ๋ฆ๊ฒ ์ ์ถํ ๋ 40% ๊ฐ์ ๋ฉ๋๋ค. ์ ์ถ ๊ธฐ
ํ๋ณด๋ค ์ฌํ ์ด์ ๋ฆ์ผ๋ฉด ์ ์ถ ๋ฐ์ง ์์ต๋๋ค (0์ ์ฒ๋ฆฌ).
๏ ๊ฐ ๋ฌธ์ ์ ์ ํ ์กฐ๊ฑด๊ณผ ์๊ตฌ ์ฌํญ์ ๋ฐ๋์ ์ง์ผ ์ฃผ์๊ธฐ ๋ฐ๋๋๋ค.
๏ ๋ชจ๋ ๋ฌธ์ ์ ์ถ๋ ฅ ํ์์ ์๋์ ์์๋ค๊ณผ ๋์ผํด์ผ ํ๋ฉฐ, ๊ฐ์ง ์์ ์ ๊ฐ์ ๋ฉ๋๋ค.
๏ ๋ถ์ ํ์์ ๊ดํ ๊ท์ ์ POSTECH ์ ์์ปดํจํฐ๊ณตํ๋ถ ํ๋ถ์์ํ์ โPOSTECH ์ ์์ปดํจํฐ ๊ณตํ๋ถ ๋ถ์ ํ์ ์ ์โ๋ฅผ ๋ฐ๋ฆ
๋๋ค (PLMS์ ๋ณธ ๊ณผ๋ชฉ ๊ณต์ง์ฌํญ์ ๋ฑ๋ก๋ ๊ธ ์ค, ์ ๋ชฉ์ด
[document about cheating]์ธ ๊ธ์ ์ฒจ๋ถ๋์ด ์๋ disciplinary.pdf๋ฅผ ์ฐธ์กฐํ์ธ์).
๏ ์ด๋ฒ ๊ณผ์ ๋ ์ถ๊ฐ ๊ธฐ๋ฅ ๊ตฌํ๊ณผ ๊ด๋ จ๋ ์ถ๊ฐ ์ ์๊ฐ ๋ฐ๋ก ์์ต๋๋ค.
[๋ค์ด๊ฐ๊ธฐ ์ ]
1. ๋ฌธ์์ด(string)
๏ ์ฐ์๋ ๋ฌธ์๋ค๋ก C ์ธ์ด์์ ๋ฌธ์์ด ์ ๋ค์ “๋ฅผ ์ด์ฉํ๋ค.
๏ char ํ์ 1์ฐจ์ ๋ฐฐ์ด์ ์ด์ฉํ์ฌ ๋ฌธ์์ด์ ์ ์ฅํ๋ค.
๏ ๋ฐฐ์ด์ ๋ฌธ์์ด์ ์ ์ฅํ ๋๋ ๋์ NULL ๋ฌธ์ (”)๋ฅผ ๋ฃ์ด์ ํ์ํ๋ค.
2. ์ ์ธ
๏ char str[] = “hello”;
์์ ๊ฐ์ด ์ ์ธ๊ณผ ๋์์ ์ด๊ธฐํ๋ฅผ ํ๊ฒ ๋๋ฉด, ์๋์ผ๋ก ๋ฌธ์์ด์ ๋์ NULL ๋ฌธ์๊ฐ ์ถ๊ฐ๋๋ค.
str
h e l l o
3. ์
๋ ฅ๊ณผ ์ถ๋ ฅ
char str[100]; printf(“Enter the filename: “); scanf(“%s”, str); printf(“%s”, str);
<์คํ ์์> (์๋ ์์์ ๋ฐ์ค์ ์ฌ์ฉ์ ์
๋ ฅ์ ํด๋น)
Enter the filename: train.txt train.txt
โผ Problem1: String functions (3์ )
(๋ฌธ์ )
C์ <string.h> ๋ผ์ด๋ธ๋ฌ๋ฆฌ์์ ์ ๊ณตํ๋ ๋ฌธ์์ด ์ฒ๋ฆฌ ํจ์ ์ค ์ผ๋ถ๋ฅผ ์ง์ ๊ตฌํํ๋ค.
(์ค๋ช
) ์ ๊ณต๋ assn3_p1.zipํ์ผ ๋ด์ mystring.h์ mystring.c๊ฐ ์กด์ฌํ๋ค. mystring.h๋ ์๋์ ๊ฐ์ ๋ฌธ์์ด ์ฒ๋ฆฌ ํจ์์ ์ ์ธ์ ํฌํจํ๊ณ ์๋ค. (๊ทธ๋๋ก ์ฌ์ฉํ๊ณ ๋ณ๊ฒฝํ์ง ๋ง ๊ฒ)
#pragma once
int mystrlen(char *str); int mystrcmp(char *str1, char *str2); char *mystrcpy(char *toStr, char *fromStr); char *mystrlower(char *str);
์ ํจ์์ ๊ตฌํ๋ถ๋ฅผ ํฌํจํ mystring.c๋ฅผ ์์ฑํ๋ค. ๊ฐ ํจ์์ ์ ์๋ ์๋์ ๊ฐ๋ค.
(1) int mystrlen(char *str)
NULL๋ฌธ์๋ฅผ ์ ์ธํ ๋ฌธ์์ด์ ๊ธธ์ด๋ฅผ return ํ๋ค. ๋น ๋ฌธ์์ด(โโ)์ ๊ฒฝ์ฐ 0์ return ํ๋ค.
Ex)
printf(“%d “, mystrlen(“csed101”)); //๊ฒฐ๊ณผ: 7
(2) int mystrcmp(char *str1, char *str2)
๋ฌธ์์ด str1๊ณผ str2์ ๋์๊ด๊ณ๋ฅผ ๋น๊ตํ๋ค. ๋น๊ต ๊ธฐ์ค์ ASCII์ด๋ค. ๊ฐ ๋ฌธ์์ด์ ์ฒซ ๋ฌธ์๋ถํฐ ๋น๊ตํ๋ฉฐ, ๋ฌธ์๊ฐ ๊ฐ์ผ๋ฉด ๋ค์ ๋ฌธ์๋ฅผ ๋ค์ ๋น๊ตํ๋ค. return ํ ๊ฐ์ ๋ค์์ ๊ธฐ์ค์ ๋ฐ๋ผ ์ ํ๋ค.
– ๋น๊ต ์ค str1์ ๋ฌธ์๊ฐ ์์ ๊ฒฝ์ฐ -1, ํด ๊ฒฝ์ฐ 1์ return
– ๋น๊ตํ๋ ๋ ๋ฌธ์์ด์ด ์์ ํ ๊ฐ์ ๊ฒฝ์ฐ(๊ธธ์ด๊ฐ ๊ฐ๊ณ ๋ชจ๋ ๋ฌธ์๊ฐ ๊ฐ์) 0์ return
– ๋น๊ต ์ค ํ ๋ฌธ์์ด์ด ๋จผ์ ๋์ ๋๋ฌํ๋ฉด ๊ทธ ๋ฌธ์์ด์ด ๋ ์๋ค๊ณ ํ๋จ
Ex)
string = “csed101” printf(“%d “, mystrcmp(string, “csed101”)); //๊ฒฐ๊ณผ: 0 printf(“%d “, mystrcmp(string, “csed103”)); //๊ฒฐ๊ณผ: -1 printf(“%d “, mystrcmp(string, “csed”)); //๊ฒฐ๊ณผ: 1 printf(“%d “, mystrcmp(string, “csed1010”)); //๊ฒฐ๊ณผ: -1 printf(“%d “, mystrcmp(string, “Csed101”)); //๊ฒฐ๊ณผ: 1
(3) char *mystrcpy(char *toStr, char *fromStr)
๋ฌธ์์ด fromStr์ ๋ฌธ์์ด toStr์ ๋ณต์ฌํ ํ, ๋ฌธ์์ด toStr์ ์ฃผ์๋ฅผ return ํ๋ค.
Ex)
char str[100]; printf(“%s “, mystrcpy(str, “Hello world!”)); // ๊ฒฐ๊ณผ: Hello world! printf(“%s “, mystrcpy(str, “CSED101”)); //๊ฒฐ๊ณผ: CSED101
(4) char *mystrlower(char *str)
๋ฌธ์์ด str ๋ด์ ๋ชจ๋ ์์ด ์ํ๋ฒณ์ ์๋ฌธ์๋ก ๋ฐ๊พผ ํ, ๋ฌธ์์ด str์ ์ฃผ์๋ฅผ return ํ๋ค.
char str[100] = “Hello World! 123”;
printf(“%s “, mystrlower(str)); //๊ฒฐ๊ณผ: hello world! 123
โผ Problem2: Naรฏve Bayes Classifier๋ฅผ ํ์ฉํ ์คํธ๋ฌธ์ ๋ถ๋ฅ (72์ )
[๋ชฉ์ ]
– ํฌ์ธํฐ์ ๋์ ํ ๋น ์ฌ์ฉ๋ฒ์ ์ตํ๋ค.
– ํ์ผ ์
์ถ๋ ฅ์ ์ฌ์ฉ๋ฒ์ ์ตํ๋ค. – String์ ์ฌ์ฉ๋ฒ์ ์ตํ๋ค.
[๋ฐฐ๊ฒฝ์ง์]
1. ๋ค์ด๊ฐ๊ธฐ ์ฐ๋ฆฌ๊ฐ ๋ฉ์ผ ํด๋ผ์ด์ธํธ(ex. ๊ตฌ๊ธ ์ง๋ฉ์ผ, ๋ค์ด๋ฒ ๋ฉ์ผ ๋ฑ)๋ฅผ ์ฌ์ฉํ ๋, ์๋์ผ๋ก ์คํธ ๋ฉ์ผ
๋ก ๋ถ๋ฅํ์ฌ ์ฐจ๋จํด์ฃผ๋ ๊ฒฝ์ฐ๊ฐ ์๋ค. ์์ฐ์ธ์ด์ฒ๋ฆฌ์ ํฐ task ์ค ํ๋์ธ text classification์
์ ์์์ ๊ฐ์ด ์ด๋ค ๋ฌธ์ฅ ํน์ ๊ธ์ ํน์ ํ ๋ฒ์ฃผ๋ก ๋ถ๋ฅํ๋ ์์
์ ์ํํ๋ค. ์ด๋ฅผ ์ํ ์๋ง
์ ๋ฐฉ๋ฒ์ด ์กด์ฌํ๋๋ฐ(tf-idf, support vector machine, โฆ), ์ด๋ค ์ค ํ ๊ฐ์ง ๊ฐ๋จํ ๋ฐฉ๋ฒ์ธ
Naรฏve Bayes Classification์ Bayesโ Theorem์ ๊ธฐ์ด๋ก ํ์ฌ text classification์ ์ํํ๋ค.
2. Bayesโ Theorem
๋ ํ๋ฅ ๋ณ์์ ๊ฒฐํฉ ํ๋ฅ ์ ๋ํด, ๋ค์๊ณผ ๊ฐ์ ์์ด ์ฑ๋ฆฝํ๋ค.
(, ) = (|)() = (|)()
์ฌ๊ธฐ์, (|)() = (|)() ๋ง์ ์ฌ์ฉํ์ฌ, ๋ค์๊ณผ ๊ฐ์ด ํํํ ์ ์๋ค.
(|) = (|)()/()
์์์ ์ธ๊ธํ ์คํธ ํํฐ๋ง์ ์์๋ฅผ ๋ค์ด ์ ์์ ์ดํด๋ณด์. (|)๋ ์ด๋ค ๋ฉ์ผ()์ด ์คํธ์ธ ์ง ์๋์ง()๋ฅผ ๊ฒฐ์ ํ๋ ํ๋ฅ ์ด๋ค. ๊ด์ธก ๊ฐ๋ฅํ ์ ๋ณด(ex. ๋ฉ์ผ ๋ฐ์ดํฐ ์
)๋ฅผ ํตํด ์ฐ๋ณ์ ์์ ํ๋ฅ ๊ฐ๋ค์ ๊ตฌํ์ฌ, ์ข๋ณ์ ๊ฐ์ ๊ณ์ฐํ๋ ๊ฒ์ด Bayesโ Theorem์ ๋ชฉ์ ์ด๋ค.
์ฐ๋ณ์ ์ดํด๋ณด๋ฉด, ๋จผ์ ()๋ ํน์ ๋ฒ์ฃผ์ ๋ฑ์ฅ ํ๋ฅ ์ด๋ค. ์ด๋ ํ์ฌ ๋ฐ์ดํฐ ์
๋ด์ ์คํธ ๋ฉ ์ผ์ ๋ฑ์ฅ ํ๋ฅ ์ ์ฌ์ฉํ๋ค. (|)๋ ํน์ ๋ฒ์ฃผ์ ๋ํ ๊ทธ ๋ฉ์ผ์ ๋ฑ์ฅ ํ๋ฅ ์ ๋ํ๋ธ๋ค. ()
๋ ํด๋น ๋ฉ์ผ์ ๋ฑ์ฅ ํ๋ฅ ์ ๋ํ๋ด์ง๋ง, ๋ณดํต์ ๊ณ์ฐ ํธ์๋ฅผ ์ํด ์ด ๊ฐ์ ์ง์ ๊ตฌํ์ง ์๊ณ
(|)()์์ ๋น๋ก ๊ด๊ณ๋ง์ ์ด์ฉํ๋ค.
3. Naรฏve Bayes Classification
๋ ์ฌ๋ฌ ๋จ์ด๋ค(1, 2, โฆ , )๋ก ์ด๋ฃจ์ด์ง ๋ฌธ์(ํน์ ๋ฌธ์ฅ)์ด๋ฏ๋ก, (|)๋ ์ด ๋จ์ด๋ค์ ์กฐ๊ฑด
๋ถ ๊ฒฐํฉ ํ๋ฅ ๋ก ๋ณผ ์ ์๋ค.
(|) = (1, 2, โฆ , |)
Naรฏve Bayes Classification์ ์ฌ๊ธฐ์ ๊ฐ ๋จ์ด์ ๋ฑ์ฅ ์ฌ๊ฑด์ ์กฐ๊ฑด๋ถ ๋
๋ฆฝ์ผ๋ก ๊ฐ์ ํ๋ค. ๋
๋ฆฝ์
์ ์์ ๋ฐ๋ผ ์์ ๋ค์๊ณผ ๊ฐ์ด ๋ณํํ ์ ์๋ค.
(|) = (1, 2, โฆ , |) = โ (|)
์ฆ, ์ฐ๋ฆฌ๊ฐ ๋ฅผ ๋ถ๋ฅํ๊ณ ์ ํ ๋, ๋ค์๊ณผ ๊ฐ์ ์์ผ๋ก ๋ถ๋ฅํ ์ ์๋ค.
=
์ฌ๊ธฐ์ ๋ ์์ ๊ฐ์ ์ต๋ํํ๋ ๋ฅผ ์๋ฏธํ๋ค.
4. ์์ ๋ค์๊ณผ ๊ฐ์ training data๊ฐ ์๋ค๊ณ ํ์.
I will buy a new phone Ham
buy our product, change your old phone Spam
pay attention to our new product Spam
let’s discuss about our homework Ham
I think it is new one Ham
์ด๋ค ๋ฌธ์ฅ = โbuy our new phoneโ์ Ham์ธ์ง Spam์ธ์ง ๋ถ๋ฅํ๊ณ ์ ํ๋ค. ์ฆ (|)์ (|)๋ฅผ ๊ตฌํ๊ณ ์ ํ๋ค. Naรฏve Bayes Classification ๋ฐฉ๋ฒ์ ๋ฐ๋ผ, ๋จผ์ ๋ค์์ ํ๋ฅ ๊ฐ๋ค์
๊ตฌํ๋ค.
โผ ()
– () = 3/5, () = 2/5
โป (): ์ฃผ์ด์ง ํ์ต ๋ฐ์ดํฐ์์ ์คํธ์ ๋น์จ์ ๋งํจ. ์ฆ, 5๊ฐ์ ๋ฐ์ดํฐ ์ค์ 2๊ฐ ๊ฐ ์คํธ์ด๋ฏ๋ก 2/5 ๋ก ๊ณ์ฐ ํจ
โผ (|)
– ( | ) = 1/3, ( | ) = 1/2
– ( | ) = 1/3, ( | ) = 1
– ( | ) = 2/3, ( | ) = 1/2
– (โ | ) = 1/3, (โ | ) = 1/2
โป ‘new’๋ผ๋ ๋จ์ด๊ฐ ํ์ต ๋ฐ์ดํฐ 5๊ฐ ์ค์ 2๊ฐ๋ ์ ์ ๋ฉ์ผ(Ham)์, 1๊ฐ๋ ์คํธ์ ์์ผ
๋ฏ๋ก ( | ) = 2/3, ( | ) = 1/2 ๋ก ๊ณ์ฐ ํจ
์ด๋ฅผ ํตํด ๊ฐ์ ๊ตฌํ๋ฉด ๋ค์๊ณผ ๊ฐ๋ค.
– () (|) = 2/135
– () (|) = 1/20
์๋์ ๊ฐ์ด ๋ ํฌ๋ฏ๋ก, x๋ Spam์ผ๋ก ๋ถ๋ฅํ ์ ์๋ค.
[์ฃผ์์ฌํญ]
1. ํ์ผ ์ด๋ฆ์ “assn3.c”๋ก ์ ์ฅํ๊ณ , ๋ณด๊ณ ์๋ problem2์ ๋ํด์๋ง ์์ฑํ๋ค.
2. ํ์ค ํค๋ ํ์ผ <string.h>๋ฅผ includeํ์ฌ ์ฌ์ฉํ ์ ์๋ค.
3. ์ ์ญ ๋ณ์, goto ๋ฌธ, ๊ตฌ์กฐ์ฒด ๋ฐ ์ฐ๊ฒฐ๋ฆฌ์คํธ(linked list)๋ฅผ ์ฌ์ฉํ ์ ์๋ค.
4. ๋ชจ๋ ๊ธฐ๋ฅ์ main ํจ์์ ๋ชจ๋ ๊ธฐ๋ฅ์ ๊ตฌํํ ๊ฒฝ์ฐ ๊ฐ์ ์ฒ๋ฆฌํ๋ค. ๊ธฐ๋ฅ์ ์ผ๋ก ๋
๋ฆฝ๋๊ฑฐ๋ ๋ฐ๋ณต์ ์ผ๋ก ์ฌ์ฉ๋๋ ๊ธฐ๋ฅ์ ์ฌ์ฉ์ ํจ์๋ฅผ ์ ์ํด์ ๊ตฌํํ๋ค.
5. ๋ฌธ์ ์ค๋ช
์์ ๋ฉ๋ชจ๋ฆฌ ๋์ ํ ๋น์ ์๊ตฌํ๋ ๋ถ๋ถ์์ ๋ฐฐ์ด ์ฌ์ฉ์ ๊ฐ์ ๋๋ค.
6. ๋ช
์ํ ์๋ฌ ์ฒ๋ฆฌ ์ธ์๋ ๊ณ ๋ คํ์ง ์์๋ ๋๋ค.
7. ๋ฌธ์ ์ ์ถ๋ ฅ ํ์์ “=-=-” ์ถ๋ ฅ์ ์ ์ธํ๊ณ ์๋์ ์์๋ค๊ณผ ๋์ผํ๊ฒ ์์ฑํด ์ฃผ์ธ์.
[๊ตฌํ ๊ธฐ๋ฅ ์ค๋ช
]
0. ํ๋ก๊ทธ๋จ ์์ ์คํ ์ ๋ค์๊ณผ ๊ฐ์ด ๋ฉ์ธ ํ๋ฉด์ ์ถ๋ ฅ ํ, ์ฌ์ฉ์ ์
๋ ฅ์ ์ํด ๋๊ธฐํ๋ค.
์ด๋, ์ฌ์ฉ์๋ 3๊ฐ์ ๋ช
๋ น์ด(train, test, exit) ์ค ํ๋๋ฅผ ์
๋ ฅํ์ฌ ํด๋น ๊ธฐ๋ฅ์ ์ํํ๋ค. 3๊ฐ์ ๋ช
๋ น์ด ์ธ ์
๋ ฅ์ ์ ์ ํ ์๋ฌ๋ฉ์์ง ์ถ๋ ฅ ํ, Sleep() ํจ์๋ฅผ ์ฌ์ฉํ์ฌ 1์ด๊ฐ ๋๊ธฐํ
ํ, system(“cls”)๋ฅผ ์ฌ์ฉํ์ฌ ํ๋ฉด์ ์ง์ฐ๊ณ ๋ฉ์ธ ํ๋ฉด์ ๋ค์ ๋ณด์ฌ์ค๋ค.
(์์์ ๋ฐ์ค์ ์ฌ์ฉ์ ์
๋ ฅ์ ํด๋น)
-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
CSED 101
Assignment 3
Naive Bayesian Classifier for Spam Filtering
-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
Command: print
Error: Invalid input
๋ช
๋ น์ด ์
๋ ฅ ์, ๋์๋ฌธ์๋ฅผ ๊ตฌ๋ถํ์ง ์๊ณ ๋์ผํ ๋ช
๋ น์ด์ ๊ธฐ๋ฅ์ ์ํํ๋๋ก ํ๋ค. ์๋ฅผ
๋ค๋ฉด test, Test, TEST ๋ฑ์ ๋์ผํ ๊ธฐ๋ฅ์ ์ํํ๋ค.
1. Training
“train”์ ์
๋ ฅํ๋ฉด ๋ค์๊ณผ ๊ฐ์ด ํ์ผ ์ด๋ฆ์ ์
๋ ฅ ๋ฐ์, ํด๋น ํ์ผ์ ์ฝ๋๋ก ํ๋ค.
-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
CSED 101
Assignment 3
Naive Bayesian Classifier for Spam Filtering
-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
Command: train
File name: train.txt
ํ์ผ ์ด๋ฆ์ ์ ์ฅํ ๋ฐฐ์ด์ ์๋์ ๊ฐ์ด ์ ์ธํ๊ณ ์ฌ์ฉํ๋ค. ์ฐธ๊ณ ๋ก, ์ค์ ์ฑ์ ์์๋ 20์ ์ด๋ด์ ํ์ผ ์ด๋ฆ์ ์
๋ ฅํ์ฌ ํ
์คํธ ํ ์์ ์ด๋ค. ํ์ผ ์ด๋ฆ์๋ ๊ณต๋ฐฑ์ด ์๋ค๊ณ ๊ฐ์ ํ๋ค.
#define MAX_FILE_NAME 30 char filename[MAX_FILE_NAME];
ํ์ผ์ ๋ณธ ๊ณผ์ ์ ํจ๊ป ์ ๊ณต๋ train dataset ํฌ๋งท์ ๊ฐ์ง๋ค. ์๋ ์์๋ ์ ๊ณตํ train.txt ํ์ผ์ ๋ด์ฉ์ผ๋ก, Train dataset ํ์ผ์ ๋ชจ๋ line์ด ์๋์ ๊ฐ์ด [label] [text] ํํ๋ก ๊ตฌ์ฑ๋์ด ์๋ค( ๋ tab ๋ฌธ์๋ฅผ ์๋ฏธ).
train dataset์ ์์)
ham I will buy a new phone
spam buy our product, change your old phone
spam pay attention to our new product
ham let’s discuss about our homework
ham I think it is new one
๋ง์ฝ ์
๋ ฅ ๋ฐ์ ํ์ผ์ด ์กด์ฌํ์ง ์๋ ๊ฒฝ์ฐ, ๋ค์๊ณผ ๊ฐ์ด ์๋ฌ ๋ฉ์์ง๋ฅผ ์ถ๋ ฅํ๋ค. ํ์ฌ ์ ํ๋ฅผ 1์ด๊ฐ ์ ์ง ํ, ํ๋ฉด์ ์ง์ฐ๊ณ ๋ฉ์ธ ํ๋ฉด์ ๋ค์ ๋ณด์ฌ์ค๋ค.
-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
CSED 101
Assignment 3
Naive Bayesian Classifier for Spam Filtering
-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
Command: train
Error: File does not exist
[label]์ ham/spam ๋ ์ค ํ๋์ด๋ฉฐ, [text]์ ๊ธธ์ด๋ 1000์๋ฅผ ๋์ง ์๋๋ค. ํ๋ฅ ๊ฐ์ ๊ตฌ
ํ๊ธฐ ์ํด ๋จ์ด์ ๋ฑ์ฅ ๋น๋ ์๋ฅผ ๊ตฌํด์ผ ํ๋๋ฐ, ๋ค์์ ์ฒ๋ฆฌ ๊ณผ์ ์ด ํ์ํ๋ค.
– Problem 1์์ ๊ตฌํํ ํจ์๋ฅผ ์ฌ์ฉํ์ฌ [text] ๋ด ๋ชจ๋ ์ํ๋ฒณ์ ์๋ฌธ์ํ ํ๋ค.
โป mystring.h๋ฅผ includeํ์ฌ ์ฌ์ฉํด๋ ๋๊ณ , ํด๋น ์ฝ๋๋ง ๊ฐ์ ธ์์ ์ฌ์ฉํด๋ ๋๋ค.
– [text]์ ํฌํจ๋ ํน์ ๋ฌธ์, ์ฆ ์ํ๋ฒณ์ ์ ์ธํ ๋ชจ๋ ๋ฌธ์๋ ๊ณต๋ฐฑ์ผ๋ก ์นํํ๋ค.
์ ๊ณผ์ ์ด ๋๋๋ฉด, ๊ฐ [label]์ ๋ํ ๊ฐ ๋จ์ด์ ๋ฑ์ฅ ๋น๋ ์๋ฅผ ๊ตฌํ๋ค. (๋จ์ด-๋ฑ์ฅ ํ์) ์์ ์ ์ฅํ๊ธฐ ์ํด ๋ค์๊ณผ ๊ฐ์ ํํ๋ก ๋ฐฐ์ด์ ๊ตฌ์ฑํด์ผ ํ๋ค. ์ด๋ ๋จ์ด(char **words)์ ๋ฑ์ฅ ํ์(int *freq)๋ฅผ ์ ์ฅํ ๋ฐฐ์ด์ ๊ณ ์ ๋ฐฐ์ด์ ์ฌ์ฉํ์ง ์๊ณ , ๊ฐ๊ฐ ๋์ ํ ๋น ๋ฐ์ ์ ์ฑํ๋ค. ์ฆ ํ์ํ ๋ ๋ง๋ค ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๋์ ํ ๋น/์ฌํ ๋นํ๋ค. ์ฒ์ ํ ๋น ์์๋ ๋ฐฐ์ด์ ํฌ๊ธฐ ๋ฅผ 5๋งํผ ํ ๋นํ๊ณ , ๋ถ์กฑํ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ฌํ ๋น ํ๊ณ ์ ํ ๋, ํ์ฌ ํ ๋น๋ ํฌ๊ธฐ์ 2๋ฐฐ๋ฅผ ์ฌํ
๋นํ๋ค(ex. ํ์ฌ ํฌ๊ธฐ: 10 โ ์ฌํ ๋น ํ ํฌ๊ธฐ: 20).
๊ทธ๋ฆผ 1 ๋ฐ์ดํฐ ๊ตฌ์ฑ ๋ฐฉ๋ฒ์ ํ ์
๋จ์ด์ ๊ฒฝ์ฐ, ๊ฐ ๋จ์ด๋ง๋ค ํ์ํ ๊ธธ์ด(๋จ์ด์ ๋ฌธ์์ด ๊ธธ์ด + 1)๋งํผ ๋์ ํ ๋น ๋ฐ์ ํด๋น ๋จ์ด๋ฅผ ์ ์ฅํ๋๋ก ํ๋ค.
์๋๋ ๋ฌธ์์ด ๊ธธ์ด๋งํผ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๋์ ํ ๋นํ ์์ ์ด๋ค. ์
๋ ฅ ๋ฐ์ ๋ฌธ์์ด์ ๊ธธ์ด๋ ๋ฏธ๋ฆฌ ์ ์ ์๊ธฐ ๋๋ฌธ์ ์ถฉ๋ถํ ํฌ๊ธฐ์ ๋ฐฐ์ด(str)์ ์ ์ธํ์ฌ ๊ทธ ๊ณณ์ ์ ์ฅํ๊ณ , ์
๋ ฅ ๋ฐ์ ๋ฌธ์ ์ด์ ์ ์ฅํ ๊ธธ์ด๋งํผ๋ง ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๋์ ํ ๋นํ์ฌ ๋จ์ด๋ฅผ ์ ์ฅํ๋ค.
#define MAX_WORD_LEN 30
โฆ
char str[MAX_WORD_LEN]; // ๋ฌธ์์ด์ ์
๋ ฅ ๋ฐ์ ๋ฐฐ์ด char *p; // ๋์ ๋ฉ๋ชจ๋ฆฌ ํ ๋น์ ๋ฐ์ ํฌ์ธํฐ
scanf(“%s”, str); // “hello”๋ฅผ ์
๋ ฅ ๋ฐ์ ๊ฒฝ์ฐ, “hello”๋ฅผ ์ ์ฅํ๋ ๊ณต๊ฐ์
// ์ ์ธํ ๋๋จธ์ง ๋ฉ๋ชจ๋ฆฌ๊ฐ ๋ญ๋น
p = (char *)malloc(sizeof(char) * (strlen(str)+1)); // str์ ์ ์ฅ๋ ๋ฌธ์์ด์ ํฌ๊ธฐ์
// ๋์ผํ ๊ณต๊ฐ ํ ๋น
strcpy(p, str); // p๊ฐ ๊ฐ๋ฆฌํค๋ ๊ณต๊ฐ์ ๋ฌธ์์ด ๋ณต์ฌ ๊ธฐ๋ฅ ์ํ
โฆ
free(p); // p์ ๋ํ ์ฌ์ฉ์ด ๋ชจ๋ ๋๋๋ฉด, ๋ฉ๋ชจ๋ฆฌ ํ ๋น ํด์
๋จ์ด ๋ฑ์ฅ ๋น๋ ์๋ฅผ ๊ตฌํ๋ ๋ฐ ์์ด ๋ค์์ ์ฃผ์ ์ฌํญ์ ๋ฐ๋ฅธ๋ค.
– ๋จ์ด์ ๊ธธ์ด๊ฐ 1์ธ ๊ฒฝ์ฐ ๋น๋ ์๋ฅผ ์ธ์ง ์๋๋ค.
– ๋จ์ด์ ๊ธธ์ด๊ฐ 20์ ์ด๊ณผํ๋ ๊ฒฝ์ฐ ๋น๋ ์๋ฅผ ์ธ์ง ์๋๋ค.
– ์ ๋ ๊ฐ์ง ๊ฒฝ์ฐ๋ฅผ ์ ์ธํ ๋๋จธ์ง ๊ฒฝ์ฐ์๋ง ๋น๋ ์๋ฅผ ๊ตฌํ๋ค.
– ํ๋์ ๋ฉ์์ง ๋ด์ ๋จ์ด๊ฐ ์ฌ๋ฌ ๋ฒ ๋ฑ์ฅํ๋๋ผ๋, ๋ฑ์ฅ ์ฌ๋ถ๋ง์ ๊ณ ๋ คํ์ฌ ํ ๋ฒ๋ง
์ผ๋ค.
ํ์ต์ด ์ข
๋ฃ๋๋ฉด, ์ ๊ณผ์ ์ ํตํด ๊ตฌํ ํต๊ณ๋ฅผ ๋จ์ด ๊ธฐ์ค์ผ๋ก, ์ํ๋ฒณ์์ผ๋ก ์ ๋ ฌ ํ ์๋์ ์์์ฒ๋ผ ํ๋ฉด์ ์ถ๋ ฅํ๊ณ ํ์ผ๋ก ์ ์ฅํ๋ค. Training์ ์ํด ํ ๋นํ ๋ฉ๋ชจ๋ฆฌ๋ free() ํจ์ ๋ฅผ ํตํด ์ ์์ ์ผ๋ก ๋ฐํํ๋ค.
์ถ๋ ฅ ํ์ผ ์ด๋ฆ์ ‘stats.txt’๋ก ํ๋ฉฐ, ํ๋ฉด ๋๋ ํ์ผ์ ์ถ๋ ฅํ ๋ ๋ค์์ ์ฃผ์ ์ฌํญ์ ๋ฐ
๋ฅธ๋ค.
– ๊ฒฐ๊ณผ ์ถ๋ ฅ์ ์ฒซ๋ฒ์งธ ์ค์ train dataset์์ ํ์ตํ ์ ์ ๋ฉ์ผ(Ham)๊ณผ ์คํธ ๋ฉ์ผ์ ๊ฐ์๋ฅผ ์๋ ์์์ฒ๋ผ ๊ธฐ๋กํ๋ค.
– ๋ ๋ฒ์งธ ์ค๋ถํฐ ์ถ๋ ฅ ํ์์ [๋จ์ด],[Ham์ ๊ฒฝ์ฐ ๋ฑ์ฅ ๋น๋ ์],[Spam์ ๊ฒฝ์ฐ ๋ฑ์ฅ ๋น๋์] ๋ก ํ๋ค.
๋ง์ฝ ์ด๋ ์ชฝ์ ํด๋น ๋จ์ด๊ฐ ์๋ ๊ฒฝ์ฐ๋ผ๋ฉด 0์ผ๋ก ์ถ๋ ฅํ๋ค. ์๋ฅผ ๋ค์ด, “can”์ด๋ผ ๋ ๋จ์ด๊ฐ Ham์ ๊ฒฝ์ฐ 10๋ฒ ๋ฑ์ฅํ์ผ๋, Spam์ ๊ฒฝ์ฐ ๋ฑ์ฅํ์ง ์์๋ค๋ฉด,
“can,10,0″์ผ๋ก ์ถ๋ ฅํ๋ค.
์๋ ์์๋ ๋ฐ์ดํฐ ์
์ผ๋ก ์ ๊ณตํ ‘train.txt’ ํ์ผ์ ์ด์ฉํ์ฌ ํ์ต ํ, ๊ทธ ํต๊ณ๋ฅผ ํ๋ฉด์ ์ถ๋ ฅํ ์์์ด๋ค.
-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
CSED 101
Assignment 3
Naive Bayesian Classifier for Spam Filtering
-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
Command: train
File name: train.txt
After training…
Ham:3, Spam:2 ํต๊ณ ๊ฒฐ๊ณผ ์ถ๋ ฅ ์์ ๋ถ๋ถ about,1,0 attention,0,1 buy,1,1 change,0,1 discuss,1,0 homework,1,0 is,1,0 it,1,0 let,1,0 new,2,1 old,0,1 one,1,0 our,1,2 pay,0,1 phone,1,1 product,0,2 think,1,0 to,0,1 will,1,0 your,0,1
ํต๊ณ๋ฅผ ์ถ๋ ฅํ ํ, ์ฌ์ฉ์์ ์ ๋ ฅ์ ๊ธฐ๋ค๋ฆฐ๋ค. [Enter]ํค๋ฅผ ์ ๋ ฅํ๋ฉด ํ๋ฉด์ ์ง์ฐ๊ณ , ๋ฉ์ธ ํ๋ฉด์ ๋ค์ ๋ณด์ฌ์ค๋ค.
์๋ ์์๋ ๋ฐ์ดํฐ ์
์ผ๋ก ์ ๊ณตํ ‘train.txt’ ํ์ผ์ ์ด์ฉํ์ฌ ํ์ต ํ, ๊ทธ ํต๊ณ๋ฅผ ํ์ผ
(‘stats.txt’)๋ก ์ถ๋ ฅํ ์์์ด๋ค.
Ham:3, Spam:2 about,1,0 attention,0,1 buy,1,1 change,0,1 discuss,1,0 homework,1,0 is,1,0 it,1,0 let,1,0 new,2,1 old,0,1 one,1,0 our,1,2 pay,0,1 phone,1,1 product,0,2 think,1,0 to,0,1 will,1,0 your,0,1
2. Test
“test”๋ฅผ ์
๋ ฅํ๋ฉด ๋ค์๊ณผ ๊ฐ์ด ๋ฌธ์ฅ์ ์
๋ ฅ์ ๊ธฐ๋ค๋ฆฐ๋ค.
-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
CSED 101
Assignment 3
Naive Bayesian Classifier for Spam Filtering
-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
Command: test Enter a message:
๋ฌธ์ฅ์ ์
๋ ฅํ๋ฉด, ํ๋ก๊ทธ๋จ์ training ๋จ๊ณ์์ ๊ตฌํ ํต๊ณ(‘stats.txt’) ํ์ผ์ ๊ธฐ๋ฐ์ผ๋ก ํด๋น ๋ฌธ์ฅ์ด Spam์ธ์ง ์๋์ง๋ฅผ ํ๋ณํ๋ค. ๋จ, ๋ฌธ์ฅ์ ๊ธธ์ด๋ 1000์๋ฅผ ๋์ง ์๋๋ค.
๋ค์์ ์ฃผ์์ฌํญ์ ๋ฐ๋ฅธ๋ค.
– Training ๋จ๊ณ์์ ์ฒ๋ฆฌํ๋ ๊ฒ๊ณผ ๋ง์ฐฌ๊ฐ์ง๋ก, ๋ฌธ์ฅ ๋ด ํน์ ๋ฌธ์๋ฅผ ๋ชจ๋ ์ ๊ฑฐํ๋ฉฐ, ๋ชจ๋ ์ํ๋ฒณ์ ์๋ฌธ์ํ ํ๋ค.
– ๋ฌธ์ฅ ๋ด ๋จ์ด๊ฐ ํต๊ณ์ ํฌํจ๋์ง ์๋ ๊ฒฝ์ฐ, ํด๋น ๋จ์ด์ ๋ํ ํ๋ฅ ๊ฐ์ ๊ณ์ฐ์ ํฌ ํจํ์ง ์๋๋ค.
– ํต๊ณ์ ํฌํจ๋์์ผ๋ ๊ฐ์๊ฐ 0์ธ ๊ฒฝ์ฐ ํ๋ฅ ๊ฐ์ด 0์ด ๋๋ฏ๋ก, ์ด ๊ฒฝ์ฐ ํ๋ฅ ๊ฐ์
0.1/(Spam์ธ ๊ฒฝ์ฐ์ ์) ๋๋ 0.1/(Ham์ธ ๊ฒฝ์ฐ์ ์)๋ก ํ๋ค.
– test๋ training์ ๊ฑฐ์น์ง ์๊ณ ๋ฐ๋ก ์ํ๋ ์ ์๋ค. ์ด ๊ฒฝ์ฐ test์ ์ฌ์ฉํ ํ์ผ ์ ์ด๋ฆ์ โstats.txtโ์ด์ด์ผ ํ๊ณ , training ๋จ๊ณ์์ ์์ฑํ ํ์ผ๊ณผ ๋์ผํ ํฌ
๋งท์ ๊ฐ์ง๊ณ ์์ด์ผ ํ๋ค.
ํ์ผ์ ์ฝ๋ ๊ฒ์ ์ฌ์ฉ์๋ก๋ถํฐ ๋ฌธ์ฅ์ ์
๋ ฅ ๋ฐ๊ธฐ ์ ์ ์ํํ๋๋ก ํ๋ค. ํ์ผ์์ ์ ๋ณด๋ฅผ ๋ถ๋ฌ์ฌ ๋, ๊ณ ์ ํฌ๊ธฐ์ ๋ฐฐ์ด์ ์ ์ฅํ๋ ๊ฒ์ด ์๋๋ผ training ๋จ๊ณ์ ๋ง์ฐฌ๊ฐ์ง๋ก ํฌ์ธํฐ๋ฅผ ์ ์ธํ์ฌ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๋์ ์ผ๋ก ํ ๋น/์ฌํ ๋นํ์ฌ์ผ ํ๋ค. (์ด ๋, ํ์ํ๋ฉด 10์ง ๋ฌธ์์ด์ int ํ ์ ์ ๊ฐ์ผ๋ก ๋ณํํ๋ atoi()ํจ์ ์ฌ์ฉ ๊ฐ๋ฅ, ์ฌ์ฉ์ stdlib.h๋ฅผ ํฌํจ์ํฌ ๊ฒ)
๋ง์ฝ ์
๋ ฅ ๋ฐ์ ๋ฌธ์ฅ์ด
– Spam์ธ ๊ฒ์ผ๋ก ํ๋ณ๋๋ฉด: โThis message is SPAMโ์ ์ถ๋ ฅํ๋ค.
– Ham์ธ ๊ฒ์ผ๋ก ํ๋ณ๋๋ฉด: โThis message is HAMโ์ ์ถ๋ ฅํ๋ค.
Spam ํ๋ณ ๋ฉ์์ง์ ํจ๊ป ํต๊ณ ์ ๋ณด๋ฅผ ์ถ๋ ฅํ๋ค. test๋ฅผ ์ํด ํ ๋นํ ๋ฉ๋ชจ๋ฆฌ๋ free() ํจ์ ๋ฅผ ํตํด ์ ์์ ์ผ๋ก ๋ฐํํ๋ค.
์๋์ ์์๋ ์ ๊ณตํ train.txt์ ์์๋ฅผ ์ฌ์ฉํ์ฌ ๊ตฌํ stats.txt๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ๊ตฌํ ํต๊ณ ์ ๋ณด์ด๋ค(๊ณ์ฐ ๊ณผ์ ์ 4~5ํ์ด์ง์ [๋ฐฐ๊ฒฝ์ง์]๊ณผ ์์๋ฅผ ์ฐธ๊ณ ). ๊ณ์ฐ ๊ฐ์ ์์์ ์
์งธ ์๋ฆฌ
๊น์ง ์ถ๋ ฅํ๋ค. (ex. 0.1 โ 0.100, 0.3126 โ 0.313)
-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
CSED 101
Assignment 3
Naive Bayesian Classifier for Spam Filtering
-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
Command: test
Enter a message: buy our new phone
P(Ham) = 0.600, P(Spam) = 0.400
P(buy | Ham) = 0.333, P(buy | Spam) = 0.500
P(our | Ham) = 0.333, P(our | Spam) = 1.000
P(new | Ham) = 0.667, P(new | Spam) = 0.500
P(phone | Ham) = 0.333, P(phone | Spam) = 0.500
P( Ham | ‘buy our new phone’): 0.015
P(Spam | ‘buy our new phone’): 0.050
This message is SPAM
์ ํ๋ฉด์์ ์ฌ์ฉ์์ ์
๋ ฅ์ ๊ธฐ๋ค๋ฆฐ๋ค. [Enter]ํค๋ฅผ ์
๋ ฅํ๋ฉด ํ๋ฉด์ ์ง์ด ํ ๋ค์ ๋ฉ์ธ ํ
๋ฉด์ ๋ณด์ฌ์ค๋ค.
๋ง์ฝ training์ ํ์ง ์์ ์ํ์์, test ๋ช
๋ น์ ์
๋ ฅํ์์ผ๋ โstats.txtโ ํ์ผ์ด ์๋ ๊ฒฝ์ฐ, ๋ค์๊ณผ ๊ฐ์ด ์๋ฌ ๋ฉ์์ง๋ฅผ ์ถ๋ ฅํ๋ค. train์์์ ๋ง์ฐฌ๊ฐ์ง๋ก 1์ด ๊ฐ ๋๊ธฐํ ํ, ํ ๋ฉด์ ์ง์ด ๋ค ๋ค์ ๋ฉ์ธ ํ๋ฉด์ ๋ณด์ฌ์ค๋ค.
-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
CSED 101
Assignment 3
Naive Bayesian Classifier for Spam Filtering
-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
Command: test
Error: File does not exist
3. ํ๋ก๊ทธ๋จ ์ข
๋ฃ
โexitโ๋ฅผ ์
๋ ฅํ๋ฉด ํ๋ก๊ทธ๋จ์ ์ข
๋ฃํ๋ค. ์ด ๋ ๋์ ์ผ๋ก ํ ๋น๋ ๋ฉ๋ชจ๋ฆฌ๋ free() ํจ์๋ฅผ ํตํด ์ ์์ ์ผ๋ก ๋ฐํํ์ฌ์ผ ํ๋ค.
โป ๋ค๋ฅธ training data๋ฅผ ์ฌ์ฉํ ์
Training data)
ham are you free tomorrow? why don’t we go ice rink spam U R entitled to Update to the latest color mobiles with camera for Free!
ham i see ๐ see you later spam You have won a 1 week FREE membership in our $100,000 Prize!
spam The New Jersey Devils and the Detroit Red Wings play Ice Hockey. Correct or Incorrect? Reply END SPTV ham did you buy notebooks? If not i will buy them spam you are awarded with a $1500 Bonus Prize, call 09066364589
stats.txt)
Ham: 3, Spam: 4 and,0,1 are,1,1 awarded,0,1 bonus,0,1 buy,1,0 call,0,1 camera,0,1 color,0,1 correct,0,1 detroit,0,1 devils,0,1 did,1,0 don,1,0 end,0,1 entitled,0,1 for,0,1 free,1,2 go,1,0 have,0,1 hockey,0,1 ice,1,1 if,1,0 in,0,1 incorrect,0,1 jersey,0,1 later,1,0 latest,0,1 membership,0,1 mobiles,0,1 new,0,1 not,1,0 notebooks,1,0 or,0,1 our,0,1 play,0,1 prize,0,2 red,0,1 reply,0,1 rink,1,0 see,1,0 sptv,0,1 the,0,2 them,1,0 to,0,1 tomorrow,1,0 update,0,1 we,1,0 week,0,1 why,1,0 will,1,0 wings,0,1 with,0,2 won,0,1 you,3,2
Test ๊ฒฐ๊ณผ)
-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
CSED 101
Assignment 3
Naรฏve Bayesian Classifier for Spam Filtering
-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
Command: test
Enter a message: you got a $1000 lottery! Call us ๐
P(Ham) = 0.429, P(Spam) = 0.571
P(you | Ham) = 1.000, P(you | Spam) = 0.500
P(call | Ham) = 0.033, P(call | Spam) = 0.250
P( Ham | ‘you got a $1000 lottery! Call us :)’): 0.014
P(Spam | ‘you got a $1000 lottery! Call us :)’): 0.071
This message is SPAM
[์ฐธ๊ณ ] ๊ณผ์ ์ํ ์ ๋ค์ ๋ด์ฉ์ ์ฐธ๊ณ ํ์ธ์.
1. ๊ณต๋ฐฑ์ ํฌํจํ ๋ฌธ์์ด ์
๋ ฅ ๊ณต๋ฐฑ์ด ์๋ ๋ฌธ์์ด์ ์
๋ ฅ ๋ฐ์ ๋ fgets() ํจ์๋ฅผ ์ฌ์ฉํ๋ค.
char *fgets(char *str, int num, FILE *stream)
: stream์์ ๋ฌธ์์ด์ ์ต๋ num-1๊ฐ๋งํผ ๋ฐ์์ str์ด ๊ฐ๋ฆฌํค๋ ๋ฉ๋ชจ๋ฆฌ์ ์ ์ฅํ๋ค. ์ด ํฌํจ๋ ๊ฒฝ์ฐ ๊ทธ ๋ฌธ์์ด์ ๊ธธ์ด๊ฐ num๋ณด๋ค ์๋๋ผ๋ ๋ ์ฝ์ง ์๋๋ค. stdio.h์ ํฌํจ.
Ex)
char str[10];
fgets(str, 10, stdin); // stdin์ ํค๋ณด๋๋ก๋ถํฐ ์
๋ ฅ ๋ฐ๋ ๊ฒ์ ์๋ฏธ printf(“%s “, str); // ์
๋ ฅ ๋ฐ์ ๋ฌธ์์ด์ ์ถ๋ ฅ
FILE *fp = fopen(“file.txt”, “r”);
fgets(str, 10, fp); // ํ์ผ์์๋ถํฐ ํ ๋ผ์ธ์ ์ฝ์ printf(“%s “, str); // ํ์ผ๋ก๋ถํฐ ์ฝ์ ๋ฌธ์์ด์ ์ถ๋ ฅ
2. ๋ฌธ์์ด ๋ถํ ํน์ ๋ฌธ์๋ฅผ ๊ธฐ์ค์ผ๋ก ๋ฌธ์์ด์ ๋ถํ ํ๊ณ ์ ํ ๋, strtok() ํจ์๋ฅผ ์ฌ์ฉํ๋ค.
char *strtok(char *str, const char *delim)
: ๋ฌธ์์ด str์ delim์ ํฌํจ๋ ๋ฌธ์๋ค๋ก ๋ถ๋ฆฌ(tokenize)ํ๋ค. ์๋ฅผ ๋ค์ด “Hello/world!”๋ผ ๋ ๋ฌธ์์ด์ ๋ํด “/”๋ฅผ ๊ธฐ์ค์ผ๋ก ๋ถ๋ฆฌํ๋ฉด “Hello”์ “world!”๋ก ๋๋์ด์ง๋ค. ์ด ๋ ๊ธฐ์ค์ด ๋๋ ๋ฌธ์(“/”)๋ฅผ delimiter, ๋๋์ด์ง ๋ฌธ์๋ค์ token์ด๋ผ๊ณ ํ๋ค. string.h์ ํฌํจ.
Ex)
char str[100]; char *token1, *token2, *token3; strcpy(str, “Tokenization/Test/String”); token1 = strtok(str, “/”); // token1 = “Tokenization” token2 = strtok(NULL, “/”); // token2 = “Test” token3 = strtok(NULL, “/”); // token3 = “String”




Reviews
There are no reviews yet.