<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet href="/style/rss/style.xsl" type="text/xsl" media="screen"?>
<rss version="2.0">
	<channel>
		<title>codes by naragoing</title>
		<link>http://naragoing.tistory.com/</link>
		<description></description>
		<language>ko</language>
		<pubDate>Tue,  5 Aug 2008 17:00:39 +0900</pubDate>
		<generator>Tistory 1.1</generator>
		<item>
			<title>가까운 미래</title>
			<link>http://naragoing.tistory.com/20</link>
			<description>&amp;nbsp;지난 주말이 지나면서 이제 군생활도 200일이 채 남지 않게 되었다. 뒤돌아 보면 아주 짧은 시간 같지만 아직도 앞을보면 한숨만 나온다. 할일도 많고 하고싶은일도 많아서 나에게 고통과 시련(꼬이는 군생활)이 닥치지 않는다면 잘 지나갈 것 같다.&lt;br /&gt;&lt;br /&gt;&amp;nbsp;의미없는 포스팅이 될 거 같은 기분이다. 어차피 찾아오는 사람도 별로 없기때문에 지극히 개인적인 공간으로 유지되고 있다. 가끔 나도 유명한 블로거를 꿈꾸지만 게으른 성격이나 지극히 좁은 지식을 가진터라 인기를 끈다는건 힘든일 같다.&lt;br /&gt;&lt;br /&gt;&amp;nbsp;간단히 정리해보면 10월초에 교내 소공전이 있다. 일과중 오후시간에는 구현, 일과후 저녁시간에 두시간쯤 관련공부나 설계에 투자를 하고 있다. 8월말이면 거의 구현될 예정이고 9월에는 아이디어를 집약해서 퍼포먼스의 향상을 가져올 생각이다. &lt;br /&gt;&lt;br /&gt;&amp;nbsp;또 중요한 것이 영어다. 영어공부는 나에게있어 꼭 해야할 일이며 재미를 붙히는 중이다. 일단 듣기와 어휘위주의 공부를 진행할 생각이다. 듣기 스크립트를 읽을때나 어휘에서 관련문장을 읽을때 어차피 독해감은 유지되는 것이고 전역후 학원도 다닐 생각이다. &lt;br /&gt;&lt;br /&gt;&amp;nbsp;만약 가능하다면 12월에 삼성멤버쉽에 지원할 생각이다. 일단 복학후 잘곳이 될 수도 있으며 많은 것을 배울 수도 있을것이다. 작품은 현재 소공전 준비작품을 수정해서 제출할 생각이다. 지금으로서는 가장 간절한 항목이다.&lt;br /&gt;&lt;br /&gt;&amp;nbsp;마지막으로는 학사논문을 작성하는 것이다. 졸업이 목표가 아니라 이력서에 한줄 남길것도 되고 석사과정을 할지말지 결정도 해주기 때문이다. 직접 교수님과 얘기도 해보고 일도해보면서 정말 할 만한 것인지 알수도 잇고 많은 것을 배울 수도 있을 것 같다.</description>
			<category>생각</category>
			<author>나라고잉</author>
			<guid>http://naragoing.tistory.com/20</guid>
			<comments>http://naragoing.tistory.com/20#entry20comment</comments>
			<pubDate>Tue,  5 Aug 2008 16:58:01 +0900</pubDate>
		</item>
		<item>
			<title>영어공부</title>
			<link>http://naragoing.tistory.com/19</link>
			<description>&amp;nbsp;난 깡시골촌놈이다. 남들은 초등학교때부터 영어공부 시작했지만 난 초등학교 4학년때 영어노래 하나를 한글로 고쳐서 강당에서 사람들 모아놓고 부른게 다다. 알파벳은 중학교 1학년 첫 영어시간 끝난뒤 숙제하면서 처음알기시작했고 그때부터 이제껏 학원한번 다닌적이 없다.&lt;br /&gt;&lt;br /&gt;&amp;nbsp;처음영어공부를 시작한건 고등학교 1학년때 모의고사 이후이며 그당시 내기억으로는 80점만점에 50점정도 맞었던거 같다. 원래 몰아치는 공부를 좋아했던터라 세달동안 몰아쳤고 독해위주로 공부를해서 77점까지 올렸다. 영어를 잘한다는게 아니라 그만큼 수능영어가 독해위주였다는거다.&lt;br /&gt;&lt;br /&gt;&amp;nbsp;그 이후로 모의고사때 70점 아래로 가는일은 없었고 공부의 필요성의 그렇게 느끼지 않았고 고2때 학교에서 돈대줘서 토익을 한번 친적이 있는데 토익이 뭔지도 모르고 쳤는지 사백점도 안나온 성적이었지만 그다지 영어에 대해서 고민한적이 없다. 고민했어야 했는데 말이다.&lt;br /&gt;&lt;br /&gt;&amp;nbsp;아무튼 대학교와서 영어공부라고는 한번도 안한터라 그때 그실력이고 오히려 더 못할거다. 어휘는 고작 중학교수준도 될려나 모르겠고 듣기는 귀가 바보가 된지 오래다. 독해야 원래 중요시 했고 원서도 꾸준히 읽어서 어느정도 유지는 하고 있는데 평균이하다.&lt;br /&gt;&lt;br /&gt;&lt;STRONG&gt;&lt;FONT size=5&gt;&amp;nbsp;나, 영어 어떡하지 !?&lt;/FONT&gt;&lt;/STRONG&gt;</description>
			<category>생각</category>
			<author>나라고잉</author>
			<guid>http://naragoing.tistory.com/19</guid>
			<comments>http://naragoing.tistory.com/19#entry19comment</comments>
			<pubDate>Thu, 31 Jul 2008 08:25:55 +0900</pubDate>
		</item>
		<item>
			<title>D+ 500</title>
			<link>http://naragoing.tistory.com/18</link>
			<description>&lt;P&gt;&amp;nbsp;2007년 3월 12일 14시. 눈물을 흘리는 어머니와 슬퍼하는 가족들을 뒤로한채 난 논산 육군훈련소 연병장으로 뛰기 시작했고 어느새 딱 500일이 지났다. 3학년 1학기 과정을 마친상태였기 때문에 `군대포멧` 이라는 말을 너무무서워서 훈련소에서 시간나면 `Hello World`를 찍어냈던 기억이다.&lt;br /&gt;&amp;nbsp;&lt;br /&gt;&amp;nbsp;아무튼 500일이 지났고 사회로의 압박도 그만큼 커지기 시작했다. 일단 가까운 교내소공전이 문제고 멀게는 취업이 문제다. 소공전 주제로 학사논문도 하나 썻으면 좋겠고 인맥과 경험을 위해 삼성 멤버쉽까지도 우려먹을 생각이다. &lt;br /&gt;&lt;br /&gt;&amp;nbsp;문제는 영어인데 도저히 방법을 모르겠다. 주위에 영어잘한다는 사람이 많은데 전혀 도움은 되지 않고 절망감만 나에게 안겨줄 뿐이다. 일단 듣기와 어휘위주로 시작할 생각인데 잘 되려나 모르겠다. 끊임없는 생각과 놀라운 집중력이 필요한 시기같다.&lt;/P&gt;</description>
			<category>생각</category>
			<author>나라고잉</author>
			<guid>http://naragoing.tistory.com/18</guid>
			<comments>http://naragoing.tistory.com/18#entry18comment</comments>
			<pubDate>Thu, 24 Jul 2008 16:32:51 +0900</pubDate>
		</item>
		<item>
			<title>데이터 셋</title>
			<link>http://naragoing.tistory.com/17</link>
			<description>&lt;P&gt;&amp;nbsp;악플판별 시스템을 만들면서 데이터셋의 중요성을 많이 느끼고 있다. 처음에는 구현하는 부분이 투자하는 시간의 80% 정도 될 줄 알았는데 막상 해보니 구현은 20% 고 데이터셋 을 가공하는 것이 80% 였다. 파이선 자체가 개발속도가 빠르기 때문일 수도 있지만 중요모듈의 구현이 끝난 지금에서 뒤돌아보면 데이터 셋을 가공하는게 80% 였다.&lt;br /&gt;&lt;br /&gt;&amp;nbsp;만들기 시작하기전에 가장처음 생각했던데로 했을때 어큐러시가 65% 정도 나왔다. 찍어도 50 %인데 이방법이 틀렸나 고민도 많이 했었고 얼굴한번 뵌적도 없는 교수님한테 메일을 보내기도 했었다. 가장 일반적인 방법이기에 틀릴 것이 없을거라 생각했고 하루하루 지나면서 그 이유를 알기 시작했다. 데이터 셋에서 자질을 뽑아내는 방법이 너무 일반적이었다.&lt;br /&gt;&lt;br /&gt;&amp;nbsp;그래서 단어의 빈도수 외에 다른 자질이 뭐가 있을까 생각해봤고 가장 처음 생각난게 확률 자질이었다. 각단어가 출현하였을 때 악플 혹은 선플일 확률도 쉽게 구할 수 있었고 빈도수 외에 자질로서 아무리 생각해도 좋았다. 빈도수에 확률을 곱하는 것으로 해보았고 현재 테스트 셋에서 어큐러시가 80.01% 가 나왔다.&lt;br /&gt;&lt;br /&gt;&amp;nbsp;물론 데이터셋 자체가 인정받은 것도 아니고 내가 무작위로 선택한 것이기 때문에 믿을 수 없는 값이지만 자질 선택의 중요성을 나에게 일깨워 줬고 앞으로의 개발방향을 알려주었다. 또하나 생각난것이 트레인 셋을 자체를 만들때에도 정말 필요한 데이터만 뽑는 방법이 시스템의 향상을 가져올 것 같은데 이건 더 생각해봐야겠다.&lt;/P&gt;</description>
			<category>생각</category>
			<author>나라고잉</author>
			<guid>http://naragoing.tistory.com/17</guid>
			<comments>http://naragoing.tistory.com/17#entry17comment</comments>
			<pubDate>Sun, 20 Jul 2008 19:47:51 +0900</pubDate>
		</item>
		<item>
			<title>악플판별 시스템의 설계 및 구현 - 구현 1</title>
			<link>http://naragoing.tistory.com/16</link>
			<description>&lt;FONT size=4&gt;&lt;STRONG&gt;classifier.py&lt;/STRONG&gt;&lt;/FONT&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;설계부분의 classifier 모듈을 구현하였다. classifier 라는 클래스가 하나 있으며 그 클래스를 통해 댓글이 선플인지 악플인지 판단한다. &amp;nbsp;클래스 외부에서는 classify라는 멤버함수에 덧글을 넘겨 호출하면 숫자를 하나 리턴받는데 그 수가 양수면 선플이고 그렇지 않으면 악플이다.&lt;br /&gt;
