์ด๋์ ๋ ์งํ๋๋ฉด ์ฌ๋ฆฌ๋ ์์ค
๋ฒ์ ์ ๋ณด ¶
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)