从若干多个 无序 的汉字中选择出其中的 成语 ,有什么高效地方法吗?
用python
玩微信的成语猜猜看,要从24个汉字中选择出其中的成语。
先说一下我的方案:将24个汉字的所有4字组合,暴力穷举,分词(jieba
),结果中存在4个字的,push到结果中,再一个一个试。
但是暴力穷举复杂度呈指数上升
,另一个游戏叫成语连连看还是什么的,五十多个汉字,穷举不了了。。。
所以大家有什么好办法吗?
ps:jieba分词有时(比较频繁)会出现分不出来成语的情况,爬了个成语词典
作为自定义词典
,效果立竿见影,但仍然偶尔会出现 明明词典中有、但就是分不出来 的情况,诸位能告诉我是什么原因吗?(我的自定义词典没有词频和词性)
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
本问题已解决,解决方法是找了一个比较大的词库,取代之前的基于jieba分词的成语搜索。感谢大家的帮助。
基本思路:
假设你已经有了一个成语词典。
对于24个汉字,从第一个开始
{
找出该汉字开头的所有成语,对符合条件的所有成语,
判断第二个汉字是否包含在24个汉字中,对符合条件的依次判断第三个第四个,
找到则跳出循环。
}
这个最坏需要遍历24遍词典。
优化:
对于成语词典,假设是按拼音顺序排列的。
首先对于你的24个汉字,按拼音顺序排列一遍
从第一个开始,查找该汉字开头对应的成语,依次判断成语的第二三四个汉字。
如果找到则跳出,否则到下一个汉字,继续向下查找词典。
这个最坏只需要1遍。
其中有个问题,假如有一个汉字没有对应的成语怎么办,所以词典可能也要包含该汉字来做标记(低效率),或者对拼音比大小来判断该汉字是否已经掠过了。