资源简介
scel2txt.py
代码片段和文件信息
#!/usr/bin/env python
# _*_ coding:utf-8 _*_
#
# @Version : 1.0
# @Time : 2018/8/17
# @Author : 圈圈烃
# @File : scel2txt.py
# @Description: 将搜狗的词库.scel文件转化为.txt文件
# 本人在之前作者的基础上进行了部分修改
# 添加了单个文件转化函数single_file()
# 添加了多个文件转化函数batch_file()
#
import struct
import os
############################################################################
# 第二原作者
# 由于原代码不适用python3且有大量bug
# 以及有函数没有必要使用且一些代码书写不太规范或冗余
# 所以本人在原有的大框架基本不动的情况下作了大量的细节更改
# 使得没有乱码出现,文件夹导入更方便等等
# Author:Ling Yue Taiyuan U of Tech
# Blog: http://blog.yueling.me
############################################################################
# 原作者:
# 搜狗的scel词库就是保存的文本的unicode编码,每两个字节一个字符(中文汉字或者英文字母)
# 找出其每部分的偏移位置即可
# 主要两部分
# 1.全局拼音表,貌似是所有的拼音组合,字典序
# 格式为(indexlenpinyin)的列表
# index: 两个字节的整数 代表这个拼音的索引
# len: 两个字节的整数 拼音的字节长度
# pinyin: 当前的拼音,每个字符两个字节,总长len
#
# 2.汉语词组表
# 格式为(samepy_table_lenpy_table{word_lenwordext_lenext})的一个列表
# same: 两个字节 整数 同音词数量
# py_table_len: 两个字节 整数
# py_table: 整数列表,每个整数两个字节每个整数代表一个拼音的索引
#
# word_len:两个字节 整数 代表中文词组字节数长度
# word: 中文词组每个中文汉字两个字节,总长度word_len
# ext_len: 两个字节 整数 代表扩展信息的长度,好像都是10
# ext: 扩展信息 前两个字节是一个整数(不知道是不是词频) 后八个字节全是0
#
# {word_lenwordext_lenext} 一共重复same次 同音词 相同拼音表
#############################################################################
# 拼音表偏移
startPy = 0x1540;
# 汉语词组表偏移
startChinese = 0x2628;
# 全局拼音表
GPy_Table = {}
# 解析结果
# 元组(词频拼音中文词组)的列表
GTable = []
def byte2str(data):
“““
原始字节码转为字符串
:param data:
:return:
“““
pos = 0
str = ‘‘
while pos < len(data):
c = chr(struct.unpack(‘H‘ bytes([data[pos] data[pos + 1]]))[0])
if c != chr(0):
str += c
pos += 2
return str
def getPyTable(data):
“““
获取拼音表
:param data:
:return:
“““
data = data[4:]
pos = 0
while pos < len(data):
index = struct.unpack(‘H‘ bytes([data[pos] data[pos + 1]]))[0]
pos += 2
lenPy = struct.unpack(‘H‘ bytes([data[pos] data[pos + 1]]))[0]
pos += 2
py = byte2str(data[pos:pos + lenPy])
GPy_Table[index] = py
pos += lenPy
def getWordPy(data):
“““
获取一个词组的拼音
:param data:
:return:
“““
pos = 0
ret = ‘‘
while pos < len(data):
index = struct.unpack(‘H‘ bytes([data[pos] data[pos + 1]]))[0]
ret += GPy_Table[index]
相关资源
- 小甲鱼Python零基础免费全套视频教学
- 传智播客python最新视频.txt
- Python升级3.6强力Django杀手级Xadmin打造
- shuake.py
- 51Job.py
- python3网络爬虫与开发实战崔庆才PDF百
- python300G视频书籍教程.zip
- 5652华尔街见闻.py
- hulk.py
- 麦子学院Python视频.txt
- python核心基础.txt
- 仿真3D版本.py
- Python零基础10天进阶班.rar
- 用Python自动办公,做职场高手.txt
- 基于python实现的http接口自动化测试框
- spider_LOL.py
- Python教程.rar
- 小甲鱼零基础入门学习Python视频教程
- 麦子学院Python全套视频.txt
- 《疯狂Python讲义》习题答案.rar
- publishHelper.py
- sendInfo.py
- Python零基础10天进阶班.docx
- Python数据科学指南_Code.zip
- 爬取URP教务网站学籍信息.py
- Anaconda历史版本Python3.6版本.zip
- car_detected.py
- Python-图像分割Keras在Keras中实现Segne
评论
共有 条评论