#!/usr/bin/python#-*- coding: utf-8 -*-

importstructimportsysimportbinasciiimportpdb#搜狗的scel词库就是保存的文本的unicode编码,每两个字节一个字符(中文汉字或者英文字母)#找出其每部分的偏移位置即可#主要两部分#1.全局拼音表,貌似是所有的拼音组合,字典序#格式为(index,len,pinyin)的列表#index: 两个字节的整数 代表这个拼音的索引#len: 两个字节的整数 拼音的字节长度#pinyin: 当前的拼音,每个字符两个字节,总长len# #2.汉语词组表#格式为(same,py_table_len,py_table,{word_len,word,ext_len,ext})的一个列表#same: 两个字节 整数 同音词数量#py_table_len: 两个字节 整数#py_table: 整数列表,每个整数两个字节,每个整数代表一个拼音的索引#

#word_len:两个字节 整数 代表中文词组字节数长度#word: 中文词组,每个中文汉字两个字节,总长度word_len#ext_len: 两个字节 整数 代表扩展信息的长度,好像都是10#ext: 扩展信息 前两个字节是一个整数(不知道是不是词频) 后八个字节全是0#

#{word_len,word,ext_len,ext} 一共重复same次 同音词 相同拼音表

#拼音表偏移,

startPy = 0x1540;#汉语词组表偏移

startChinese = 0x2628;#全局拼音表

GPy_Table={}#解析结果#元组(词频,拼音,中文词组)的列表

GTable =[]defbyte2str(data):'''将原始字节码转为字符串'''i=0;

length=len(data)

ret= u''

while i

x= data[i] + data[i+1]

t= unichr(struct.unpack('H',x)[0])if t == u'\r':

ret+= u'\n'

elif t != u' ':

ret+=t

i+= 2

returnret#获取拼音表

defgetPyTable(data):if data[0:4] != "\x9D\x01\x00\x00":returnNone

data= data[4:]

pos=0

length=len(data)while pos

index= struct.unpack('H',data[pos]+data[pos+1])[0]#print index,

pos += 2l= struct.unpack('H',data[pos]+data[pos+1])[0]#print l,

pos += 2py= byte2str(data[pos:pos+l])#print py

GPy_Table[index]=py

pos+=l#获取一个词组的拼音

defgetWordPy(data):

pos=0

length=len(data)

ret= u''

while pos

index= struct.unpack('H',data[pos]+data[pos+1])[0]

ret+=GPy_Table[index]

pos+= 2

returnret#获取一个词组

defgetWord(data):

pos=0

length=len(data)

ret= u''

while pos

index= struct.unpack('H',data[pos]+data[pos+1])[0]

ret+=GPy_Table[index]

pos+= 2

returnret#读取中文表

defgetChinese(data):#import pdb

#pdb.set_trace()

pos=0

length=len(data)while pos

same = struct.unpack('H',data[pos]+data[pos+1])[0]#print '[same]:',same,

#拼音索引表长度

pos += 2py_table_len= struct.unpack('H',data[pos]+data[pos+1])[0]#拼音索引表

pos += 2py= getWordPy(data[pos: pos+py_table_len])#中文词组

pos +=py_table_lenfor i inxrange(same):#中文词组长度

c_len = struct.unpack('H',data[pos]+data[pos+1])[0]#中文词组

pos += 2word= byte2str(data[pos: pos +c_len])#扩展数据长度

pos +=c_len

ext_len= struct.unpack('H',data[pos]+data[pos+1])[0]#词频

pos += 2count= struct.unpack('H',data[pos]+data[pos+1])[0]#保存

GTable.append((count,py,word))#到下个词的偏移位置

pos +=ext_lendefdeal(file_name):print '-'*60f= open(file_name,'rb')

data=f.read()

f.close()if data[0:12] !="\x40\x15\x00\x00\x44\x43\x53\x01\x01\x00\x00\x00":print "确认你选择的是搜狗(.scel)词库?"sys.exit(0)#pdb.set_trace()

print "词库名:" ,byte2str(data[0x130:0x338])#.encode('GB18030')

print "词库类型:" ,byte2str(data[0x338:0x540])#.encode('GB18030')

print "描述信息:" ,byte2str(data[0x540:0xd40])#.encode('GB18030')

print "词库示例:",byte2str(data[0xd40:startPy])#.encode('GB18030')

getPyTable(data[startPy:startChinese])

getChinese(data[startChinese:])if __name__ == '__main__':#将要转换的词库添加在这里就可以了

o = ['计算机词汇大全【官方推荐】.scel','IT计算机.scel','计算机词汇大全【官方推荐】.scel','北京市城市信息精选.scel','常用餐饮词汇.scel','成语.scel','成语俗语【官方推荐】.scel','法律词汇大全【官方推荐】.scel','房地产词汇大全【官方推荐】.scel','手机词汇大全【官方推荐】.scel','网络流行新词【官方推荐】.scel','歇后语集锦【官方推荐】.scel','饮食大全【官方推荐】.scel',

]#for f in o:

#deal(f)

print sys.argv[1]

deal( sys.argv[1] )#保存结果

f = open('sougou.txt','w')for count,py,word inGTable:#GTable保存着结果,是一个列表,每个元素是一个元组(词频,拼音,中文词组),有需要的话可以保存成自己需要个格式

