diff --git a/README.md b/README.md index 7e46a3f..cb5b1a8 100644 --- a/README.md +++ b/README.md @@ -58,16 +58,16 @@ Algorithm #encoding=utf-8 import jieba - seg_list = jieba.cut("我来到北京清华大学",cut_all=True) - print "Full Mode:", "/ ".join(seg_list) #全模式 + seg_list = jieba.cut("我来到北京清华大学", cut_all=True) + print "Full Mode:", "/ ".join(seg_list) # 全模式 - seg_list = jieba.cut("我来到北京清华大学",cut_all=False) - print "Default Mode:", "/ ".join(seg_list) #精确模式 + seg_list = jieba.cut("我来到北京清华大学", cut_all=False) + print "Default Mode:", "/ ".join(seg_list) # 精确模式 - seg_list = jieba.cut("他来到了网易杭研大厦") #默认是精确模式 + seg_list = jieba.cut("他来到了网易杭研大厦") # 默认是精确模式 print ", ".join(seg_list) - seg_list = jieba.cut_for_search("小明硕士毕业于中国科学院计算所,后在日本京都大学深造") #搜索引擎模式 + seg_list = jieba.cut_for_search("小明硕士毕业于中国科学院计算所,后在日本京都大学深造") # 搜索引擎模式 print ", ".join(seg_list) Output: @@ -116,9 +116,9 @@ Output: * 用法示例 >>> import jieba.posseg as pseg - >>> words =pseg.cut("我爱北京天安门") + >>> words = pseg.cut("我爱北京天安门") >>> for w in words: - ... print w.word,w.flag + ... print w.word, w.flag ... 我 r 爱 v @@ -155,7 +155,7 @@ https://github.com/fxsjy/jieba/raw/master/extra_dict/dict.txt.big jieba采用延迟加载,"import jieba"不会立即触发词典的加载,一旦有必要才开始加载词典构建trie。如果你想手工初始jieba,也可以手动初始化。 import jieba - jieba.initialize() #手动初始化(可选) + jieba.initialize() # 手动初始化(可选) 在0.28之前的版本是不能指定主词典的路径的,有了延迟加载机制后,你可以改变主词典的路径: @@ -223,16 +223,16 @@ Code example: segmentation #encoding=utf-8 import jieba - seg_list = jieba.cut("我来到北京清华大学",cut_all=True) - print "Full Mode:", "/ ".join(seg_list) #全模式 + seg_list = jieba.cut("我来到北京清华大学", cut_all=True) + print "Full Mode:", "/ ".join(seg_list) # 全模式 - seg_list = jieba.cut("我来到北京清华大学",cut_all=False) - print "Default Mode:", "/ ".join(seg_list) #默认模式 + seg_list = jieba.cut("我来到北京清华大学", cut_all=False) + print "Default Mode:", "/ ".join(seg_list) # 默认模式 seg_list = jieba.cut("他来到了网易杭研大厦") print ", ".join(seg_list) - seg_list = jieba.cut_for_search("小明硕士毕业于中国科学院计算所,后在日本京都大学深造") #搜索引擎模式 + seg_list = jieba.cut_for_search("小明硕士毕业于中国科学院计算所,后在日本京都大学深造") # 搜索引擎模式 print ", ".join(seg_list) Output: @@ -292,7 +292,7 @@ Initialization By default, Jieba employs lazy loading to only build the trie once it is necessary. This takes 1-3 seconds once, after which it is not initialized again. If you want to initialize Jieba manually, you can call: import jieba - jieba.initialize() #(optional) + jieba.initialize() # (optional) You can also specify the dictionary (not supported before version 0.28) : diff --git a/test/demo.py b/test/demo.py index 19d314a..74140c5 100644 --- a/test/demo.py +++ b/test/demo.py @@ -4,14 +4,14 @@ sys.path.append("../") import jieba -seg_list = jieba.cut("我来到北京清华大学",cut_all=True) -print "Full Mode:", "/ ".join(seg_list) #全模式 +seg_list = jieba.cut("我来到北京清华大学", cut_all=True) +print "Full Mode:", "/ ".join(seg_list) # 全模式 -seg_list = jieba.cut("我来到北京清华大学",cut_all=False) -print "Default Mode:", "/ ".join(seg_list) #默认模式 +seg_list = jieba.cut("我来到北京清华大学", cut_all=False) +print "Default Mode:", "/ ".join(seg_list) # 默认模式 seg_list = jieba.cut("他来到了网易杭研大厦") print ", ".join(seg_list) -seg_list = jieba.cut_for_search("小明硕士毕业于中国科学院计算所,后在日本京都大学深造") #搜索引擎模式 +seg_list = jieba.cut_for_search("小明硕士毕业于中国科学院计算所,后在日本京都大学深造") # 搜索引擎模式 print ", ".join(seg_list) diff --git a/test/extract_tags.py b/test/extract_tags.py index 58e7de3..3298749 100644 --- a/test/extract_tags.py +++ b/test/extract_tags.py @@ -5,29 +5,26 @@ import jieba import jieba.analyse from optparse import OptionParser -USAGE ="usage: python extract_tags.py [file name] -k [top k]" +USAGE = "usage: python extract_tags.py [file name] -k [top k]" parser = OptionParser(USAGE) -parser.add_option("-k",dest="topK") +parser.add_option("-k", dest="topK") opt, args = parser.parse_args() -if len(args) <1: - print USAGE - sys.exit(1) +if len(args) < 1: + print USAGE + sys.exit(1) file_name = args[0] -if opt.topK==None: - topK=10 +if opt.topK is None: + topK = 10 else: - topK = int(opt.topK) + topK = int(opt.topK) +content = open(file_name, 'rb').read() -content = open(file_name,'rb').read() - -tags = jieba.analyse.extract_tags(content,topK=topK) +tags = jieba.analyse.extract_tags(content, topK=topK) print ",".join(tags) - - diff --git a/test/jieba_test.py b/test/jieba_test.py new file mode 100644 index 0000000..6a413a3 --- /dev/null +++ b/test/jieba_test.py @@ -0,0 +1,148 @@ +#-*-coding: utf-8 -*- +import sys +sys.path.append("../") +import unittest +import types +import jieba +jieba.initialize() + + +test_contents = [ + "这是一个伸手不见五指的黑夜。我叫孙悟空,我爱北京,我爱Python和C++。", + "我不喜欢日本和服。", + "雷猴回归人间。", + "工信处女干事每月经过下属科室都要亲口交代24口交换机等技术性器件的安装工作", + "我需要廉租房", + "永和服装饰品有限公司", + "我爱北京天安门", + "abc", + "隐马尔可夫", + "雷猴是个好网站", + "“Microsoft”一词由“MICROcomputer(微型计算机)”和“SOFTware(软件)”两部分组成", + "草泥马和欺实马是今年的流行词汇", + "伊藤洋华堂总府店", + "中国科学院计算技术研究所", + "罗密欧与朱丽叶", + "我购买了道具和服装", + "PS: 我觉得开源有一个好处,就是能够敦促自己不断改进,避免敞帚自珍", + "湖北省石首市", + "湖北省十堰市", + "总经理完成了这件事情", + "电脑修好了", + "做好了这件事情就一了百了了", + "人们审美的观点是不同的", + "我们买了一个美的空调", + "线程初始化时我们要注意", + "一个分子是由好多原子组织成的", + "祝你马到功成", + "他掉进了无底洞里", + "中国的首都是北京", + "孙君意", + "外交部发言人马朝旭", + "领导人会议和第四届东亚峰会", + "在过去的这五年", + "还需要很长的路要走", + "60周年首都阅兵", + "你好人们审美的观点是不同的", + "买水果然后来世博园", + "买水果然后去世博园", + "但是后来我才知道你是对的", + "存在即合理", + "的的的的的在的的的的就以和和和", + "I love你,不以为耻,反以为rong", + "因", + "", + "hello你好人们审美的观点是不同的", + "很好但主要是基于网页形式", + "hello你好人们审美的观点是不同的", + "为什么我不能拥有想要的生活", + "后来我才", + "此次来中国是为了", + "使用了它就可以解决一些问题", + ",使用了它就可以解决一些问题", + "其实使用了它就可以解决一些问题", + "好人使用了它就可以解决一些问题", + "是因为和国家", + "老年搜索还支持", + "干脆就把那部蒙人的闲法给废了拉倒!RT @laoshipukong : 27日,全国人大常委会第三次审议侵权责任法草案,删除了有关医疗损害责任“举证倒置”的规定。在医患纠纷中本已处于弱势地位的消费者由此将陷入万劫不复的境地。 ", + "大", + "", + "他说的确实在理", + "长春市长春节讲话", + "结婚的和尚未结婚的", + "结合成分子时", + "旅游和服务是最好的", + "这件事情的确是我的错", + "供大家参考指正", + "哈尔滨政府公布塌桥原因", + "我在机场入口处", + "邢永臣摄影报道", + "BP神经网络如何训练才能在分类时增加区分度?", + "南京市长江大桥", + "应一些使用者的建议,也为了便于利用NiuTrans用于SMT研究", + '长春市长春药店', + '邓颖超生前最喜欢的衣服', + '胡锦涛是热爱世界和平的政治局常委', + '程序员祝海林和朱会震是在孙健的左面和右面, 范凯在最右面.再往左是李松洪', + '一次性交多少钱', + '两块五一套,三块八一斤,四块七一本,五块六一条', + '小和尚留了一个像大和尚一样的和尚头', + '我是中华人民共和国公民;我爸爸是共和党党员; 地铁和平门站', + '张晓梅去人民医院做了个B超然后去买了件T恤', + 'AT&T是一件不错的公司,给你发offer了吗?', + 'C++和c#是什么关系?11+122=133,是吗?PI=3.14159', + '你认识那个和主席握手的的哥吗?他开一辆黑色的士。'] + + +class JiebaTestCase(unittest.TestCase): + def setUp(self): + reload(jieba) + + def tearDown(self): + pass + + def testDefaultCut(self): + for content in test_contents: + result = jieba.cut(content) + assert isinstance(result, types.GeneratorType), "Test DefaultCut Generator error" + result = list(result) + assert isinstance(result, list), "Test DefaultCut error on content: %s" % content + print >> sys.stderr, " , ".join(result) + + def testCutAll(self): + for content in test_contents: + result = jieba.cut(content, cut_all=True) + assert isinstance(result, types.GeneratorType), "Test CutAll Generator error" + result = list(result) + assert isinstance(result, list), "Test CutAll error on content: %s" % content + print >> sys.stderr, " , ".join(result) + + def testSetDictionary(self): + jieba.set_dictionary("foobar.txt") + for content in test_contents: + result = jieba.cut(content) + assert isinstance(result, types.GeneratorType), "Test SetDictionary Generator error" + result = list(result) + assert isinstance(result, list), "Test SetDictionary error on content: %s" % content + print >> sys.stderr, " , ".join(result) + + def testCutForSearch(self): + for content in test_contents: + result = jieba.cut_for_search(content) + assert isinstance(result, types.GeneratorType), "Test CutForSearch Generator error" + result = list(result) + assert isinstance(result, list), "Test CutForSearch error on content: %s" % content + print >> sys.stderr, " , ".join(result) + + def testPosseg(self): + import jieba.posseg as pseg + for content in test_contents: + result = pseg.cut(content) + assert isinstance(result, types.GeneratorType), "Test Posseg Generator error" + result = list(result) + assert isinstance(result, list), "Test Posseg error on content: %s" % content + print >> sys.stderr, " , ".join([w.word + " / " + w.flag for w in result]) + + +if __name__ == "__main__": + unittest.main() diff --git a/test/test.py b/test/test.py index 86ade7d..718c4a9 100644 --- a/test/test.py +++ b/test/test.py @@ -3,95 +3,94 @@ import sys sys.path.append("../") import jieba + def cuttest(test_sent): - result = jieba.cut(test_sent) - for word in result: - print word, "/", - print "" + result = jieba.cut(test_sent) + print " / ".join(result) if __name__ == "__main__": - cuttest("这是一个伸手不见五指的黑夜。我叫孙悟空,我爱北京,我爱Python和C++。") - cuttest("我不喜欢日本和服。") - cuttest("雷猴回归人间。") - cuttest("工信处女干事每月经过下属科室都要亲口交代24口交换机等技术性器件的安装工作") - cuttest("我需要廉租房") - cuttest("永和服装饰品有限公司") - cuttest("我爱北京天安门") - cuttest("abc") - cuttest("隐马尔可夫") - cuttest("雷猴是个好网站") - cuttest("“Microsoft”一词由“MICROcomputer(微型计算机)”和“SOFTware(软件)”两部分组成") - cuttest("草泥马和欺实马是今年的流行词汇") - cuttest("伊藤洋华堂总府店") - cuttest("中国科学院计算技术研究所") - cuttest("罗密欧与朱丽叶") - cuttest("我购买了道具和服装") - cuttest("PS: 我觉得开源有一个好处,就是能够敦促自己不断改进,避免敞帚自珍") - cuttest("湖北省石首市") - cuttest("湖北省十堰市") - cuttest("总经理完成了这件事情") - cuttest("电脑修好了") - cuttest("做好了这件事情就一了百了了") - cuttest("人们审美的观点是不同的") - cuttest("我们买了一个美的空调") - cuttest("线程初始化时我们要注意") - cuttest("一个分子是由好多原子组织成的") - cuttest("祝你马到功成") - cuttest("他掉进了无底洞里") - cuttest("中国的首都是北京") - cuttest("孙君意") - cuttest("外交部发言人马朝旭") - cuttest("领导人会议和第四届东亚峰会") - cuttest("在过去的这五年") - cuttest("还需要很长的路要走") - cuttest("60周年首都阅兵") - cuttest("你好人们审美的观点是不同的") - cuttest("买水果然后来世博园") - cuttest("买水果然后去世博园") - cuttest("但是后来我才知道你是对的") - cuttest("存在即合理") - cuttest("的的的的的在的的的的就以和和和") - cuttest("I love你,不以为耻,反以为rong") - cuttest("因") - cuttest("") - cuttest("hello你好人们审美的观点是不同的") - cuttest("很好但主要是基于网页形式") - cuttest("hello你好人们审美的观点是不同的") - cuttest("为什么我不能拥有想要的生活") - cuttest("后来我才") - cuttest("此次来中国是为了") - cuttest("使用了它就可以解决一些问题") - cuttest(",使用了它就可以解决一些问题") - cuttest("其实使用了它就可以解决一些问题") - cuttest("好人使用了它就可以解决一些问题") - cuttest("是因为和国家") - cuttest("老年搜索还支持") - cuttest("干脆就把那部蒙人的闲法给废了拉倒!RT @laoshipukong : 27日,全国人大常委会第三次审议侵权责任法草案,删除了有关医疗损害责任“举证倒置”的规定。在医患纠纷中本已处于弱势地位的消费者由此将陷入万劫不复的境地。 ") - cuttest("大") - cuttest("") - cuttest("他说的确实在理") - cuttest("长春市长春节讲话") - cuttest("结婚的和尚未结婚的") - cuttest("结合成分子时") - cuttest("旅游和服务是最好的") - cuttest("这件事情的确是我的错") - cuttest("供大家参考指正") - cuttest("哈尔滨政府公布塌桥原因") - cuttest("我在机场入口处") - cuttest("邢永臣摄影报道") - cuttest("BP神经网络如何训练才能在分类时增加区分度?") - cuttest("南京市长江大桥") - cuttest("应一些使用者的建议,也为了便于利用NiuTrans用于SMT研究") - cuttest('长春市长春药店') - cuttest('邓颖超生前最喜欢的衣服') - cuttest('胡锦涛是热爱世界和平的政治局常委') - cuttest('程序员祝海林和朱会震是在孙健的左面和右面, 范凯在最右面.再往左是李松洪') - cuttest('一次性交多少钱') - cuttest('两块五一套,三块八一斤,四块七一本,五块六一条') - cuttest('小和尚留了一个像大和尚一样的和尚头') - cuttest('我是中华人民共和国公民;我爸爸是共和党党员; 地铁和平门站') - cuttest('张晓梅去人民医院做了个B超然后去买了件T恤') - cuttest('AT&T是一件不错的公司,给你发offer了吗?') - cuttest('C++和c#是什么关系?11+122=133,是吗?PI=3.14159') - cuttest('你认识那个和主席握手的的哥吗?他开一辆黑色的士。') \ No newline at end of file + cuttest("这是一个伸手不见五指的黑夜。我叫孙悟空,我爱北京,我爱Python和C++。") + cuttest("我不喜欢日本和服。") + cuttest("雷猴回归人间。") + cuttest("工信处女干事每月经过下属科室都要亲口交代24口交换机等技术性器件的安装工作") + cuttest("我需要廉租房") + cuttest("永和服装饰品有限公司") + cuttest("我爱北京天安门") + cuttest("abc") + cuttest("隐马尔可夫") + cuttest("雷猴是个好网站") + cuttest("“Microsoft”一词由“MICROcomputer(微型计算机)”和“SOFTware(软件)”两部分组成") + cuttest("草泥马和欺实马是今年的流行词汇") + cuttest("伊藤洋华堂总府店") + cuttest("中国科学院计算技术研究所") + cuttest("罗密欧与朱丽叶") + cuttest("我购买了道具和服装") + cuttest("PS: 我觉得开源有一个好处,就是能够敦促自己不断改进,避免敞帚自珍") + cuttest("湖北省石首市") + cuttest("湖北省十堰市") + cuttest("总经理完成了这件事情") + cuttest("电脑修好了") + cuttest("做好了这件事情就一了百了了") + cuttest("人们审美的观点是不同的") + cuttest("我们买了一个美的空调") + cuttest("线程初始化时我们要注意") + cuttest("一个分子是由好多原子组织成的") + cuttest("祝你马到功成") + cuttest("他掉进了无底洞里") + cuttest("中国的首都是北京") + cuttest("孙君意") + cuttest("外交部发言人马朝旭") + cuttest("领导人会议和第四届东亚峰会") + cuttest("在过去的这五年") + cuttest("还需要很长的路要走") + cuttest("60周年首都阅兵") + cuttest("你好人们审美的观点是不同的") + cuttest("买水果然后来世博园") + cuttest("买水果然后去世博园") + cuttest("但是后来我才知道你是对的") + cuttest("存在即合理") + cuttest("的的的的的在的的的的就以和和和") + cuttest("I love你,不以为耻,反以为rong") + cuttest("因") + cuttest("") + cuttest("hello你好人们审美的观点是不同的") + cuttest("很好但主要是基于网页形式") + cuttest("hello你好人们审美的观点是不同的") + cuttest("为什么我不能拥有想要的生活") + cuttest("后来我才") + cuttest("此次来中国是为了") + cuttest("使用了它就可以解决一些问题") + cuttest(",使用了它就可以解决一些问题") + cuttest("其实使用了它就可以解决一些问题") + cuttest("好人使用了它就可以解决一些问题") + cuttest("是因为和国家") + cuttest("老年搜索还支持") + cuttest("干脆就把那部蒙人的闲法给废了拉倒!RT @laoshipukong : 27日,全国人大常委会第三次审议侵权责任法草案,删除了有关医疗损害责任“举证倒置”的规定。在医患纠纷中本已处于弱势地位的消费者由此将陷入万劫不复的境地。 ") + cuttest("大") + cuttest("") + cuttest("他说的确实在理") + cuttest("长春市长春节讲话") + cuttest("结婚的和尚未结婚的") + cuttest("结合成分子时") + cuttest("旅游和服务是最好的") + cuttest("这件事情的确是我的错") + cuttest("供大家参考指正") + cuttest("哈尔滨政府公布塌桥原因") + cuttest("我在机场入口处") + cuttest("邢永臣摄影报道") + cuttest("BP神经网络如何训练才能在分类时增加区分度?") + cuttest("南京市长江大桥") + cuttest("应一些使用者的建议,也为了便于利用NiuTrans用于SMT研究") + cuttest('长春市长春药店') + cuttest('邓颖超生前最喜欢的衣服') + cuttest('胡锦涛是热爱世界和平的政治局常委') + cuttest('程序员祝海林和朱会震是在孙健的左面和右面, 范凯在最右面.再往左是李松洪') + cuttest('一次性交多少钱') + cuttest('两块五一套,三块八一斤,四块七一本,五块六一条') + cuttest('小和尚留了一个像大和尚一样的和尚头') + cuttest('我是中华人民共和国公民;我爸爸是共和党党员; 地铁和平门站') + cuttest('张晓梅去人民医院做了个B超然后去买了件T恤') + cuttest('AT&T是一件不错的公司,给你发offer了吗?') + cuttest('C++和c#是什么关系?11+122=133,是吗?PI=3.14159') + cuttest('你认识那个和主席握手的的哥吗?他开一辆黑色的士。')