&lt;BLOCKQUOTE&gt;
&lt;P&gt;def classify(self, comment):&lt;br /&gt;&amp;nbsp; # build wordiddic -&amp;gt; { wordid:frequency, wordid:frequency, ... }&lt;br /&gt;&amp;nbsp; worddic = getterms(comment)&lt;br /&gt;&amp;nbsp; words = worddic.keys()&lt;br /&gt;&amp;nbsp; wordiddic = {}&lt;/P&gt;
&lt;P&gt;&amp;nbsp; for word in words:&lt;br /&gt;&amp;nbsp; &amp;nbsp; cur = self.con.execute(&quot;select rowid from wordlist where word = &#039;%s&#039;&quot; % umbcs(word))&lt;br /&gt;&amp;nbsp; &amp;nbsp; res = cur.fetchone()&lt;br /&gt;&amp;nbsp; &amp;nbsp; if res == None: continue # ignore unadded words&lt;br /&gt;&amp;nbsp; &amp;nbsp; else: wordiddic[res[0]] = worddic[word]&lt;/P&gt;
&lt;P&gt;&amp;nbsp; # build line -&amp;gt; &quot;0 wordid:frequency worid:frequency ...&quot; (wordid asc)&lt;br /&gt;&amp;nbsp; line = &quot;0 &quot;&lt;br /&gt;&amp;nbsp; for wordid, frequency in sorted(wordiddic.items(), key=lambda item:item[0]):&lt;br /&gt;&amp;nbsp; &amp;nbsp; line = line + str(wordid) + &quot;:&quot; + str(frequency) + &quot; &quot;&lt;/P&gt;
&lt;P&gt;&amp;nbsp; return svmclassifier(line + &quot;\n&quot;)&lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;&amp;nbsp;getterms 은 댓글을 입력하면 명사와 그 댓글에서의 명사 출현회수를 담은 사전을 리턴하고 svmclassifier 는 댓글을 단어 출현횟수를 자질로 백터화해서 넘기면 악플 집단인지 선플집단인지 분류해준다.&lt;br /&gt;&lt;br /&gt;&lt;STRONG&gt;&lt;FONT size=4&gt;analyzer.py&lt;/FONT&gt;&lt;br /&gt;&lt;/STRONG&gt;&lt;br /&gt;&amp;nbsp; 설계부분의 analyzer 모듈을 구현하였다. analyzer 라는 클래스가 하나 있으며 그 클래스를 통해 데이터셋을 분석한다. &amp;nbsp;클래스 외부에서는 probability 라는 멤버함수에 단어를 넘겨 호출하면 문자열을 하나 리턴받는데 단어가 데이터셋에 없을 경우 &quot;no data&quot;를 그렇지 않을경우 단어가 악플에 포함되었을 확률이다.&lt;br /&gt;&lt;br /&gt;&lt;/P&gt;
&lt;BLOCKQUOTE&gt;
&lt;P&gt;def probability(self, term):&lt;br /&gt;&amp;nbsp; # get wordid&lt;br /&gt;&amp;nbsp; res = self.con.execute(&quot;select rowid from wordlist where word = &#039;%s&#039;&quot; % umbcs(term)).fetchone()&lt;br /&gt;&amp;nbsp; if res == None: return &quot;no data&quot;&lt;br /&gt;&amp;nbsp; else: wordid = res[0]&lt;/P&gt;
&lt;P&gt;&amp;nbsp; # get case -&amp;gt; [-1, 1, ...] (-1 : bad, 1 : good)&lt;br /&gt;&amp;nbsp; case = []&lt;br /&gt;&amp;nbsp; for commentid in self.con.execute(&quot;select commentid from wordlocation where wordid = %d&quot; % wordid).fetchall():&lt;br /&gt;&amp;nbsp; &amp;nbsp; for status in self.con.execute(&quot;select status from commentlist where rowid = %d&quot; % commentid[0]).fetchall():&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; case.append(status[0])&lt;/P&gt;
&lt;P&gt;&amp;nbsp; # return -&amp;gt; &quot;no data&quot; or &quot;48%&quot;&lt;br /&gt;&amp;nbsp; return str(int((case.count(-1) / float(len(case))) * 100)) + &quot;%&quot;&lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;&amp;nbsp;성능을 고려하지 않고 작성하였으며 댓글이 10만개가 넘어갈 경우 재작성 되어야 할 것이다. 아마 데이터 베이스를 갈아타거나 적절히 여러파일로 나눠서 처리해야 할 것이다. 데이터베이스에서 해당단어가 포함된 댓글을 가져와서 악플의 수를 모든댓글의 수로 나누었다.&lt;br /&gt;&lt;br /&gt;&lt;FONT size=4&gt;&lt;STRONG&gt;result&lt;/STRONG&gt;&lt;/FONT&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;위 두함수를 이용해서 간단한 악플판별 웹페이지를 작성하였다. python 으로 작성하였고 django 프레임웍을 이용하였다. 국내호스팅중 django를 지원하는 호스팅이 없기때문에 안타깝게도 스크린샷을 으로 대체한다.&lt;br /&gt;&lt;br /&gt;&lt;div class=&quot;imageblock center&quot; style=&quot;text-align: center; clear: both;&quot;&gt;&lt;a href=&quot;http://cfs9.tistory.com/original/30/tistory/2008/07/17/16/26/487ef41c03a1e&quot; rel=&quot;lightbox&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://cfs9.tistory.com/image/30/tistory/2008/07/17/16/26/487ef41c03a1e&quot; alt=&quot;사용자 삽입 이미지&quot; height=&quot;469&quot; width=&quot;540&quot;/&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;/P&gt;</description>
			<category>구현</category>
			<category>악플판별시스템</category>
			<author>나라고잉</author>
			<guid>http://naragoing.tistory.com/16</guid>
			<comments>http://naragoing.tistory.com/16#entry16comment</comments>
			<pubDate>Thu, 17 Jul 2008 16:24:00 +0900</pubDate>
		</item>
	</channel>
</rss>
