python實現成語找一找

網上常常有些從N個字裏面找成語的小遊戲,那麼怎麼用python把成語組合找出來呢?python

準備詞典

從網上下載一個成語的詞典、每行一個成語,保存成 word.txt。app

代碼實現

1.構建一個首字-成語的字典模型 predict.modelcode

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.如今就能夠開始找成語啦get

# 網上通常的成語遊戲的備選字比這裏少不少
s = '''月光如流水通常,靜靜地瀉在這一片葉子和花上。
       薄薄的青霧浮起在荷塘裏。
       葉子和花彷彿在牛乳中洗過同樣;又像籠着輕紗的夢。
       雖然是滿月,天上卻有一層淡淡的雲,因此不能朗照;
       但我覺得這恰是到了好處——酣眠固不可少,小睡也別有風味的。
       月光是隔了樹照過來的,高處叢生的灌木,落下參差的斑駁的黑影,峭楞楞如鬼通常;
       彎彎的楊柳的稀疏的倩影,卻又像是畫在荷葉上。
       塘中的月色並不均勻;但光與影有着和諧的旋律,如梵婀玲上奏着的名曲。''')
obj = Idiom()
obj.find(s)

找出來的成語有:it

一天一地、別有風味、別有天地、恰到好處、落花流水、水流花落、
水天一色、流水落花、風輕雲淡、月黑風高、高高在上、雲淡風輕、
能上能下、不上不落、不上不下、不覺得然、不差上下、名高天下、
名滿天下、天下爲籠、天高地下、參差不一
相關文章
相關標籤/搜索