python成语接龙代码_基于Python经典版成语接龙逻辑实现
import structimport os
# 搜狗的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=[]
# 原始字节码转为字符串
def byte2str(data):
pos= 0str= ''
while pos
c= chr(struct.unpack('H', bytes([data[pos], data[pos + 1]]))[0])if c != chr(0):
str+=c
pos+= 2
returnstr
# 获取拼音表
def getPyTable(data):
data= data[4:]
pos= 0
while pos
index= struct.unpack('H', bytes([data[pos],data[pos + 1]]))[0]
pos+= 2lenPy= struct.unpack('H', bytes([data[pos], data[pos + 1]]))[0]
pos+= 2py= byte2str(data[pos:pos +lenPy])
GPy_Table[index]=py
pos+=lenPy
# 获取一个词组的拼音
def getWordPy(data):
pos= 0ret= ''
while pos
index= struct.unpack('H', bytes([data[pos], data[pos + 1]]))[0]
ret+=GPy_Table[index]
pos+= 2
returnret
# 读取中文表
def getChinese(data):
pos= 0
while pos
# 同音词数量
same= struct.unpack('H', bytes([data[pos], data[pos + 1]]))[0]
# 拼音索引表长度
pos+= 2py_table_len= struct.unpack('H', bytes([data[pos], data[pos + 1]]))[0]
# 拼音索引表
pos+= 2py= getWordPy(data[pos: pos +py_table_len])
# 中文词组
pos+=py_table_lenfor i inrange(same):
# 中文词组长度
c_len= struct.unpack('H', bytes([data[pos], data[pos + 1]]))[0]
# 中文词组
pos+= 2word= byte2str(data[pos: pos +c_len])
# 扩展数据长度
pos+=c_len
ext_len= struct.unpack('H', bytes([data[pos], data[pos + 1]]))[0]
# 词频
pos+= 2count= struct.unpack('H', bytes([data[pos], data[pos + 1]]))[0]
# 保存
GTable.append((count, py, word))
# 到下个词的偏移位置
pos+=ext_len
def scel2txt(file_name):
print('-' * 60)
with open(file_name,'rb') asf:
data=f.read()
print("词库名:", byte2str(data[0x130:0x338])) # .encode('GB18030')
print("词库类型:", byte2str(data[0x338:0x540]))
print("描述信息:", byte2str(data[0x540:0xd40]))
print("词库示例:", byte2str(data[0xd40:startPy]))
getPyTable(data[startPy:startChinese])
getChinese(data[startChinese:])if __name__ == '__main__':
# scel所在文件夹路径
in_path= "E:\python_workspace"# 输出词典所在文件夹路径
out_path= "coal_dict.txt"fin= [fname for fname in os.listdir(in_path) if fname[-5:] == ".scel"]for f infin:
f=os.path.join(in_path, f)
scel2txt(f)
# 保存结果
with open(out_path,'w', encoding='utf8') asf:
f.writelines([word+'\n' for count, py, word in GTable])
python成语接龙代码_基于Python经典版成语接龙逻辑实现相关推荐
- python名片打印程序代码_基于Python的名片识别接口调用代码实例
#!/usr/bin/python # -*- coding: utf-8 -*- import json, urllib from urllib import urlencode #-------- ...
- python个人信息查询代码_基于Python的商标信息查询api调用代码实例
#!/usr/bin/python # -*- coding: utf-8 -*- import json, urllib from urllib import urlencode #-------- ...
- python输入汉字的代码_基于python的汉字转GBK码实现代码
如图,"广"的编码为%B9%E3,暂且把%B9称为节编码,%E3为字符编码(第二编码). 思路: 从GBK编码页面收集汉字 http://ff.163.com/newflyff/g ...
- 基于python爬虫技术的应用_基于Python爬虫技术的应用
办公自动化杂志 一.引言 本文主要是对 Python 爬虫技术进行阐述,基于 python 的爬虫与其他语言相比的有很多优势.通过爬去某个网站的所有新闻这个案例,来进一步阐释 Python 爬虫技术的 ...
- python点名代码_基于python tkinter的点名小程序功能的实例代码
基于python tkinter的点名小程序功能的实例代码,花名册,次数,窗口,未找到,初始化 基于python tkinter的点名小程序功能的实例代码 易采站长站,站长之家为您整理了基于pytho ...
- python的坐标代码_基于Python的地图坐标服务接口调用代码实例
代码描述:基于Python的地图坐标服务接口调用代码实例 关联数据:地图坐标服务 接口地址:http://www.juhe.cn/docs/api/id/32 #!/usr/bin/python # ...
- python登录界面源码_基于Python的自媒体小助手---登录页面的实现代码
核心技术:Python3.7 GUI技术:Tkinter (Python已经内置) 好多文章写Python GUI之tkinter窗口视窗教程大集合(看这篇就够了) 我看了N遍也没够好多东西都没有就基 ...
- 基于python的音频播放器_基于python实现音乐播放器代码实例
基于python实现音乐播放器代码实例,一首,函数,按钮,布局,音乐 基于python实现音乐播放器代码实例 易采站长站,站长之家为您整理了基于python实现音乐播放器代码实例的相关内容. 核心播放 ...
- 随机数写excel java代码_基于python实现在excel中读取与生成随机数写入excel中
搜索热词 具体要求是:在一份已知的excel表格中读取学生的学号与姓名,再将这些数据放到新的excel表中的第一列与第二列,最后再生成随机数作为学生的考试成绩. 首先要用到的数据库有:xlwt,xlr ...
最新文章
- Rocksdb 的 MergeOperator 简单使用记录
- 根据c语言数组定义填写下表,C语言程序设计 自测题(三)
- BSP场景管理方法简介
- 寻找最大的K个数(上)
- Linux——安装FTP服务器
- LeetCode 1403. 非递增顺序的最小子序列(排序)
- 计算机会计和传统手工会计的区别,手工会计与计算机会计之间的区别.doc
- c语言的开方程序,详细解析C语言中的开方实现
- 雨流计数法的matlab实现,采用三点法与四点法
- 区块链开源代码什么意思_区块链可以从开源中学到什么
- java string通配符_java通配符
- CCF试题 201903-2 二十四点解析
- 如何解决移动端 Retina 屏 1px 像素问题 ?
- 更适合运动的耳机,设计时尚轻巧好用,南卡Runner CC3上手
- 【记录】深度学习之蒸馏法训练网络
- 市北·GMIS 2019 全球数据智能峰会全记录
- 网络线缆连接器和线槽
- 菜鸟学算法——动态规划(二)
- B. Ela‘s Fitness and the Luxury Number codeforces 1737B
- 清华大学期末复习方法