์ด๋์ ๋ ์งํ๋๋ฉด ์ฌ๋ฆฌ๋ ์์ค
๋ฒ์ ์ ๋ณด ¶
1์ 21์ผ ¶
๋ถ์๊ธฐ(Parser)๊ฐ ์ฌ์ ์ ๋ณด๊ณ ๋์ฌ๋ฅผ ์ฐพ๋๋ค.
VP๋ฅผ ์ฐพ๋๋ค.
VP๋ฅผ ์ฐพ๋๋ค.
1์ 20์ผ ¶
๋จ์ด๋ฅผ ์ด๊ทผ์ ๋ฐ๋ผ ์ ์ฅํ๋ ์ฌ์ ์ด ์๋ค. ๊ทธ ์ฌ์ ์์ ์ผ๋ธ๊ผด(๊ธฐ๋ณธํ)์ ๊ฒ์ํด์ ๋์ฌ๋ฅผ ์ฐพ์๋ธ๋ค.
์ด๊ทผ์ด ๋ณํ๋ ๋์ฌ๋ ์กฐํฉํ์ผ๋ก ๋ณํํด ์ผ๋ธ๊ผด์ ์ฐพ๋๋ค.
์ด๊ทผ์ด ๋ณํ๋ ๋์ฌ๋ ์กฐํฉํ์ผ๋ก ๋ณํํด ์ผ๋ธ๊ผด์ ์ฐพ๋๋ค.
ToDo ¶
AllTest์์ ํด๋ ์์ ์๋ ๋ชจ๋ ํ
์คํธ ์ผ์ด์ค๋ฅผ ์๋์ผ๋ก ์ฐพ์์ ์คํํ๊ธฐ
์์ค ¶
~cpp
# EazyWord.py
# coding: euc-kr
class EazyWord:
def __init__( self ):
self.cases = []
def setRoot( self, aRoot ):
self.root = aRoot
def addCase( self, aCase ):
self.cases.append(aCase)
def getCases( self ):
return tuple(self.cases)
def getRoot( self ):
return self.root
~cpp
# EazyWordTest.py
# coding: euc-kr
import unittest
from EazyWord import EazyWord
class EazyWordTestCase(unittest.TestCase):
def setUp(self):
self.word = EazyWord()
self.word.setRoot('๋จน')
self.word.addCase('AOV')
def testAddCase(self):
self.assertEquals( ('AOV',), self.word.getCases() )
if __name__ == '__main__':
unittest.main()
~cpp
# EazyDic.py
# coding: euc-kr
class EazyDic:
def __init__(self):
self.words = {}
def addWord( self, aWord):
self.words[aWord.getRoot()] = aWord.getCases()
def getRoots( self ):
return self.words.keys()
~cpp
# EazyDicTest.py
# coding: euc-kr
import unittest
from EazyWord import EazyWord
from EazyDic import EazyDic
class EazyDicTestCase(unittest.TestCase):
def setUp(self):
self.parser = EazyParser()
self.dic = EazyDic()
self.muk = EazyWord()
self.muk.setRoot('๋จน')
self.muk.addCase('AOV')
self.ga = EazyWord()
self.ga.setRoot('๊ฐ')
self.ga.addCase('ALV')
if __name__ == '__main__':
unittest.main()
~cpp
# EazyParser.py
# coding: euc-kr
import hangul
import string
u = lambda x: unicode(x, "euc-kr")
class EazyParser:
def updateDictionary(self, aDict):
self.dic = aDict
def findFundermentalForm(self, aWord):
johabWord = hangul.disjoint(u(aWord))
roots = self.dic.getRoots()
for each in roots:
if hangul.disjoint(u(each)) in johabWord:
return each + '๋ค'
def findVerb(self, aSentence):
lastToken = aSentence.split()[-1]
return self.findFundermentalForm(
self.removeMark(lastToken) )
def removeMark(self, aPhrase):
for mark in string.punctuation:
if mark in aPhrase:
aPhrase = aPhrase.replace(mark,'')
return aPhrase
def findVP(self, aSentence):
NP = self.findNP(aSentence)
temp = aSentence.split(' ')
temp.remove(NP)
return string.join( temp, ' ')
def findNP( self, aSentence ):
return aSentence.split(' ')[0]
~cpp
# EazyParserTest.py
# coding: euc-kr
import unittest
from EazyWord import EazyWord
from EazyDic import EazyDic
from EazyParser import EazyParser
class EazyParserTestCase(unittest.TestCase):
def setUp(self):
self.parser = EazyParser()
self.dic = EazyDic()
self.muk = EazyWord()
self.muk.setRoot('๋จน')
self.muk.addCase('AOV')
self.dic.addWord(self.muk)
self.parser.updateDictionary( self.dic )
self.ga = EazyWord()
self.ga.setRoot('๊ฐ')
self.ga.addCase('ALV')
def testFindFundermentalForm(self):
self.assertEquals( '๋จน๋ค', self.parser.findFundermentalForm('๋จน๋๋ค') )
self.dic.addWord(self.ga)
self.parser.updateDictionary( self.dic )
self.assertEquals( '๊ฐ๋ค', self.parser.findFundermentalForm('๊ฐ๋ค') )
def testFindVerb(self):
self.assertEquals( '๋จน๋ค', self.parser.findVerb('๋๋ ๋ฐฅ์ ๋จน๋๋ค.') )
self.assertEquals( None, self.parser.findVerb('๋๋ ํ๊ต์ ๊ฐ๋ค.') )
def testFindVP(self):
self.assertEquals( '๋ฐฅ์ ๋จน๋๋ค.', self.parser.findVP('๋๋ ๋ฐฅ์ ๋จน๋๋ค.') )
def testFindNP(self):
self.assertEquals( '๋ฐฅ์', self.parser.findNP( '๋ฐฅ์ ๋ด๊ฐ ๋จน๋๋ค.' ) )
if __name__ == '__main__':
unittest.main()
~cpp
# AllTest.py
from EazyParserTest import *
from EazyWordTest import *
from EazyDicTest import *
import unittest
if __name__=='__main__':
suite = unittest.TestSuite()
suite.addTest(unittest.makeSuite(EazyParserTestCase, 'test'))
suite.addTest(unittest.makeSuite(EazyWordTestCase, 'test'))
suite.addTest(unittest.makeSuite(EazyDicTestCase, 'test'))
runner = unittest.TextTestRunner()
runner.run (suite)










