python实现成语找一找

网上经常有些从N个字里面找成语的小游戏,那么怎么用python把成语组合找出来呢?

准备词典

从网上下载一个成语的词典、每行一个成语,保存成 word.txt。

代码实现

1.构建一个首字-成语的字典模型 predict.model

import pickle
from pathlib import Path

seq = Path('word.txt').read_text().split('\n')
predict = {}
for word in seq:
    pre = list(word)[0]
    predict.setdefault(pre, [])
    predict[pre].append(word)
    
with open('predict.model', 'wb') as f:
    f.write(pickle.dumps(predict))

2.实现成语查找的类

import pickle

class Idiom(object):
    def __init__(self, model_path='predict.model'):
        self.predict = pickle.loads(Path(model_path).read_bytes())
        
    def find(self, text):
        # 生成单字集合
        chas = set(text)
        for cha in chas:
            # 获取单字对应的备选成语
            words = self.predict.get(cha, [])
            if not words:
                continue
            for word in words:
                # 检查备选成语的字是否在单字集合中
                for i in word:
                    if i not in chas:
                        break
                # for循环执行完即备选成语由单字集合中的字组成
                else:
                     print(word)

3.现在就可以开始找成语啦

# 网上一般的成语游戏的备选字比这里少很多
s = '''月光如流水一般,静静地泻在这一片叶子和花上。
       薄薄的青雾浮起在荷塘里。
       叶子和花仿佛在牛乳中洗过一样;又像笼着轻纱的梦。
       虽然是满月,天上却有一层淡淡的云,所以不能朗照;
       但我以为这恰是到了好处——酣眠固不可少,小睡也别有风味的。
       月光是隔了树照过来的,高处丛生的灌木,落下参差的斑驳的黑影,峭楞楞如鬼一般;
       弯弯的杨柳的稀疏的倩影,却又像是画在荷叶上。
       塘中的月色并不均匀;但光与影有着和谐的旋律,如梵婀玲上奏着的名曲。''')
obj = Idiom()
obj.find(s)

找出来的成语有:

一天一地、别有风味、别有天地、恰到好处、落花流水、水流花落、
水天一色、流水落花、风轻云淡、月黑风高、高高在上、云淡风轻、
能上能下、不上不落、不上不下、不以为然、不差上下、名高天下、
名满天下、天下为笼、天高地下、参差不一
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值