鱼C论坛

 找回密码
 立即注册
查看: 98|回复: 5

随机生产句子

[复制链接]
发表于 2024-5-8 14:15:23 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
假定 已知条件:2500常用中国汉字

那么 如何从这2500汉字中 抽取一部分汉字,使得这部分汉字  看起来 更像文章一样通顺

本帖被以下淘专辑推荐:

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2024-5-8 14:15:34 | 显示全部楼层
你可以使用随机数生成器来抽取一部分汉字。首先,将2500个常用汉字存储在一个列表中,然后使用random模块中的randint()函数生成一个随机索引,再从列表中获取对应的汉字。

下面是一个示例代码:

  1. import random

  2. # 常用汉字列表
  3. hanzi_list = ['的', '一', '是', '在', '不', '了', '有', '我', '和', '人', ...]

  4. # 抽取汉字的数量
  5. num_of_hanzi = 10

  6. # 随机抽取汉字
  7. selected_hanzi = random.sample(hanzi_list, num_of_hanzi)

  8. # 组合成句子
  9. sentence = ''.join(selected_hanzi)

  10. print(sentence)
复制代码


这段代码会从`hanzi_list`中随机抽取指定数量的汉字,并将它们组合成一个句子。你可以根据需要调整`num_of_hanzi`的值来控制句子中汉字的数量。

请记得将`hanzi_list`替换为实际包含2500个常用汉字的列表。希望这能帮到你!

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-5-8 14:18:03 | 显示全部楼层
FishC 发表于 2024-5-8 14:15
你可以使用随机数生成器来抽取一部分汉字。首先,将2500个常用汉字存储在一个列表中,然后使用random模块中 ...

这样生产的句子  肯定是 中国人都读不懂的句子
我的意思是,如何使这样的句子  看起来 更像句子
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-5-8 14:18:18 | 显示全部楼层
wp231957 发表于 2024-05-08 14:18
这样生产的句子  肯定是 中国人都读不懂的句子
我的 ...


哦,我明白你的意思了。你希望生成的句子看起来更像是有意义的句子,而不仅仅是随机抽取的汉字。这样的话,我们可以使用一些语法规则或者模板来构建句子。下面是一个示例代码:

import random

# 主语列表
subjects = ['我', '你', '他', '她', '我们', '你们', '他们']

# 谓语列表
predicates = ['喜欢', '爱', '看', '吃', '学习', '玩']

# 宾语列表
objects = ['电影', '书籍', '饭菜', '编程', '音乐', '游戏']

# 随机选择主语、谓语和宾语
subject = random.choice(subjects)
predicate = random.choice(predicates)
object = random.choice(objects)

# 构建句子
sentence = subject + predicate + object

print(sentence)

这段代码通过随机选择主语、谓语和宾语,然后将它们拼接在一起,形成一个句子。你可以根据需要扩展主语、谓语和宾语的列表,增加更多的选项。这样生成的句子会看起来更像是有意义的句子,而不仅仅是随机的汉字。

希望这个示例能够帮到你!

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-5-8 14:39:40 | 显示全部楼层
那首先肯定要对汉字根据语法分类,这就是一个很庞杂的工程
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-5-11 19:06:45 | 显示全部楼层
这种情况需要统计概率。得利用马尔科夫链或贝叶斯网络等方式。
统计每一个词后面跟的字词的概率,然后随机生成。这样看上去更像句子,但可能还不够通顺。
  1. import random

  2. file = open('.\\语料库.txt')
  3. data = file.read()
  4. file.close()

  5. lenth = len(data)
  6. index = 3
  7. words = []
  8. #将文本每三个字作为列表words的一个元素
  9. while index <= lenth:
  10.     words.append(data[index-3:index])
  11.     index += 1


  12. def findword(words,letter):
  13.     #返回words列表中开头为letter的字符串组成的列表
  14.     found = []
  15.     for i in words:
  16.         if i.startswith(letter):
  17.             found.append(i)
  18.     return found


  19. def nextword(letter):
  20.     #随机选择开头为letter的字符
  21.     letter = ''.join(letter)
  22.     return random.choice(findword(words,letter))


  23. def create(lenth,text=[]):
  24.     if not text or len(text) < 2:
  25.         text = list(random.choice(words))
  26.         #手工初始化text列表的前两个字,能保证其是主语
  27.     else:
  28.         text = list(text)

  29.     for i in range(lenth):
  30.         last = nextword(text[-2:])
  31.         text.append(last[-1])
  32.     return ''.join(text)
复制代码

语料库.txt (11.44 KB, 下载次数: 0)


效果.JPG
当然上面的代码仍有很大的改进空间。
可以看一下《编程珠玑》(链接的文末有电子书,不清楚能否打开)的第15章,或吴军的《数学之美》。里面有部分关于这个问题的介绍。
如果要进一步生成像样的句子就得利用人工智能、机器学习、大数据等方法。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-5-20 01:31

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表