任何个体都有自己的品牌;存在即有价值。
—— 传承者戚
本实例利用python实现类似于“上海自来水来自海上”的中文句子造句。实现效果如下:
长短计算尺算计短长
除根落水狗水落根除
黄金润滑油滑润金黄
马上话搭头搭话上马
馋嘴说瞎话瞎说嘴馋
风扇打拍子拍打扇风
顺耳话搭头搭话耳顺
面对计算机算计对面
集市落花生花落市集
难为继承人承继为难
世故知情人情知故世
……
python3.5 代码如下:
import 汉语词林
import jieba
import jieba.posseg # 结巴词性标注模块
# 程序编者:传习者戚
# 造句:类似于“上海自来水来自海上”的句子
# 统计运行时间计时开始
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)] # 没有动词
double_char = [doub for doub in double_char if doub[0] != doub[1]] # 双字不重复
double_char = [doub for doub in double_char if doub[::-1] in 汉语词林.双字列表] # AB倒序BA也是词组
print(len(double_char), double_char)
# 搜索三字词语XYZ:前两个字倒序也是词语YX。
tri_char = 汉语词林.三字列表
tri_char = [tri for tri in tri_char if "v" in 词组词性排列(tri[:2])] # 前两个词倒序 YX 中有动词
tri_char = [tri for tri in tri_char if tri[0] != tri[1]] # 前两字不重复
tri_char = [tri for tri in tri_char if tri[1] != tri[2]] # 后两字不重复
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
# 统计运行时间计时结束
end = datetime.datetime.now()
print("\n运行时间:%s(%d秒)" % (end-begin,(end-begin).seconds))
上述程序还需要改进:双字词组AB和三字词组XYZ的语义关联。