wp231957 发表于 2024-5-8 14:15:23

随机生产句子

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

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

FishC 发表于 2024-5-8 14:15:34

你可以使用随机数生成器来抽取一部分汉字。首先,将2500个常用汉字存储在一个列表中,然后使用random模块中的randint()函数生成一个随机索引,再从列表中获取对应的汉字。

下面是一个示例代码:

import random

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

# 抽取汉字的数量
num_of_hanzi = 10

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

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

print(sentence)

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

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

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。

wp231957 发表于 2024-5-8 14:18:03

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

这样生产的句子肯定是 中国人都读不懂的句子
我的意思是,如何使这样的句子看起来 更像句子

FishC 发表于 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 小助理,如未能正确解答您的问题,请继续追问。

yinda_peng 发表于 2024-5-8 14:39:40

那首先肯定要对汉字根据语法分类,这就是一个很庞杂的工程

smallwh 发表于 2024-5-11 19:06:45

这种情况需要统计概率。得利用马尔科夫链或贝叶斯网络等方式。
统计每一个词后面跟的字词的概率,然后随机生成。这样看上去更像句子,但可能还不够通顺。
import random

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

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


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


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


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

    for i in range(lenth):
      last = nextword(text[-2:])
      text.append(last[-1])
    return ''.join(text)





当然上面的代码仍有很大的改进空间。
可以看一下《编程珠玑》(链接的文末有电子书,不清楚能否打开)的第15章,或吴军的《数学之美》。里面有部分关于这个问题的介绍。
如果要进一步生成像样的句子就得利用人工智能、机器学习、大数据等方法。
页: [1]
查看完整版本: 随机生产句子