文案生成器·初版
博文标题叫初版,其实并不一定会有终版,好吧,感觉是太久没写博客了,已然长草,就来拔拔草吧。。其实不是工作后没时间,时间还是有很多的,只不过感觉工作后的业余时间更应该拿来放松,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很感兴趣。。)
收工,撤。。(好久没写这么短的博文了。。)
29
闲着没事补充了一个可以匹配不同声调韵母的版本InspirationHub_2.py,其实就是增加了:
def GetPinyin(word): if not pinyin_dict.has_key(word): return "-" res = pinyin_dict[word][0] res = re.sub("[ā|á|ǎ|à]","a",res) res = re.sub("[ō|ó|ǒ|ò]","o",res) res = re.sub("[ē|é|ě|è]","e",res) res = re.sub("[ī|í|ǐ|ì]","i",res) res = re.sub("[ū|ú|ǔ|ù]","u",res) res = re.sub("[ǖ|ǘ|ǚ|ǜ]","ü",res) return res
这样就可以匹配『一拍纪和』了~~我也是够无聊的。。
【完】
本文内容遵从CC版权协议,转载请注明出自http://www.kylen314.com
真不知道那些优秀的文案工作者因为这个脑洞会不会丢工作……
卧冰求鲤—->从此对这个成语不忍直视了。。。。
卧槽,赶紧高亮23333
技术帝就是厉害
后面的成语太有意思了。
貌似第一行有个错别字啊,难道也被“文案”么
改改改改改改改改。。。。
博主有段时间没更新了。这篇博文想的挺好。但不知道原来的word中的模糊查找加替换是不是能达到这个效果。
什么意思?
“收工,撤。。(好久没写这么短的博文了。。)”日志写成微博的留下了羞愧的泪水
好有想法(脑洞真大
太赞了啊www
这是
Traceback (most recent call last): File “InspirationHub.py”, line 99, in main(sys.argv ,sys.argv ) File “InspirationHub.py”, line 86, in main wordList = map(lambda x:unicode(x,”utf-8″),wordList) File “InspirationHub.py”, line 86, in wordList = map(lambda x:unicode(x,”utf-8″),wordList)UnicodeDecodeError: ‘utf8’ codec can’t decode byte 0xb7 in position 0: invalid start byte
技术帝就是厉害
我的也是今天去除了下草。。。
这个,果然是高上大。
好好玩。
微信头像www.seozhanwang.com
微信头像www.seozhanwang.com
吉他入门指法www.02942.cn/ru/
微信网页版www.seozhanwang.com
“你干嘛打我?”
“因为你没有女朋友啊!”
“你自己不也没有!”
“对啊,所以大家都说我要打一辈子的光棍。”
为什么我下载了python2.7.3后运行程序python InspirationHub.py 范冰冰 李晨最后显示:======== RESTART: E:DesktopInspirationHub-masterInspirationHub.py ========python InspirationHub.py input1 input2>>> python InspirationHub.py 范冰冰 李晨SyntaxError: invalid syntax求各位大神指教啊,研究了两天,就是没办法啊。我因为这个有意思的文案神器才刚刚开始接触python……
你好,刚接触python,为什么输出的结果显示为
python InspirationHub.py 范冰冰 李晨
没有其他东西了呢
节操留言~
@wolfboy
我也是