玩转ChatGPT:名单排序

2023-11-05

一、写在前面

最近在文秘工作中,碰到一个名字排序的问题,大概的规则:

(1)按照第一个汉字的首字母的英文单词排序,从A-Z;

(2)若第一个字的首字母一致,则比较二个字的首字母,同样是A-Z;

(3)若第二个字的首字母一致,则比较三个字的首字母,同样是A-Z;

想着GPT能否直接生成?下面我们来试一试:

二、尝试过程

(1)先用GPT随机生成30个名字

随机名单如下(这些名字都是随机生成的):

李威廉
张曼
王子
赵星辰
刘晓雨
孙晨曦
周慧
吴子
郑嘉仪
冯雅婷
陈思源
褚建国
卫子轩
蒋昊
沈冰
韩晓飞
杨天佑
朱晓
秦婉
何宇翔
钱晓明
孟春花
黄宇
高晨
杜鸿
文雅琪
赖志强
潘嘉
郭子涵
曾晓

(2)先用GPT-4直接进行排序(不开插件)

写一个咒语:请给{名单}做一个排序,要求:(1)按照第一个字的首字母的英文单词排序,从A-Z;(2)若第一个字的首字母一致,则比较二个字的首字母,同样是A-Z;(3)若第二个字的首字母一致,则比较三个字的首字母,同样是A-Z;

名单为:{};

输出如下:

 可以看到,排序是混乱不堪的,比如第28名,明显不是最后一名。个人觉得可能的两个原因:首先,GPT的数学能力公认的不强;其次,咒语可能写的不好,直接让TA一步到位地输出结果,很容易出错(这个在吴恩达的教程有提到过)。

所以,下一步,我们针对性地进行尝试:

(3)使用Wolfram插件

咒语同上:

可以看到,我的Wolfram插件不知啥原因,并没有正常工作。重复了几次也没有,因此,我放弃了这个选项。

(4)优化咒语(不使用插件)

写一个咒语:请给{名单}做一个排序,要求:(1)按照第一个字的首字母的英文单词排序,从A-Z;(2)若第一个字的首字母一致,则比较二个字的首字母,同样是A-Z;(3)若第二个字的首字母一致,则比较三个字的首字母,同样是A-Z;

名单为:{};

请一步一步地分析,不急着输出答案。

建议步骤:(2)先把中文名字转换成汉语拼音首字母在排序,例如杜鸿转换成DH,第一个字的首字母是D,以此类推;(2)按照第一个字的首字母的英文单词排序,从A-Z;(3)若第一个字的首字母一致,则比较二个字的首字母,同样是A-Z;(4)若第二个字的首字母一致,则比较三个字的首字母,同样是A-Z。

神奇的事情发生了,GPT-4直接说做不了,建议用Python:

然后,我退而求其次,使用GPT-3.5:

是按照步骤来了,但是每一部都有错漏:

 第一个的首字母都提取错了;

 第二步的排序也有问题,再下面就不用看了。

看来GPT在解决这类问题还是不太擅长。

(5)使用Python实现

按照GPT的建议,使用下面代码:

from pypinyin import lazy_pinyin

# 名单

names = ["李威廉", "张曼", "王子", "赵星辰", "刘晓雨", "孙晨曦", "周慧", "吴子", "郑嘉仪", "冯雅婷", "陈思源", "褚建国", "卫子轩", "蒋昊", "沈冰", "韩晓飞", "杨天佑", "朱晓", "秦婉", "何宇翔", "钱晓明", "孟春花", "黄宇", "高晨", "杜鸿", "文雅琪", "赖志强", "潘嘉", "郭子涵", "曾晓"]

# 转换为拼音首字母

names_pinyin = [(name, ''.join([p[0][0].upper() for p in lazy_pinyin(name)])) for name in names]

# 按照拼音首字母排序

names_pinyin.sort(key=lambda x: x[1])



# 输出排序后的名字

for name, _ in names_pinyin:

    print(name)

看看输出的结果,大体上应该是对的:

 当然,使用这个规则有一定缺陷,比如“吴子”和“王子”都是“WZ”,又如何排序呢?又比如后面的“卫子轩”是“WZX”,比前面多了一个“X”,又改怎么排?因此,还需要继续优化规则才行。

