搜索内容

有一个问题?

如果您有任何疑问,可以在下面询问或输入您要寻找的!

从若干多个 无序 的汉字中选择出其中的 成语 ,有什么高效地方法吗?

技术聚客 未结 2 536
云巴
云巴 2021-03-08 09:38

用python玩微信的成语猜猜看,要从24个汉字中选择出其中的成语

先说一下我的方案:将24个汉字的所有4字组合暴力穷举,分词(jieba),结果中存在4个字的,push到结果中,再一个一个试。

但是暴力穷举复杂度呈指数上升,另一个游戏叫成语连连看还是什么的,五十多个汉字,穷举不了了。。。

所以大家有什么好办法吗?

ps:jieba分词有时(比较频繁)会出现分不出来成语的情况,爬了个成语词典作为自定义词典,效果立竿见影,但仍然偶尔会出现 明明词典中有、但就是分不出来 的情况,诸位能告诉我是什么原因吗?(我的自定义词典没有词频和词性)

2条回答
  • 2021-03-08 10:06

    本问题已解决,解决方法是找了一个比较大的词库,取代之前的基于jieba分词的成语搜索。感谢大家的帮助。

    0 讨论(0)
  • 2021-03-08 10:09

    基本思路:
    假设你已经有了一个成语词典。
    对于24个汉字,从第一个开始
    {
    找出该汉字开头的所有成语,对符合条件的所有成语,
    判断第二个汉字是否包含在24个汉字中,对符合条件的依次判断第三个第四个,
    找到则跳出循环。
    }
    这个最坏需要遍历24遍词典。
    优化:
    对于成语词典,假设是按拼音顺序排列的。
    首先对于你的24个汉字,按拼音顺序排列一遍
    从第一个开始,查找该汉字开头对应的成语,依次判断成语的第二三四个汉字。
    如果找到则跳出,否则到下一个汉字,继续向下查找词典。
    这个最坏只需要1遍。
    其中有个问题,假如有一个汉字没有对应的成语怎么办,所以词典可能也要包含该汉字来做标记(低效率),或者对拼音比大小来判断该汉字是否已经掠过了。

    0 讨论(0)
提交回复