python词库介绍_解析搜狗词库(python)
#!/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)相关推荐
- python词库_解析搜狗词库(python)
#!/usr/bin/python # -*- coding: utf-8 -*- import struct import sys import binascii import pdb #搜狗的sc ...
- python下面的代码_解析一下下面的python代码?
class Model(dict, metaclass=ModelMetaclass): # 初始化, 没啥好说的 def __init__(self, **kw): super(Model, sel ...
- [python-thirdLib] Python中第三方的用于解析HTML的库:BeautifulSoup
From: http://www.crifan.com/python_third_party_lib_html_parser_beautifulsoup/ 背景 在Python去写爬虫,网页解析等过程 ...
- pycharm中python镜像源介绍与配置-提升下载库的速度
pycharm中python镜像源介绍与配置-提升下载库的速度 pycharm中python镜像源介绍与配置-提升下载库的速度 1 2 3 各镜像源介绍 ① 阿里镜像: https://mirrors ...
- python新手入门教程思路-Python新手入门教程_教你怎么用Python做数据分析
Python新手入门教程_教你怎么用Python做数据分析 跟大家讲了这么多期的Python教程,有小伙伴在学Python新手教程的时候说学Python比较复杂的地方就是资料太多了,比较复杂.很多网上 ...
- python网络安全应用中心_安全人员常用的python库
如果你对漏洞挖掘.逆向工程分析或渗透测试感兴趣的话,我第一个要推荐给你的就是Python编程语言.Python不仅语法简单上手容易,而且它还有大量功能强大的库和程序可供我们使用.在这篇文章中,我们会给 ...
- 用python做自我介绍_用python做个自我介绍(python入门教程)_逻辑教育
原标题:用python做个自我介绍(python入门教程)_逻辑教育 本文涉及的python基础语法为:数据类型等 数字类型 1. 字符串的拼接 我们在上一章中已经简单介绍了一下字符串的创建方式,这里 ...
- python office库使用_看完这篇Python操作PPT总结,从此使用Python玩转Office全家桶就没有压力了!...
一.导读 大家好,今天依旧是Python办公自动化基础系列,在之前我们分别详细讲解了 今天本文将基于第三方库pptx,详细讲解如何使用Python操作Office全家桶最后一位--PPT. 二.安装 ...
- python创建虚拟环境打包_用虚拟环境保存库文件--Python打包-阿里云开发者社区
用虚拟环境保存库文件 如果你同时负责多个 Python 项目,或者想要轻松打包某个项目及其关联的库文件,再 或者你担心已安装的库之间可能有冲突,那么你可以安装一个 Python 虚拟环境来分而 治之. ...
- macbook自带python保存文件夹_在mac下查找python包存放路径site-packages的实现方法 在Mac系统下python如何安装第三方函数库?...
mac怎么查看python的site-package位置世界上最伤心的事,不是你爱的人不爱你,而是他爱你过后,最后却不爱你. 可以通过find命令查看,参考demo如下: sudo find / -n ...
最新文章
- python 连接sqlite及操作
- 测试使用2mH的工字型电感在接收150kHz导航信号中性能
- sklearn综合示例3:逻辑回归
- java中runnable_Java:在Runnable中处理RuntimeException
- ajax中怎么验证data,我应该在jQuery的ajax成功处理程序中验证响应数据吗?
- python 中有x y y x吗_Python: x += y 与 x = x+y 的区别
- 乐高科技系列搭建指南 pdf_近30年十辆乐高科技系列摩托车回顾_积木
- php post 视频教程,PHP教程:POST数据的三种方法
- 洛谷 U5737 纸条
- SU插件情报局 | Thom Thom:3D文本编辑器
- temp的作用c语言,temp的使用
- 50本关于软件测试的书籍
- 电压的降额 Voltage Derating
- 【公众号】公众号网页跳转关注微信公众号
- 小米手机开启“启用MIUI优化”,导致Android Studio无法成功直接安装
- DCU Streamer Prefetcher
- 教你怎么将所有文件名称进行替换
- 投稿经验分享之五:申请专利
- Make a cool intro for your Android app.
- 刘德华--1野性的自然