IT is Smart

Moonshile/ChineseWordSegmentation from GitHub 본문

Case Study/Open Sources

Moonshile/ChineseWordSegmentation from GitHub

달인최선 2016. 8. 27. 11:39
반응형

이번에 스터디해 본 ChineseWordSegmentation 프로젝트는 중국어 문장을 언어사전없이 분리하는 형태소 분석기를 파이썬으로 구현한 것입니다..


형태소 분석기는 텍스트마이닝 분야에서 일상 언어를 컴퓨터가 처리할 수 있도록 처리하는 자연어처리(NLP, Natural Language Processing)에 필요한 기능입니다. 띄어쓰기나 어간/어미 구분, 복합단어, 신조어, 쓰기오류 등 다양하게 생산된 인간의 언어를 형태소(명사, 형용사, 동사 등)으로 분해하는 것은 자연어처리의 가장 첫번째 단계입니다.


형태소를 분석하는 방법으로는 대표적으로 Corpus, 단어뭉치라고 부르는 언어사전을 사용해서 분해하는 방식과 n-gram방식이 있습니다.

사전방식은 말 그대로 사전에 있는 단어인지를 비교해서 확인하는 방식으로 사전의 정확도가 높을수록 형태소 분석의 정확도도 높아지겠죠.

하지만, 사전을 사용하는 방식은 많은 메모리를 사용하게 되고 비교알고리즘에 따라 전체 프로세싱에 많은 시간이 소모되는 단점이 있습니다.

이에 비해, n-gam방식은 n으로 지정한 갯수의 글자를 전체 문서에서의 출현빈도로 분석해서 실제 의미있는 단어일 것이라고 추정해 내는 방식으로 별도의 사전없이 원문만으로 프로세싱이 가능하기 때문에 사전방식에 비해 상당히 빠른 처리가 가능한 장점이 있습니다만, 사전방식에 비해 신뢰도는 떨어지겠지요.

그래서, 형태소 분석의 정확도를 높이기 위해 n-gram방식과 사전방식을 같이 사용하기도 한다고 합니다.


이번에 찾은 중국어 형태소 분석기는 중국인이 파이썬으로 직접 개발한 것으로 n-gram방식을 사용하여 메모리 사용이 작으면서도 매우 빠른 처리속도를 보였습니다.


727,125자로 구성된 서유기 중국어 원문을 Input으로 돌려보니 1분만에 분석처리했고, 아래와 같이 단어와 출현빈도수으로 Output을 내주었습니다.


八戒:0.002604 师父:0.002352 大圣:0.001829 唐僧:0.001448 沙僧:0.001175 和尚:0.001135 菩萨:0.001128 怎么:0.001115 长老:0.000954

妖精:0.000913 老孙:0.000889 两个:0.000858 甚么:0.000794 国王:0.000681 徒弟:0.000632 如何:0.000555 小妖:0.000520 兄弟:0.000409

宝贝:0.000408 今日:0.000406 听得:0.000399 取经:0.000380 如今:0.000373 这般:0.000357 铁棒:0.000333 西天:0.000331 认得:0.000321

龙王:0.000311 师徒:0.000310 进去:0.000307 东土:0.000305 太子:0.000305 孙大圣:0.000291 老爷:0.000290 神通:0.000278 公主:0.000278

妖魔:0.000275 玉帝:0.000272 变作:0.000272 猴王:0.000266 土地:0.000259 门外:0.000252 师兄:0.000252 欢喜:0.000249 贫僧:0.000245

行李:0.000243 陛下:0.000242 怎生:0.000238 爷爷:0.000232 多少:0.000232 空中:0.000230 变做:0.000229 叫做:0.000229 兵器:0.000228

二十:0.000226 些儿:0.000225 袈裟:0.000223 十分:0.000220 变化:0.000216 怪物:0.000212 近前:0.000203 娘娘:0.000196 衣服:0.000192

猪八戒:0.000189 西方:0.000187 吩咐:0.000184 打死:0.000184 仔细:0.000181 孙悟空:0.000181 左右:0.000179 金箍棒:0.000179 晓得:0.000173

四众:0.000169 言语:0.000169 奈何:0.000169 观音:0.000166 安排:0.000164 方才:0.000163 叩头:0.000163 关文:0.000163 钉钯:0.000161

拜佛:0.000161 拿住:0.000160 五百:0.000160 毫毛:0.000158 半空:0.000156 不题 却说:0.000154 降妖:0.000153 递与:0.000153 许多:0.000148

妖邪:0.000148 战兢兢:0.000148 齐天大圣:0.000147 抬头:0.000145 明日:0.000145 汝等:0.000145 孩儿:0.000144 扯住:0.000144 筋斗:0.000141

忍不住:0.000138 沙和尚:0.000135 收拾:0.000133 本事:0.000133 皇帝:0.000131 佛祖:0.000131 葫芦:0.000130 玄奘:0.000130 往西天:0.000130

老猪:0.000128 未曾:0.000127 只管:0.000124 白马:0.000122 揭谛:0.000121 多官:0.000121 求经:0.000121 金光:0.000120 这厮:0.000118

罗刹:0.000118 在这里:0.000118 东西:0.000117 受用:0.000117 御弟:0.000115 唤做:0.000115 磕头:0.000115 雷音:0.000114 花果山:0.000114

文武:0.000112 金星:0.000112 用手:0.000112 合掌:0.000111 八戒 沙僧:0.000111 耍子:0.000108 先生:0.000108 耳朵:0.000107 法力:0.000107

