Python 实现在线分辨上下联

分辨上下联

快过年了,每年贴春联都会被老爸怼: "都大学生了连对联都不会贴"。所以这个神器诞生了。

废话不多说先上链接在线分辨上下联

原理分析

首先先了解人工是怎样判断一副对联:

平仄方法区分:看对联的最后一个字,上联最后一个字是三声和四声(仄声),下联的最后一个字是一声和二声(平声),如下联:兴xīng 一声 是上联,旺wàng四声是下联。

张贴方法区分:对联的张贴撰写要求是上联在右侧,下联在左侧。因为古代人写字是从右往左写的。这个方法现在在观看对联时候很难区分了,因为很多人根本就不知道,随意贴出来的。所以容易辨别错误

含义方法区分:每副对联都有自己特定的含义,在写对联的时候普遍把含义深刻的作为下联,上联的价值更多是在引导作用上。上下联基本属于因果关系,因是上联,果是下联。

时间关系区分:旧时在前面是上联,新时在后面是下联,这个普遍在过年时候的春联上有所体现,常用的有生肖和辞旧岁/迎新春之类的。

范围大小区分:一般情况下范围小的是上联,范围大的是下联,如常见的“家和国”之类词语

看到这些我们不难发现如果我们想要区分一副对联的上下联最可行的办法就是平仄方法区分

具体实现

既然已经知道要怎么做了其实编码是最简单的事情了。
获取两句话先不谈,然后获取这两句话所有汉字的音调通过最后一个字的音调进行具体分析,是上联还是下联,就可以了。

为什么是用整句话进行分析而不是一个字呢?因为汉字一个字有好几种发音。分析一句话虽然会降低效率但是准确率会提高不少。

获取汉字的拼音,Python 有一个很好用的包 叫 pypinyin 简单的看一下文档就可以了。

具体功能已经实现了,但是只有我自己玩,有点不爽,于是将这个功能写到了一个静态的网页,这个网页通过 xhr 和 我实现这个功能的 API 进行 通信。获得想要的结果,然后再渲染在网页上面。

不要问我这个网页为什么做的那么丑。我容易嘛,我又不是专业搞前端的,我只是临时学一下 css js html 三神器。自我感觉还是挺好的。

至于服务器 我是通过Flask,uwgi,nginx。实现的。具有上线运行的能力.

PS

由于我自己没有想要把前端学的特别好,所以我的界面做的不是太好,其实界面,做起来也是十分简单的但是我不是专业的所以,能够满足自己的需求才是第一位的,至于界面到是其次。
这个项目也是突发奇想,以后我去看看机器学习,用机器学习,来弄这个应该会更加的符合我们日常的使用。当然不是说我这个方法不好,而是想要学习一点东西。因为这个方法也是十分精确的主要的问题在于我的拼音的音调判断的不准,但是 pypinyin 这个模块的正确率也是十分高的,也是值得信任的。

发表评论