所以,我想试一试用笔画来排序。

(6)使用笔画排序

写一个咒语:请给{名单}做一个排序,要求:(1)按照第一个汉字的笔画数目排序,从小到大;(2)若第一个汉字的笔画数目一致,则比较二个字的笔画数目,同样是从小到大;(3)若第二个汉字的笔画数目一致,则比较三个字的笔画数目,同样是从小到大;(4)若名字只有两个汉字,则它的第三个汉字定义为0画;

名单为:{};

(a)GPT-4直接说做不了,就算是Wolfram插件也不行,给了Pyhton代码,后面我再使用;

(b)给GPT-4联网,神奇的事情发生了,TA居然去联网去找笔画:

 还不错,就是有点慢,不对,是很慢,因为TA是一个字查的,笑死我了:

工作量实在太大,TA自己也放弃了,这一策略不行。

(c)尝试GPT-3.5:

 思路是对的,但是笔画数错了。

(d)换回Python:

import pypinyin

import unicodedata

names = ["李威廉", "张曼", "王子", "赵星辰", "刘晓雨", "孙晨曦", "周慧", "吴子", "郑嘉仪", "冯雅婷", "陈思源", "褚建国", "卫子轩", "蒋昊", "沈冰", "韩晓飞", "杨天佑", "朱晓", "秦婉", "何宇翔", "钱晓明", "孟春花", "黄宇", "高晨", "杜鸿", "文雅琪", "赖志强", "潘嘉", "郭子涵", "曾晓"]

def stroke_count(char):

    return unicodedata.east_asian_width(char)

def get_stroke_count(name):

    return [stroke_count(char) for char in name]

names_strokes = [(name, get_stroke_count(name)) for name in names]

names_strokes.sort(key=lambda x: (x[1][0], x[1][1] if len(x[1]) > 1 else 0, x[1][2] if len(x[1]) > 2 else 0))

for name, _ in names_strokes:

    print(name)

看看结果:

报错了:TypeError: '<' not supported between instances of 'int' and 'str'

GPT给的解释在于:计算汉字的笔画数是一个复杂的问题,需要一个完整的汉字-笔画数映射表。这个映射表可以从 Unicode 字符数据库(UCD)或其他类似的数据源获取。我建议你寻找一个包含汉字-笔画数映射表的库,或者使用一个外部的数据源,比如 Unicode 字符数据库(UCD)。

我问TA Unicode 字符数据库(UCD)如何调取?

GPT说:Unicode 字符数据库(UCD)是一个包含了所有 Unicode 字符的各种属性的数据库,包括字符的名称、分类、大小写映射、笔画数等。然而,UCD 并没有提供一个直接的 API 或者函数库来查询这些属性。你需要下载 UCD 的数据文件,然后在你的程序中解析这些文件。

在 Python 中,你可以使用 unicodedata 库来查询一些基本的 Unicode 属性,但是这个库并不包括笔画数。对于笔画数,你可能需要找到一个专门的库,或者自己创建一个汉字到笔画数的映射表。

我建议你查找一些专门的汉字处理库,或者使用一些在线的 API 服务。例如,汉典网(zdic.net)提供了一个查询汉字笔画数的在线服务,你可以在你的程序中调用这个服务。但是,请注意,这可能需要你对网络编程和网页抓取有一些基本的了解。

嗯,听起来很麻烦,我就不继续弄了。

三、关于Token

网上也有测试,就是让GPT把句子倒着输出,TA是不能实现的:

比如说:请按照下面规则进行转换,例如{TA是不能实现的}换成{的现实能不是AT},那么{就是让GPT把句子倒着输出}会转换成什么?

 发现了吧,TA其实是理解规则了“规则似乎是将整个句子的字符顺序反转”,但是,结果是不对的,“输出着倒子句把TPG让是就”,可以看到,“输出”并没有转换过来。因为在GPT看来,“输出”是一个字符。也就是Token,在计算机科学和语言处理中,"Token"(标记)是一个非常基础的概念,它通常指的是一段程序、文本或语句中的一个独立的部分,这个部分在语义上是有意义的。

例如,句子"The cat sat on the mat."可以被分割成这样的Token:["The", "cat", "sat", "on", "the", "mat", "."]。这个过程被称为Tokenization(标记化或分词)。