七十:0.000105 方便:0.000105 童子:0.000105 哪吒:0.000105 唐朝:0.000104 东土大唐:0.000104 保护:0.000102 列位:0.000102 父母:0.000101

悟能:0.000101 灵山:0.000101 在旁:0.000098 传旨:0.000098 扇子:0.000098 母亲:0.000098 悟净:0.000098 决不:0.000098 昨日:0.000097

群妖:0.000095 打杀:0.000095 跳出:0.000095 金刚:0.000094 下界:0.000094 当年:0.000094 驸马:0.000092 躬身:0.000092 启奏:0.000092

门首:0.000092 出家人:0.000092 雷公:0.000091 南海:0.000091 祥云:0.000091 包袱:0.000091 惊动:0.000091 转身:0.000091 驾云:0.000089

婆婆:0.000088 十六:0.000088 路旁:0.000088 长安:0.000086 宝殿:0.000086 祥光:0.000086 海龙:0.000085 半空中:0.000085 有多少:0.000084

泼猴:0.000082 李天王:0.000082 木叉:0.000081 蟠桃:0.000081 天尊:0.000081 猢狲:0.000081 光蕊:0.000079 吆喝:0.000079 方丈:0.000079

保唐僧:0.000079 宝杖:0.000078 皈依:0.000078 山坡:0.000078 轻轻:0.000076 罗汉:0.000076 外面:0.000076 干净:0.000076 呵呵:0.000076

二郎:0.000075 慈悲:0.000075 水帘洞:0.000075 公公:0.000073 孽畜:0.000073 判官:0.000073 金睛:0.000073 日月:0.000073 金银:0.000073

佛南无:0.000073 可以:0.000072 阎王:0.000072 狂风:0.000072 嘴脸:0.000072 旁边:0.000072 相貌:0.000072 乾坤:0.000072 观音菩萨:0.000072

真君:0.000071 员外:0.000071 在半空:0.000071 弼马温:0.000071 千年:0.000069 主公:0.000069 化斋:0.000069 六十:0.000069 星官:0.000069

樵子:0.000069 万岁:0.000069 在马上:0.000069 丞相:0.000068 先锋:0.000068 棍子:0.000068 慌忙:0.000068 腰间:0.000068 清风:0.000066

抽身:0.000066 比丘:0.000066 挑着:0.000066 千万:0.000066 全无:0.000065 记得:0.000065 随后:0.000065 银子:0.000065 遇着:0.000065

对众:0.000065 南天门:0.000065 见一座:0.000065 拜谢:0.000063 伏侍:0.000063 钵盂:0.000063 光明:0.000063 大闹天宫:0.000063

尽皆:0.000062 肚里:0.000062 牵马:0.000062 魏征:0.000062 元帅:0.000062 闻言 即:0.000062 打破:0.000060 驿丞:0.000060 还未:0.000060

连忙:0.000060 美猴王:0.000060 几年:0.000059 妈妈:0.000059 声音:0.000059 抖擞:0.000059 圈子:0.000059 施主:0.000059 外公:0.000058

即忙:0.000058 挑担:0.000058 呼呼:0.000058 称谢:0.000058 名唤:0.000058 阴司:0.000058 在里面:0.000058 花园:0.000056 阴阳:0.000056

进城:0.000056 夫妻:0.000056 找寻:0.000056 皇后:0.000056 牛魔王:0.000056 急急:0.000055 底下:0.000055 宝剑:0.000055 计较:0.000055

道贤弟:0.000055 跳起:0.000053 层门:0.000053 欣然:0.000053 官员:0.000053 买卖:0.000053 明月:0.000053 雷音寺:0.000053 白玉:0.000052

冲撞:0.000052 诸天:0.000052 女婿:0.000052 纷纷:0.000052 英雄:0.000052 声响:0.000052 相持:0.000052 国丈:0.000052 长嘴:0.000052

玉皇:0.000052 以为:0.000052 看守:0.000052 海龙王:0.000052 天蓬:0.000050 望空:0.000050 君臣:0.000050 供养:0.000050 等候:0.000050

锡杖:0.000050 到于:0.000050 昼夜:0.000050 低头:0.000050 将军:0.000050 早已:0.000050 芭蕉扇:0.000050


제일 빈도가 높은 단어는 저팔계를 뜻하는 八戒가 나왔고, 师父 사부, 손오공을 뜻하는 老孙 등 익숙한 단어들이 많이 눈이 띄는 것으로 보아 매우 의미있는 수준의 형태소 분석 결과를 보였습니다.


- probability.py : 확률 연산을 처리하는 소스입니다.

- sequence.py : 정렬처리를 하는 소스입니다.

- wordseg.py : 활률 연산과 정렬 처리를 import해서 문서의 형태소 분석을 실행하는 소스입니다.

- freqitem.py, hashtree.py : 이 2개 소스는 실제 사용되지 않았습니다.


소스는 파이썬 2버전으로 작성되어 있어서 3.5버전에서 돌려보기 위해서 일부 소스코드를 수정했습니다.

wordseg.py에서는 print 문법이 print ""에서 print()으로 수정했고,

sequence.py에서는 lambda연산문법을 수정했습니다. 



이 소스를 활용하는 파일럿도 진행해 봐야겠습니다.


https://github.com/Moonshile/ChineseWordSegmentation


반응형

'Case Study > Open Sources' 카테고리의 다른 글

buckyroberts/Spider from GitHub  (0) 2016.08.27