#我没排序,所以结果是按照上面输入文件的顺序

f.write( unicode('{%(count)s}' %{'count':count}+py+' '+ word).encode('GB18030') )#最终保存文件的编码,可以自给改

f.write('\n')

f.close()

python词库介绍_解析搜狗词库(python)相关推荐

  1. python词库_解析搜狗词库(python)

    #!/usr/bin/python # -*- coding: utf-8 -*- import struct import sys import binascii import pdb #搜狗的sc ...

  2. python下面的代码_解析一下下面的python代码?

    class Model(dict, metaclass=ModelMetaclass): # 初始化, 没啥好说的 def __init__(self, **kw): super(Model, sel ...

  3. [python-thirdLib] Python中第三方的用于解析HTML的库:BeautifulSoup

    From: http://www.crifan.com/python_third_party_lib_html_parser_beautifulsoup/ 背景 在Python去写爬虫,网页解析等过程 ...

  4. pycharm中python镜像源介绍与配置-提升下载库的速度

    pycharm中python镜像源介绍与配置-提升下载库的速度 pycharm中python镜像源介绍与配置-提升下载库的速度 1 2 3 各镜像源介绍 ① 阿里镜像: https://mirrors ...

  5. python新手入门教程思路-Python新手入门教程_教你怎么用Python做数据分析

    Python新手入门教程_教你怎么用Python做数据分析 跟大家讲了这么多期的Python教程,有小伙伴在学Python新手教程的时候说学Python比较复杂的地方就是资料太多了,比较复杂.很多网上 ...

  6. python网络安全应用中心_安全人员常用的python库

    如果你对漏洞挖掘.逆向工程分析或渗透测试感兴趣的话,我第一个要推荐给你的就是Python编程语言.Python不仅语法简单上手容易,而且它还有大量功能强大的库和程序可供我们使用.在这篇文章中,我们会给 ...

  7. 用python做自我介绍_用python做个自我介绍(python入门教程)_逻辑教育

    原标题:用python做个自我介绍(python入门教程)_逻辑教育 本文涉及的python基础语法为:数据类型等 数字类型 1. 字符串的拼接 我们在上一章中已经简单介绍了一下字符串的创建方式,这里 ...

  8. python office库使用_看完这篇Python操作PPT总结,从此使用Python玩转Office全家桶就没有压力了!...

    一.导读 大家好,今天依旧是Python办公自动化基础系列,在之前我们分别详细讲解了 今天本文将基于第三方库pptx,详细讲解如何使用Python操作Office全家桶最后一位--PPT. 二.安装 ...

  9. python创建虚拟环境打包_用虚拟环境保存库文件--Python打包-阿里云开发者社区

    用虚拟环境保存库文件 如果你同时负责多个 Python 项目,或者想要轻松打包某个项目及其关联的库文件,再 或者你担心已安装的库之间可能有冲突,那么你可以安装一个 Python 虚拟环境来分而 治之. ...

  10. macbook自带python保存文件夹_在mac下查找python包存放路径site-packages的实现方法 在Mac系统下python如何安装第三方函数库?...

    mac怎么查看python的site-package位置世界上最伤心的事,不是你爱的人不爱你,而是他爱你过后,最后却不爱你. 可以通过find命令查看,参考demo如下: sudo find / -n ...

最新文章

  1. python 连接sqlite及操作
  2. 测试使用2mH的工字型电感在接收150kHz导航信号中性能
  3. sklearn综合示例3:逻辑回归
  4. java中runnable_Java:在Runnable中处理RuntimeException
  5. ajax中怎么验证data,我应该在jQuery的ajax成功处理程序中验证响应数据吗?
  6. python 中有x y y x吗_Python: x += y 与 x = x+y 的区别
  7. 乐高科技系列搭建指南 pdf_近30年十辆乐高科技系列摩托车回顾_积木
  8. php post 视频教程,PHP教程:POST数据的三种方法
  9. 洛谷 U5737 纸条
  10. SU插件情报局 | Thom Thom:3D文本编辑器
  11. temp的作用c语言,temp的使用
  12. 50本关于软件测试的书籍
  13. 电压的降额 Voltage Derating
  14. 【公众号】公众号网页跳转关注微信公众号
  15. 小米手机开启“启用MIUI优化”,导致Android Studio无法成功直接安装
  16. DCU Streamer Prefetcher
  17. 教你怎么将所有文件名称进行替换
  18. 投稿经验分享之五:申请专利
  19. Make a cool intro for your Android app.
  20. 刘德华--1野性的自然

热门文章

  1. 蓝牙模块的分类和对应的属性特点
  2. Plc编程入门基础知识,在短时间内如何学会编程
  3. LNMP(Nginx服务,MySQL 服务,安装PHP服务 手动安装技术文档)
  4. 新手必看:PS钢笔抠图教程
  5. java网上书店模板_网上书店模板下载.doc
  6. 网络安全问题及防护措施有哪些
  7. 如何修改Tomcat版本
  8. C语言井字棋人人对战源代码,回忆儿时游戏-井字棋(完整代码)
  9. 第十三次博文:教你从立创EDA库导入AD库,保姆级别!
  10. linux下keytool生成证书_keytool命令