将搜狗词库(.scel格式)转化为txt格式
参考:http://blog.csdn.net/zhangzhenhu/article/details/7014271
#!/usr/bin/python
# -*- coding: utf-8 -*-
import struct
import os
import sys #拼音表偏移,
startPy = 0x1540
#汉语词组表偏移
startChinese = 0x2628
#全局拼音表
GPy_Table = {} #解析结果
#元组(词频,拼音,中文词组)的列表
GTable = [] def byte2str(data):
'''将原始字节码转为字符串'''
i = 0
length = len(data)
ret = u''
while i < length:
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
return ret
#获取拼音表
def getPyTable(data): if data[0:4] != "\x9D\x01\x00\x00":
return None
data = data[4:]
pos = 0
length = len(data)
while pos < length:
index = struct.unpack('H',data[pos]+data[pos+1])[0]
#print index,
pos += 2
l = struct.unpack('H',data[pos]+data[pos+1])[0]
#print l,
pos += 2
py = byte2str(data[pos:pos+l])
#print py
GPy_Table[index]=py
pos += l #获取一个词组的拼音
def getWordPy(data):
pos = 0
length = len(data)
ret = u''
while pos < length: index = struct.unpack('H',data[pos]+data[pos+1])[0]
ret += GPy_Table[index]
pos += 2
return ret #获取一个词组
def getWord(data):
pos = 0
length = len(data)
ret = u''
while pos < length: index = struct.unpack('H',data[pos]+data[pos+1])[0]
ret += GPy_Table[index]
pos += 2
return ret #读取中文表
def getChinese(data):
#import pdb
#pdb.set_trace() pos = 0
length = len(data)
while pos < length:
#同音词数量
same = struct.unpack('H',data[pos]+data[pos+1])[0]
#print '[same]:',same, #拼音索引表长度
pos += 2
py_table_len = struct.unpack('H',data[pos]+data[pos+1])[0]
#拼音索引表
pos += 2
# py = getWordPy(data[pos: pos+py_table_len]) #中文词组
pos += py_table_len
for i in xrange(same):
#中文词组长度
c_len = struct.unpack('H',data[pos]+data[pos+1])[0]
#中文词组
pos += 2
word = byte2str(data[pos: pos + c_len])
#扩展数据长度
pos += c_len
ext_len = struct.unpack('H',data[pos]+data[pos+1])[0]
#词频
pos += 2
count = struct.unpack('H',data[pos]+data[pos+1])[0] # 保存
# GTable.append((count,py,word))
GTable.append(word)
# 到下个词的偏移位置
pos += ext_len def deal(file_name):
print '-'*60
f = 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 u"词库名:" ,byte2str(data[0x130:0x338])#.encode('GB18030')
print u"词库类型:" ,byte2str(data[0x338:0x540])#.encode('GB18030')
print u"描述信息:" ,byte2str(data[0x540:0xd40])#.encode('GB18030')
# print u"词库示例:",byte2str(data[0xd40:startPy])#.encode('GB18030')
#
getPyTable(data[startPy:startChinese])
getChinese(data[startChinese:]) if __name__ == '__main__':
path1 = r'D:\myProject\textClassifier\inputfile1/'.replace('\\', '/')
path2 = r'D:\myProject\textClassifier\outputfile/'.replace('\\', '/')
for filename in os.listdir(path1):
print filename
deal(path1 + filename) # 保存结果
f = open(path2 + 'sougou.txt', 'w')
# 删除相同元素
GTable_filter = sorted(set(GTable), key=GTable.index) for word in GTable_filter:
f.write(unicode(word).encode('GB18030'))
f.write('\n')
f.close()
有个问题没解决,就是在调用deal函数的时候,如果我这样调用的话,deal(filename)的话,就会显示IOError: [Errno 2] No such file or directory: 'IT\xbc\xc6\xcb\xe3\xbb\xfa.scel'这个错误,比如输入全路径才正确,很困惑。
将搜狗词库(.scel格式)转化为txt格式的更多相关文章
- 将搜狗词库.scel格式转化为.txt格式
由于项目中要用到词库,而下载的搜狗词库是.scel格式,所以就用python脚本将搜狗词库.scel格式文件转化为.txt格式文件. #!/bin/python # -*- coding: utf-8 ...
- 中州韵输入法(rime)导入搜狗词库
rime是一个非常优秀的输入法,linux平台下的反应速度远超搜狗,也没有隐私风险.2012年开始接触它,到后来抛弃了它,因为rime自带的词库真的太弱了,也懒得折腾.最近发现一个词库转换软件叫ime ...
- 输入法词库解析(二)搜狗拼音细胞词库.scel(.qcel)
详细代码:https://github.com/cxcn/dtool 前言 .scel 是搜狗拼音输入法所使用的细胞词库格式,可以在 https://pinyin.sogou.com/dict/ 下载 ...
- (转载)Windows下小狼毫输入法(Rime)的安装与配置(含导入搜狗词库)
div id="cnblogs_post_body" class="blogpost-body"> 最近彻底烦透了搜狗拼音输入法的各种流氓行为,自动升级不 ...
- Fcitx使用搜狗词库与皮肤
在 \(\text{Linux}\) 环境下,\(\text{Fcitx}\) 确实是最好用的开源输入法之一.然而 \(\text{Windows}\) 下的巨头输入法 -- 搜狗,对 \(\text ...
- Elementary OS 使用fcitx安装搜狗词库、搜狗输入法(Linux通用)
刚开始接触Linux的小伙伴可能比较懵逼,我要使用ibus输入法还是fcitx(小企鹅)输入法,其实这两种都不能说是输入法,Linux中输入法的使用是依赖于输入法框架的,其中搜狗输入法和百度输入法都是 ...
- CentOS安装搜狗词库
中文输入使用ibus-pinyin. 在ibus-pinyin里使用搜狗词库 # wget http://hslinuxextra.googlecode.com/files/sougou-phrase ...
- 安装.cer证书并将证书从.cer格式转化为.pem格式
## 安装.cer证书并将证书从.cer格式转化为.pem格式 ### 安装.cer证书到本地 打开*运行*窗口 输入MMC.exe, 单击*确定* 在打开的控制台1的窗口中. 选择*文件*, 选择* ...
- TensorFlow 自定义模型导出:将 .ckpt 格式转化为 .pb 格式
本文承接上文 TensorFlow-slim 训练 CNN 分类模型(续),阐述通过 tf.contrib.slim 的函数 slim.learning.train 训练的模型,怎么通过人为的加入数据 ...
- 腾讯下载的视频qlv格式转化为MP4格式
最近在看腾讯视频的时候发现下载下来的视频格式都是qlv格式,且不能用其他播放器播放,甚是恼怒,网上找了很多方法都很繁琐,于是自己写了一个小程序来处理这个问题.把下载下来的qlv格式转化为MP4格式 首 ...
随机推荐
- 21_python集合总结
集合 1.无序的:没有索引,不能改和删出某个元素,不能返回某个索引元素2.不可重复 : 可以利用set去重3.数学运算:交集.并集.差集,反交集,超集/子集4.里面的元素:必须是可哈希的,不可变的.他 ...
- java对象表示方式--XStream
对象表示有各种各样的方式,序列化只是其中的一种而已.表示一个对象的目的无非就是为了对象<---->IO之间相互认识,至于怎么认识,那就有很多选择了.除了之前讲过的序列化,还可以选择将数据J ...
- MySQL5学习笔记(三)
系统变量 mysqld服务器维护两种变量.全局变量(GLOBAL)影响服务器整体操作.会话变量(SESSION)影响具体客户端连接的操作. 当服务器启动时,它将所有全局变量初始化为默认值.这些 ...
- BZOJ 1415: [Noi2005]聪聪和可可 [DP 概率]
传送门 题意:小兔子乖乖~~~ 题意·真:无向图吗,聪抓可,每个时间聪先走可后走,聪一次可以走两步,朝着里可最近且点编号最小的方向:可一次只一步,等概率走向相邻的点或不走 求聪抓住可的期望时间 和游走 ...
- Linux修改IP永久生效
修改IP永久生效按以下方法: 1)修改配置文件vi /etc/sysconfig/network-scripts/ifcfg-eth0(eth0,第一块网卡,如果是第二块则为eth1) 按如下修改ip ...
- Getting the pixel coordinates of text or ticks in matplotlib
The exact pixel coordinates of title, labels, legends or ticks are important information for the tra ...
- 关于字符型char变量
写程序时,意外发现个很不容易察觉问题出在哪的问题的 scanf("%c",&ch); scanf("%c",&c); printf(" ...
- qt程序启动画面
- web前端 ajax请求上传图片数据类型处理
form: function (url, paras, files, success) {//上传的文件类型是MultipartFile[]//如果把需要的参数直接传入,则会请求错误//设置请求参数的 ...
- docker cs50 ide 安装
ECS上搭建Docker(CentOS7): https://help.aliyun.com/document_detail/51853.html docker官方文档: https://docs.d ...