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


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

คำอธิบาย


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

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

ตัวอย่างการทำงาน


ให้ input.txt มีข้อมูลภายในคือ
ยิง ncn

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

ผลลัพธ์ที่ได้คือไฟล์ output.txt ที่มีข้อมูลคือ
 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

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

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

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

ผลลัพธ์ที่ได้คือไฟล์ output.txt ที่มีข้อมูลคือ
   _/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

คำสั่งใน Python ที่(อาจ)จำเป็นต้องใช้


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

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

การอ่านไฟล์

fp = open(input_file)
text = fp.read()
lines = fp.readlines()
fp.close()

การเขียนไฟล์

fp = open(output_file,"w")
fp.write("hello\n")
fp.write("I am a boy.\n")
fp.close()

การอ่านไฟล์โดยใช้ NLTK (แนะนำให้ใช้)

from nltk.corpus.reader.tagged import TaggedCorpusReader
 
reader = TaggedCorpusReader('.','news_cp874')
for word, tag in reader.tagged_words('news_cp874'):
    print word, tag

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

#-*- coding:utf8 -*-

การส่งการบ้าน
  • ให้เขียน comment เป็น ชื่อ นามสกุล และ รหัสนิสิตไว้ที่หัวโปรแกรม ตัวอย่างเช่น
#-*- coding:utf8 -*-
#!/usr/bin/python
 
# Author : Sutee Sudprasert 5212345678
 
### 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)
  • หากนิสิตไม่ปฏิบัติการวิธีการที่กำหนด อาจารย์มีสิทธิ์ที่จะหักคะแนนหรือไม่ตรวจการบ้านของนิสิต