任何個(gè)體都有自己的品牌糊余;存在即有價(jià)值。
—— 傳承者戚
本實(shí)例利用python實(shí)現(xiàn)類似于“上海自來水來自海上”的中文句子造句。實(shí)現(xiàn)效果如下:
長短計(jì)算尺算計(jì)短長
除根落水狗水落根除
黃金潤滑油滑潤金黃
馬上話搭頭搭話上馬
饞嘴說瞎話瞎說嘴饞
風(fēng)扇打拍子拍打扇風(fēng)
順耳話搭頭搭話耳順
面對(duì)計(jì)算機(jī)算計(jì)對(duì)面
集市落花生花落市集
難為繼承人承繼為難
世故知情人情知故世
……
python3.5 代碼如下:
import 漢語詞林
import jieba
import jieba.posseg # 結(jié)巴詞性標(biāo)注模塊
# 程序編者:傳習(xí)者戚
# 造句:類似于“上海自來水來自海上”的句子
# 統(tǒng)計(jì)運(yùn)行時(shí)間計(jì)時(shí)開始
import datetime
begin = datetime.datetime.now()
def 單字詞性(one_char):
return [i.flag for i in jieba.posseg.cut(one_char)][0]
def 詞組詞性排列(strings):
s = list(strings)
return list(map(單字詞性, s))
# 搜索雙字詞語AB:倒敘過來也是常用詞語BA尤辱。
double_char = 漢語詞林.雙字列表
double_char = [doub for doub in double_char if "v" not in 詞組詞性排列(doub)] # 沒有動(dòng)詞
double_char = [doub for doub in double_char if doub[0] != doub[1]] # 雙字不重復(fù)
double_char = [doub for doub in double_char if doub[::-1] in 漢語詞林.雙字列表] # AB倒序BA也是詞組
print(len(double_char), double_char)
# 搜索三字詞語XYZ:前兩個(gè)字倒序也是詞語YX炭庙。
tri_char = 漢語詞林.三字列表
tri_char = [tri for tri in tri_char if "v" in 詞組詞性排列(tri[:2])] # 前兩個(gè)詞倒序 YX 中有動(dòng)詞
tri_char = [tri for tri in tri_char if tri[0] != tri[1]] # 前兩字不重復(fù)
tri_char = [tri for tri in tri_char if tri[1] != tri[2]] # 后兩字不重復(fù)
tri_char = [tri for tri in tri_char if tri[::-1][1:] in 漢語詞林.雙字列表] # 前倆字倒序YX也是詞組
print(len(tri_char), tri_char)
# 組合成句子:A B X Y Z Y X B A
for d in double_char:
for t in tri_char:
s = d + t # A B X Y Z
t = s[::-1][1:] # Y Z B A
print(s+t) # A B X Y Z + Y X B A
# 統(tǒng)計(jì)運(yùn)行時(shí)間計(jì)時(shí)結(jié)束
end = datetime.datetime.now()
print("\n運(yùn)行時(shí)間:%s(%d秒)" % (end-begin,(end-begin).seconds))
上述程序還需要改進(jìn):雙字詞組AB和三字詞組XYZ的語義關(guān)聯(lián)。