博文标题叫初版,其实并不一定会有终版,好吧,感觉是太旧没写博客了,已然长草,就来拔拔草吧。。其实不是工作后没时间,时间还是有很多的,只不过感觉工作后的业余时间更应该拿来放松,so。。。总之,这篇博文也是一篇毫无时效性的东西(为什么是“也”),根据Github的commit记录,若干个星期前的某个周末,早上醒来不想起床,就拿手机刷了一下朋友圈,那一阵子娱乐圈有个很火(大概,因为不太关心)的新闻,就是范冰冰和李晨公开恋情的新闻(大概是为了阻止汪峰吧。。所以李晨很有名么?),然后朋友圈看到一篇分享,讲的是各家媒体啊官微啊什么的针对这两位明星写的各种“神级”文案,比如『冰冰有李』,『冰临晨下』,『先李后冰』啊什么的。。然后我一时脑洞,想到其实对于这类谐音的文案,其实可以做成一个自动生成器,反正规则很明确,输入目标词汇,比如两个人的名字(或者别的),只需要有一个拼音库,一大堆目标“知识库”,that all!想法很简单,实现起来更简单,直接在网上找了三个库,正则表达式处理一下弄成统一格式的txt,一个成语库,一个唐诗库,一个宋词库,当时还想找一个歇后语库的。。。然后python写了一个脚本实现简单的查找和替换:import re
import sys
pinyin_dict = {}
def LoadPinyinDict():
global pinyin_dict
for line in open('pinyin.txt'):
line = line.replace('\n','')
line = line.split(":")
pinyin_dict[unicode(line[0],"utf-8")] = line[1].split(",")
def UniformPinyin(pinyin):
pinyin, number = re.subn('(.)h(.*)', r'\1\2', pinyin)
pinyin, number = re.subn('(.*)ng', r'\1n', pinyin)
return pinyin
def GetPinyin(word):
if pinyin_dict.has_key(word):
return pinyin_dict[word][0]
else:
return "-"
def convertPinyin(word):
# word = word.replace(",","")
return map(lambda x:UniformPinyin(GetPinyin(x)),word)
def ValidCheck(wordList_py,dstWord_py):
idx = []
for wordidx,wordpy in enumerate(wordList_py):
inflag = False
for pyidx,py in enumerate(wordpy):
if py in dstWord_py:
dstidx = dstWord_py.index(py)
idx.append([wordidx,pyidx,dstidx])
inflag = True
if not inflag:
return []
return idx
def PrintValidResult(pinyinSet,oriText,wordList):
line = oriText
dstWord_py = convertPinyin(line)
ReplaceRule = ValidCheck(pinyinSet,dstWord_py)
if len(ReplaceRule):
result = list(line)
for replace_idx in ReplaceRule:
dst = wordList[replace_idx[0]][replace_idx[1]]
src = result[replace_idx[2]]
line = line.replace(src,dst)
print line,'<<----',oriText
def main(argv1,argv2):
wordList = [argv1,argv2]
wordList = map(lambda x:unicode(x,"utf-8"),wordList)
pinyinSet = map(lambda x:convertPinyin(x),wordList)
for (linenum,oriText) in enumerate(open('chengyu.txt')):
oriText = unicode(oriText.replace('\n',''),"utf-8")
PrintValidResult(pinyinSet,oriText,wordList)
if __name__ == "__main__":
if len(sys.argv) != 3:
print "python InspirationHub.py input1 input2"
else:
LoadPinyinDict()
main(sys.argv[1],sys.argv[2])主要麻烦就是中文编码那些,全部转成unicode最了事。。其中UniformPinyin函数是为了解决前鼻音后鼻音,还有sh,s相似问题。完整代码在Github,有爱自取;运行的结果表示,嗯,我的语文功底实在太弱。。。好多古文的那些句子成语从来没听过。。代码里后来就把唐诗和宋词的给注释掉了,因为结果数目实在太多了。。。就成语而言,想要的结果还是可以出得来的,比如:python InspirationHub.py 范冰冰 李晨
先李后冰 <<---- 先礼后兵
冰临晨下 <<---- 兵临城下
千李冰封 <<---- 千里冰封
单冰孤晨 <<---- 单兵孤城
卧冰求李 <<---- 卧冰求鲤
晨羹涂范 <<---- 尘羹涂饭
晨范涂羹 <<---- 尘饭涂羹
冰冰有李 <<---- 彬彬有礼
撒豆晨冰 <<---- 撒豆成兵
范下屠刀,立地晨佛 <<---- 放下屠刀,立地成佛
晨炊星范 <<---- 晨炊星饭
范滥晨灾 <<---- 汎滥成灾
晨滓范起 <<---- 沉滓泛起
范滥晨灾 <<---- 泛滥成灾
滴水晨冰 <<---- 滴水成冰
炊沙晨范 <<---- 炊沙成饭
生米做晨熟范 <<---- 生米做成熟饭
生米煮晨熟范 <<---- 生米煮成熟饭
李先一范 <<---- 礼先一饭
李先壹范 <<---- 礼先壹饭
艳如桃李,冷若冰霜 <<---- 艳如桃李,冷若冰霜
蒸沙晨范 <<---- 蒸沙成饭然后又试了一组“汪峰头条应对小分队”的:python InspirationHub.py 诗诗 吴奇隆
万吴一诗 <<---- 万无一失
事吴常诗 <<---- 事无常师
公平吴诗 <<---- 公平无私
公正吴诗 <<---- 公正无私
兼爱吴诗 <<---- 兼爱无私
出诗吴名 <<---- 出师无名
各诗奇事 <<---- 各司其事
大公吴诗 <<---- 大公无私
学吴常诗 <<---- 学无常师
诗居隆见 <<---- 尸居龙见
诗出吴名 <<---- 师出无名
诗归奇雌 <<---- 思归其雌
教吴常诗 <<---- 教无常师
吴诗有线 <<---- 无丝有线
吴名之诗 <<---- 无名之师
吴诗自通 <<---- 无师自通
...(以下省略一大堆。。)所以这篇博文临时想写的(水存在感用),暂时是一个没啥用的雏形,总之,后续如果继续弄完善。。。。。。。的话,那就。。。。。再说吧。。。。反正坑已经够多了。。。现在想到的可以“改进”的方案有以下:根据词语在别的文库中出现的频率来给结果打分,高分的可以放前面。(几个月前VPS花了24天爬回来一个超大的极具中国特色的文库。。orz)做一个前端页面,中间大号输入框输入目标词汇,然后泡泡状“文案”不断冒出来飘动,而且分数越高的文案气泡越大(好久没写这种了,回头可以拿这个练手。。)。感觉应该可以进一步过滤掉一些没有意义的文案(最近因为工作原因,对NLP很感兴趣。。)收工,撤。。(好久没写这么短的博文了。。)【完】本文内容遵从CC版权协议,转载请注明出自http://www.kylen314.com