中文分词实战与文言文分词的初步设想

接着帖子《中文分词整理》讲开来,上回说我比较中意的pymmseg和coreseek —— pymmseg基于python,短小精悍,功能强大,适合扩展应用和初学使用;coreseek是将中文分词和sphinx全文检索结合,适合同中型网站结合使用(比如说去搜索整个台湾中研院的网站,或者是百度国学)。

可以到github上下载pymmseg,然后直接解压到site-package目录里即可。以下是使用该库的基本代码:

# coding= utf-8
from pymmseg import mmseg
mmseg.dict_load_defaults()
text = "... ..."
para = ''
algor = mmseg.Algorithm(text)
for tok in algor:
	print '%s [%d .. %d]' % (tok.text, tok.start, tok.end)
	para += tok.text + '  '
print para

需要注意的是,pymmseg现在只支持utf-8,如果要对基于gbk或big5的中文文章进行分词,需要首先进行字符集的转换。经过测试,我发现pymmseg对白话文的分词,效果还是不错的,如下所示,

原文:

2003年,余英时先生的《朱熹的历史世界》在台北的允晨出版公司出版,第二年,大陆的三联书店也出版了简体字本。至今我还记得,在这部书还没有正式出版时,因为《绪说》部分曾在台湾的《当代》杂志上连载,经由互联网的传播,就已经有部分内容在大陆流传,仅就我所知,在北京大学、清华大学的朋友中,就已经有了热烈的议论。在这部书正式出版之后,更引起了两岸三地,以及北美学界的讨论,出现了不少分量很重的评论 。所以,我在一篇书评中说,在学术社群越来越缺少共同话题,研究取向逐渐多元化的时代,能够成为海内外中国研究领域共同关注焦点的话题并不太多,而这部著作能有这么多反响与争论,真是非常值得高兴的事情。

分词结果:

2003  年  ,  余  英  时  先生  的  《  朱熹  的  历  史  世界  》  在  台  北的  允  晨  出版  公司  出版  ,  第二年  ,  大  陆  的  三  联  书  店  也  出版  了  简  体  字  本  。  至今  我  还  记  得  ,  在  这  部  书  还  没  有  正式  出版  时  ,  因  为  《  绪  说  》  部分  曾在  台  湾  的  《  当  代  》  杂  志  上  连  载  ,  经  由  互  联  网  的  传  播  ,  就  已  经  有  部分  内  容  在  大  陆  流  传  ,  仅  就我  所知  ,  在  北京  大  学  、  清  华  大  学  的  朋友  中  ,  就  已  经  有了  热  烈  的  议  论  。  在  这  部  书  正式  出版  之  后  ,  更  引起  了  两  岸  三地  ,  以及  北美  学  界  的  讨  论  ,  出  现  了  不少  分量  很重  的  评  论  。  所以  ,  我  在  一篇  书  评  中  说  ,  在  学  术  社群  越  来  越  缺少  共同  话  题  ,  研究  取向  逐  渐  多元化  的  时  代  ,  能  够  成  为  海  内  外  中  国  研究  领  域  共同  关  注  焦  点  的  话  题  并  不  太多  ,  而  这  部  著作  能有  这  么  多  反  响  与  争  论  ,  真是  非常  值得  高  兴  的  事情  。

大体上看,效果还不错,但是我们也发现“余英时”并未被分解出,但“朱熹”被识别了。所以为了让pymmseg同样可以识别“余英时”,需要在word.dic里面加入”余英时”这个人名。所以对于mmseg这种基于辞典分词法的分词机,只要加入专业词汇(当然包括人名、地名。)就可以将其分解出。比如说,如果要对《水经注》进行分词,给word.dic里面加入古代地名是相当必要的。

于是乎,我拿来一段古文,来自《近思录》卷三(格物穷理)中的一节进行试验,

原文:

伊川先生答朱长文书曰:心通乎道,然后能辨是非,如持权衡以较轻重,孟子所谓知言是也。心不通于道,而较古人之是非,犹不持权衡而酌轻重,竭其目力,劳其心智,虽使时中,亦古人所谓“亿则屡中”,君子不贵也。

分词结果:

伊  川  先生  答  朱  长  文  书  曰  :  心  通  乎  道  ,  然  后  能辨  是非  ,  如  持  权  衡  以  较  轻  重  ,  孟子  所  谓  知  言  是  也  。  心  不通  于  道  ,  而  较  古人  之  是非  ,  犹  不  持  权  衡  而  酌  轻  重  ,  竭  其  目力  ,  劳  其  心智  ,  虽  使  时  中  ,  亦  古人  所  谓  “  亿  则  屡  中  ”  ,  君子  不  贵  也。

可以看到,只有“先生”、“能辨”、“孟子”、“不通”、“古人”、“是非”、“君子”几个词被分解出,同时虚词也被分出,但是比如“伊川”、“轻重”等词并没有被识别。针对这种情况,当然了,如果在word.dic里面加入相关词汇,则分词机也是可以识别“伊川先生”等些特定词汇。

总体而言,如果要使用辞典法对文言文进行分词,我觉得需要注意以下几个问题:

  • 1) 字符集问题,请使用utf-8,如果不是,请先进行字符集转换。
  • 2)将古人常用的词汇加入字典。这里就有一个tricky的地方,所谓古人,每个历史时期都有其习惯使用的词汇,所以我们需要对每个时期单独配套字典,同时针对不同的专业书籍,可能也要配套专门的字典。但凡搞分词的同僚们大概都知道“没有最好的分词机,只有最适合的分词机。”这句话,所以如果要达到最好的分词结果,可能需要针对不同的情况使用不同的分词机。
  • 3)对于我的应用而言,我希望通过分词,了解到古代人物之间的关系,这些联系是什么样的关系呢?比如吕祖谦给朱熹的儿子介绍对象,这就是一种关系,朱熹给张栻写墓志铭,而没有给陈亮写,这也是一种关系。也就是说,要通过分词,了解到古人的社会网络关系(婚姻关系、君臣关系、买卖关系等等),以此,自动化的建立一个社会网络(social network)并赋予网络节点他们的关系情况。
  • 4)展开来想,由于CHGIS已经提供了地名、人名的坐标信息,所以我们可以对查找出的地名和人名进行匹配,这样可以很容易的查询到相关信息的地理坐标。

大概先说这么多吧,以后有了新的想法,再和大家交流。

Share with:

  • email
  • LinkedIn
  • Twitter
  • Facebook
  • del.icio.us
  • StumbleUpon
  • Reddit
  • Digg
  • 豆瓣

No related posts.