418463_2554_first+(homework+01)

=การบ้านครั้งที่ 1 : เขียนโปรแกรมหา concordance ในคลังประโยคภาษาไทย=

นิสิตสามารถดาวน์โหลดคลังประโยคได้ที่ [|news_cp874.zip]

คำอธิบาย
เขียนโปรแกรมชื่อ concordance.py ที่รับคำสั่งจาก command line โดยที่พารามิเตอร์ที่จะรับเข้าไปมีดังนี้ code python concordance.py [corpus] [mode] [window size] [input file] code
 * corpus คือ ชื่อไฟล์ของคลังประโยคที่ต้องการหา concordance
 * mode คือ ลักษณะการแสดงผลของผลลัพธ์
 * 0 หมายถึง แสดงเฉพาะข้อมูลของคำ (POS)
 * 1 หมายถึง แสดงเฉพาะคำ
 * 2 หมายถึง แสดงทั้งคำและข้อมูลของคำ
 * window size คือ จำนวนคำในบริบททั้งสองข้าง
 * input file คือ ไฟล์ที่บรรจุกลุ่มของคำที่ต้องการหา
 * กลุ่มของคำ อาจเป็นคำเดียวๆ ข้อมูลของคำเดียวๆ หรือ คำพร้อมข้อมูลของคำ ตัวอย่างเช่น
 * ฉัน กิน/VT NCN
 * VT NCN
 * ยิง NCN
 * การเขียนข้อมูลคำจะใช้ตัวอักษรภาษาอังกฤษตัวพิมพ์ใหญ่ทั้งหมด และ ในกรณีเขียนคำพร้อมข้อมูลของคำจะใช้ความหมาย / ในคั้นระหว่างคำและข้อมูลของคำ
 * ใน input file จะประกอบด้วยกลุ่มของคำเพียงหนึ่งบรรทัดเท่านั้น

โดยให้พิมพ์ผลลัพธ์ของโปรแกรมออกที่ไฟล์ชื่อ output.txt โดยที่ผลลัพธ์ต้องถูกจัดรูปแบบให้ถูกต้องเหมือนในตัวอย่างด้านหลัง

ตัวอย่างการทำงาน
ให้ input.txt มีข้อมูลภายในคือ code ยิง ncn code

ถ้าพิมพ์คำสั่ง code python concordance.py news_cp874 0 4 input.txt code

ผลลัพธ์ที่ได้คือไฟล์ output.txt ที่มีข้อมูลคือ code BLK PREP NPN PUNC|ยิง NCN|VT NCN NCN VI NCN NPN PREP PREF1|ยิง NCN|NCN BLK ADJ PREP CL NCN BLK NCN|ยิง NCN|NPN BLK NPN BLK VT PREP NCN CONJ|ยิง NCN|VT VPOST NCN BLK CONJ VT NCN VPOST|ยิง NCN|VI PINT PUNC BLK code

ถ้าพิมพ์คำสั่ง code python concordance.py news_cp874 1 4 input.txt code

ผลลัพธ์ที่ได้คือไฟล์ output.txt ที่มีข้อมูลคือ code _ ของ สหรัฐ ฯ|ยิง NCN|เข้าใส่ หน่วย ขีปนาวุธ เคลื่อนที่ ปืน แก๊ป ใน การ|ยิง NCN|ขนาด _ เล็ก ตาม รายการ อาทิ _ เครื่อง|ยิง NCN|อาร์พีจี. _ เอ็ม16 _ ลง จาก รถยนต์ และ|ยิง NCN|ขู่ ขึ้น ฟ้า _ เพื่อ จ้าง คน มา|ยิง NCN|จริง หรือไม่ \\\\\\\" _ code

ถ้าพิมพ์คำสั่ง code python concordance.py news_cp874 2 4 input.txt code