四、写在最后

基于上述原因,GPT在处理这类问题的时候,往往比较懵逼。可能GPT-4也意识到这个问题,直接推荐用Python来解决吧。当然,TA的数学能力也有待加强,而且TA不能自己运行代码,未来看看使用Code interpreter插件能否解决类似问题。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

玩转ChatGPT:名单排序 的相关文章

  • 在 Python 中处理单值元组的最佳实践是什么?

    我正在使用第三方库函数 它从文件中读取一组关键字 并且应该返回一个值的元组 只要有至少两个关键字 它就能正确执行此操作 但是 在只有一个关键字的情况下 它返回一个原始字符串 而不是大小为 1 的元组 这是特别有害的 因为当我尝试做类似的事情
  • cv2.face.mindistancepredictcollector() 错误

    我已经安装了带有额外模块的 opencv 3 1 0 但是当我尝试使用 gt gt gt s cv2 face MinDistancePredictCollector 它返回一个错误 Traceback most recent call l
  • Python - 包和设置文件

    我有一个 python 包 需要从我的项目目录中提取设置 这是我的项目当前的结构 Project bin mypackage package files Project myproject project files start py se
  • 地图与星图的性能?

    我试图对两个序列进行纯Python 没有外部依赖 逐元素比较 我的第一个解决方案是 list map operator eq seq1 seq2 然后我发现starmap函数来自itertools 这看起来和我很相似 但事实证明 在最坏的情
  • Accel 无法在 gedit 3 插件中工作

    我试图为 Gedit 3 编写一个使用 GObject 自省的小插件 下面显示的代码的相关部分只是为了建立一个环境 然后我可以将函数放入按钮的回调中 但是 该按钮的加速器不起作用 这段代码有什么问题 我正在使用教程here http www
  • SMTPAuthenticationError: (535, b'5.7.8 用户名和密码在 Django 生产中不被接受?

    我在 Heroku 上部署了一个 Django 应用程序 在其中一节中 我使用 SMTP Gmail 设置向用户发送电子邮件 当我在本地运行项目时 电子邮件发送成功 但在 Heroku 上部署的项目上却发送失败 我在 Stackoverfl
  • Weasyprint 在调用 write_pdf 时获得未定义的属性:“AttributeError:‘PosixPath’对象没有属性‘read_text’”

    我正在 ubuntu 18 04 上运行 weasyprint 项目 并尝试创建一个 pdf 当我尝试设置页脚图像时 问题就开始了 我正在 python 3 6 7 上运行 这是我调用 weasyprint 的代码 import sys i
  • 更改Python pylab玫瑰/极坐标图中图例标题的字体大小

    我正在尝试更改玫瑰图或 极地 图上现有图例标题的字体大小 大部分代码是由不在的其他人编写的 我已经添加 ax legend title legend title setp l get title fontsize 8 添加标题 legend
  • numpy 数组最快的保存和加载选项

    我有一个生成二维的脚本numpy数组与dtype float和形状的顺序 1e3 1e6 现在我正在使用np save and np load对数组执行 IO 操作 然而 这些函数对于每个数组都需要几秒钟的时间 是否有更快的方法来保存和加载
  • 字母表中的加密和解密 - Python GCSE

    我目前正在尝试为学校编写一个程序 以便加密和解密输入的消息 我需要加密或解密的消息仅在字母表中 没有其他符号或密钥 例如 使用消息车加密输入的偏移量为 5 我希望它输出 afs 有人可以帮忙吗 这是我目前的代码 def find offse
  • PyPI 项目页面中的“Py 版本”是什么意思?这有关系吗?

    我注意到 大多数在 PyPI 上发布的项目在其项目页面中都包含 Py 版本 元数据 但它们的值各不相同 如果包不是通用包或不是纯 python 包 那么它们的值是不同的 这是可以理解的 以便表示它们的目标平台 例如鼻页 https pypi
  • 将 csv 文件按多列拆分为 panda 数据框

    我有一个包含多列的 tsv 文件 有 10 多列 但对我来说重要的列是名称为 user name shift id url id 的列 我想创建一个数据框 首先根据用户名分隔整个 csv 文件 即只有具有相同用户名的行才会分组在一起 从该块
  • import numpy 和 import numpy as np 之间的区别

    我明白 如果可能的话 应该使用 import numpy as np 这有助于避免由于命名空间引起的任何冲突 但我注意到虽然下面的命令有效 import numpy f2py as myf2py 以下不 import numpy as np
  • 避免在列表理解中计算相同的表达式两次[重复]

    这个问题在这里已经有答案了 我在列表理解中使用一个函数和一个 if 函数 new list f x for x in old list if f x 0 令我恼火的是这个表达f x 在每个循环中计算两次 有没有办法以更清洁的方式做到这一点
  • 从 sublime_plugin.WindowCommand 获取当前文件名

    我开发插件sublime text 3 并想要获取当前打开的文件路径 absolute1 self window view file name 在哪里self is sublime plugin WindowCommand 但失败了 Att
  • 安排 Asyncio 任务每 X 秒执行一次?

    我正在尝试创建一个 python 不和谐机器人 它将每隔 X 秒检查一次活跃会员 并根据会员的在线时间奖励积分 我正在使用 asyncio 来处理聊天命令 这一切都正常 我的问题是找到一种方法来安排每隔 X 秒异步检查一次活动成员 我已经阅
  • 使用 Pandas 和 Group By 绘制堆叠直方图

    我正在使用如下所示的数据集 Gender Height Width Male 23 4 4 4 Female 45 4 4 5 我想可视化高度和宽度的堆叠直方图 我希望每个图有两个堆叠的直方图 每个性别一个 这是文档中的堆叠直方图 如果存在
  • 在 python 中使用递归替代 len()

    作为 CS1301 问题的一部分 我正在尝试使用递归编写一个函数 该函数将执行与 len 完全相同的操作 但是 我有两个问题 我正在使用全局变量 但我在课程中还没有学到这一点 cs1301 自动评分器告诉我 我的函数返回 26 而不是 13
  • 用于桌面数据库应用程序的 Python 框架

    是否有一个框架可以为Python开发桌面数据库应用程序 一些带有CRUD屏幕的屏幕 我正在寻找类似于 Windows 窗体的东西 能够将 TextField Combos 和其他 UI 隐喻与datasets连接到关系数据库例如 MySQL
  • Python请求401错误但url在浏览器中打开

    我正在尝试从这个位置提取 json https www nseindia com api option chain indices symbol BANKNIFTY https www nseindia com api option cha

随机推荐

  • 解决uni.getLocation用户端首次拒绝后,点第二次不会再调用的问题

    解决方案 给与用户手动指引开启手机定位 效果 测试机为iphone11 机型不一样可能效果会有差别
  • pandas 实现 Excel 常见操作 (2)

    接下来介绍 pandas 的基本操作中 大体相当于 Excel 的合计 小计 subtotal 和数据透视表的方法 pandas 的数据统计功能比 Excel 强大很多 方式也更加灵活 Excel 问题之一就是数据的存储和显示不分离 而 p
  • 今夜科技谈

    我们希望 AI 能越来越聪明 但又害怕它们过于聪明 AlphaCode 超半数程序员的自主编程 AI 2 月 2 日 DeepMind 在官方博客中 介绍了他们最新的研发成果 AlphaCode AlphaCode 是一个可以自主编程的系统
  • Spring入门:IOC和DI (基于XML)

    目录 Spring的IOC ApplicationContext的三个常用实现类 ApplicationContext与BeanFactory的区别 Spring管理Bean的细节 1 创建Bean的三种方式 方式1 默认构造函数创建 方式
  • Gooey使用python打包后,print不能输出到GUI的命令行窗口内的问题解决

    为了给自己的图片接口站api horosama com补充图片 写了个壁纸爬虫程序 同时用Gooey做了个简单的GUI 然而 程序在vscode里直接运行的时候 是可以print函数输出到GUI的命令行窗口的 用pyinstaller打包之
  • QT QLine 使用详解

    本文详细的介绍了QLine控件的各种操作 例如 新建界面 源文件 设置属性 设置宽度 最小宽度 样式表 其它文章等等操作 实际开发中 一个界面上可能包含十几个控件 手动调整它们的位置既费时又费力 QLine表示平面上整数精度的二维向量 用于
  • Mybatis获取自动增长Id

    Mybatis获取自动增长Id MyBatis成功插入后获取自动增长的id 1 向xxMapping xml配置中加上两个配置
  • 基于51单片机温度控制风扇转动

    基于51单片机温度控制风扇转动 实验是在郭天祥老师的51单片机实验教程上做的改动 实验要求 数码管上显示的温度大于要求的温度时 这里设定是34度 风扇转动 实验步骤 1 温度传感器获得温度 2 对数据进行处理 3 把温度显示到数码管上 4
  • Tcl/TK基础语法学习(三)---字符串

    字符串基本用法 字符串表示 指定重复次数 string repeat 指定字符类型 sting is 返回 0 1 字符串长度 string length 包括空格 索引值 字符索引string index 字符获取 sring range
  • WebDriver介绍

    什么是Selenium 和WebDriver Selenium是一个浏览器自动化操作框架 Selenium主要由三种工具组成 第一个工具SeleniumIDE 是Firefox的扩展插件 支持用户录制和回访测试 录制 回访模式存在局限性 对
  • 蓝牙之十一 AVRCP协议

    Profile简介 AVRCP子协议的作用是支持CT控制TG 具体来说如果手机和一个蓝牙音箱设备连接上了 那么音箱可以控制手机播放 暂停 切歌以及获得手机上播放歌曲的信息 如专辑 歌名 歌手 时长等信息 iphone对信息获取支持较为完善
  • mac去除dmg打开密码的方法

    由于使用osx 系统 经常会访问到很多网站下载的dmg都会有密码 特别是风云社区上面的几千款免费精品Mac软件 社区地址如下 每次操作起来还是挺麻烦的 所以我们得去除这个密码 毕竟作为一个开发者不管是写代码还是电脑使用都得高效 一 打开di
  • socket通信中的几个重要结构体定义

    struct sockaddr unsigned short sa family 地址类型 AF xxx char sa data 14 14字节的端口和地址 struct sockaddr in short int sin family
  • CentOs7静默安装oracle11

    我们安装几个必要的工具 yum y install vim yum y install unzip yum y install lrzsz yum y update 先装这几个 安装Oracle11GR2所需要的依赖包 我们准备以下软件 l
  • Oracle 体系结构

    体系结构包括实例 SGA 后台进程 数据库文件 用户进程和服务器进程以及其他文件 如参数文件密码文件和归档日志文件等 1 物理结构 文件组成 数据文件 数据库操作中数据的最终存储位置 控制文件 验证数据库完整性 重做日志文件 在发生故障时用
  • Python通过日志loguru记录程序中的中间变量,同时导出并分析

    文章目录 思路 示例代码 1 源程序中这样保存中间结果 2 解析中间结果并导出 在程序运行的时候除了密密麻麻的日志外 这些关键函数的输入输出也十分重要 是回溯与数据核对的唯一 思路 使用loguru日志库 将不常见的 TRACE 级别作为保
  • 虚拟机ubuntu设置和windows的共享文件夹

    vmware workstation 12 ubuntu 16 04 参考 VMware下Ubuntu与宿主Windows共享文件夹 VMware无法通过mount挂载共享文件夹 下面的评论 ubuntu 执行apt get update报
  • 找不到vcruntime140.dll无法继续执行代码怎么办?(详解)

    1 vcruntime140 dll是什么 有什么作用 vcruntime140 dll是Windows操作系统中的一个动态链接库文件 它属于Microsoft Visual C Redistributable的一部分 DLL是Dynami
  • Metro UI CSS 学习笔记之组件(对话框)

    查阅Metro UI CSS 对组件 对话框 描述 本人觉得已经描述的很详细 所以在这里不打算做详细的讲解 大家可以直接阅读以下源代码 是进过本人已经优化后的代码 温馨提示 相关注释 也已经在代码中添加
  • 玩转ChatGPT:名单排序

    一 写在前面 最近在文秘工作中 碰到一个名字排序的问题 大概的规则 1 按照第一个汉字的首字母的英文单词排序 从A Z 2 若第一个字的首字母一致 则比较二个字的首字母 同样是A Z 3 若第二个字的首字母一致 则比较三个字的首字母 同样是