ผลลัพธ์ที่ได้คือไฟล์ output.txt ที่มีข้อมูลคือ code _/BLK ของ/PREP สหรัฐ/NPN ฯ/PUNC|ยิง NCN|เข้าใส่/VT หน่วย/NCN ขีปนาวุธ/NCN เคลื่อนที่/VI ปืน/NCN แก๊ป/NPN ใน/PREP การ/PREF1|ยิง NCN|ขนาด/NCN _/BLK เล็ก/ADJ ตาม/PREP รายการ/CL อาทิ/NCN _/BLK เครื่อง/NCN|ยิง NCN|อาร์พีจี./NPN _/BLK เอ็ม16/NPN _/BLK ลง/VT จาก/PREP รถยนต์/NCN และ/CONJ|ยิง NCN|ขู่/VT ขึ้น/VPOST ฟ้า/NCN _/BLK เพื่อ/CONJ จ้าง/VT คน/NCN มา/VPOST|ยิง NCN|จริง/VI หรือไม่/PINT \\\\\\\"/PUNC _/BLK code

การรับตัวแปรจาก command line
code import sys

corpus_file = sys.argv[1] # the first argument from command line mode = sys.argv[2]       # the second argument form command line window_size = sys.argv[3] # the third argument from command line input_file = sys.argv[4] # the fourth argument from command line code

การอ่านไฟล์
code fp = open(input_file) text = fp.read lines = fp.readlines fp.close code

การเขียนไฟล์
code fp = open(output_file,"w") fp.write("hello\n") fp.write("I am a boy.\n") fp.close code

การอ่านไฟล์โดยใช้ NLTK (แนะนำให้ใช้)
code from nltk.corpus.reader.tagged import TaggedCorpusReader

reader = TaggedCorpusReader('.','news_cp874') for word, tag in reader.tagged_words('news_cp874'): print word, tag code

ถ้าต้องการเขียนภาษาไทยลงในไฟล์โปรแกรม (ใส่ว่าบรรทัดแรกสุดของไฟล์)
code code
 * 1) -*- coding:utf8 -*-

**การส่งการบ้าน** code
 * ให้เขียน comment เป็น ชื่อ นามสกุล และ รหัสนิสิตไว้ที่หัวโปรแกรม ตัวอย่างเช่น
 * 1) -*- coding:utf8 -*-
 * 2) !/usr/bin/python


 * 1) Author : Sutee Sudprasert 5212345678

code > >
 * 1) Here is your code. ###
 * กำหนดส่งภายในวันที่ 29 มิถุนายน 2554 ก่อนเที่ยงคืน หากส่งล่าช้ากว่ากำหนดจะถูกตัดคะแนนวันละ 0.5 คะแนน (คะแนนเต็ม 5 คะแนน)
 * ตั้งชื่อไฟล์โปรแกรมว่า concordance.py และให้ใส่ไว้ในโฟร์เดอร์ชื่อเดียวกับรหัสนิสิตของตัวเองแล้วตามด้วย _hw01
 * ตัวอย่างเช่น รหัสนิสิตคือ 5212345678 ให้ตั้งชื่อโฟร์เดอร์ว่า 5212345678_hw01
 * บีบอัดโฟร์เดอร์ด้วยวิธีการ zip ( **ห้ามใช้วิธีการอื่นโดยเด็ดขาด เช่น rar หรือ 7z** ) โดยใช้ชื่ีอไฟล์เป็นชื่อโฟร์เดอร์แล้วตาม .zip เช่น 5212345678_hw01.zip
 * จากนั้นส่งไฟล์มาที่ fscistsu@ku.ac.thโดยใช้ชื่อว่า NLP Homework 01 (รหัสนิสิตของตัวเอง) ไม่ต้องเขียนอะไรในตัวจดหมาย
 * ตัวอย่างเช่น รหัสนิสิตคือ 5212345678 ให้ตั้งชื่อจดหมายว่า Homework 01 (5212345678)
 * หากนิสิตไม่ปฏิบัติการวิธีการที่กำหนด อาจารย์มีสิทธิ์ที่จะ **หักคะแนนหรือไม่ตรวจการบ้านของนิสิต**