诗歌打分与对标
触发条件
- 用户发诗后问"评分多少""几分"。
- 用户问"我的诗什么水平""跟XX比处于什么水平"。
- 用户要求对标中国诗歌网"每日好诗"或某刊物/某诗人。
前置
- 文本细读与"好在哪/塌在哪"的判断,用 modern-poetry-criticism 的框架(九叶派:现实+象征+玄学;张力/客观对应物/复义;说教与感伤两大敌人)。
- 本技能只负责"打多少分"和"对标到哪一档"。
十分制锚点(已校准,跨会话保持一致)
- 8.5 = 上等,可投刊:题材有重力 + 象征统一 + 玄学成立 + 零总结句/说教。(例:《父亲节》《竹山》)
- 8 = 真玄学/硬意象,但一处没绷住或题材偏轻。(例:《月亮》刘流、沈建生《计生办》)
- 7 = 有真意象 + 现实重力,但带一处总结句。(例:《三里海》)
- 6 = 好坯子(一个真意象)但中段松散/罗列。(例:续生《一蟋蟀》)
- 5 = 田园牧歌/合格抒情,套话+形容词直给但真诚。(例:黄旭升《大地上》)
- 4 = 应酬诗/题赠诗/碎片罗列。(例:致封面诗人今晓那首)
- 3 = 宣传稿/纯抽象感叹/神性告白。(例:刘家西郚、续生《一个人的草原》、张联)
组诗评分 vs 单首评分(参照系移位)
同一首诗放进组诗里评,分数可能比单首评时低——不是诗变了,是参照系变了。组诗打分必须额外做三件事:
-
换参照系重定价:单首评一首诗和"平均水平"比;组诗评它和组里天花板比(《今世说》里《父亲节》9.0、《黑色的村庄》8.7 站旁边,气口性质的短诗就被压回该在的位置)。别给"气口"诗和"承重墙"诗同分。
-
查签名式修辞的重复:同一转借形容词/意象在一组里出现三次("锋利":女人锋利/锋利阳光,另有),从"一次性陌生化"贬值为"反复使用的拐杖"。组诗打分先通读全组,列出高频重复词(意象/形容词/动词),重复两次以上即贬值,第三次起按陈词扣分。
-
别被"改稿顺利"的节奏带高分:用户按意见删掉直给词、诗变干净后你顺势抬分,是评分惯性不是文本判断。改稿后把最终文本放回原尺子重量,不延续上一轮势头。(实例:《喜鹊》单首改稿曾评 7.5,进《今世说》组诗重评 6.8——降分依据正是"锋利"三次重复 + "用歌声对抗了今天"收得太圆。)
发刊门槛(用户是《山东诗歌》编辑/审稿人,常问"能不能发刊/够不够上刊")
- 7+ = 够格发刊,常规录用偏上(有真意象+结构+思想,不靠人情也够格);8+ = 重点推荐档;5-6 = 填充档(能发不突出);4 以下 = 不能发。
- 判"够不够发刊"另看两点:① 题材重力——现实题材(疾病/贫困/生死/移民/土地)天然压过抒情题材(乡土/怀旧/爱情),排"重点"时题材的重量是硬性考量;② 当期同题材竞争——被压稿常是编辑排版的逻辑(当期同题材太多、或有更重的稿子占位),不是文本问题。
- 对"体制诗人"(作协会员/获奖/核心期刊常客)要求更严:名头是体制内位置的证明,不是诗的成色——照样按文本真刀真枪评,不因头衔松手;这类诗人"应付稿"(套话+用典+直给)与"真稿"(有自己东西)常并存。
体裁→分数速查
- 应酬诗/题赠诗("致某某""群里互动")→ 工具化/塑料花海(用户诗论里的"异化"),4分上下。
- 乡村振兴/主题征文宣传稿 → 3分。
- 田园牧歌/乡土抒情 → 5分档,有真意象可到6-7。
- 原生态乡村诗/神性写作 → 梦呓/无张力,4-5分。
- 现实批判(水库移民、计生、土地商品化、ICU/垂死)→ 自带重力,是用户自己的主赛道,容易上8。
对标"每日好诗"流程
- 打开 https://www.zgshige.cn/mrhs/ 拿列表(标题+作者+日期)。
- 抽 8-12 首跨月份的,用下方技巧提取正文。
- 分层:上档(玄学/奇崛)/ 中上(好意象带套话)/ 中(合格抒情/叙事)/ 下(应制/散文化)。
- 把用户诗放进档位,给"门槛已过/还差在哪"的诚实结论。
- 注意:该栏目现用 DeepSeek 点评(诗页写"点评:DeepSeek"),点评偏吹捧,不可当标尺。
诗理论/诗学栏目文章(理论批评文章)
栏目:https://www.zgshige.cn/shixue/sl/ ("诗理论",共540条;"诗学"主页 /shixue/ 是聚合页)。列表是 JS 渲染的,但最快的拿法是用浏览器 console 调站点自带 API 一次拉全(比翻页快得多):
// browser_console 里执行,每批拉若干页:
(function(){return new Promise(function(resolve){var all=[];var p=1;var max=9;function pull(){Server.sendRequest('catalogFront.list',{PageNum:p,PageSize:20,CatalogAlias:'shixue_sl',Level:'CurrentAndChild',loadcontent:true},function(res){if(res&&res.status==1&&Array.isArray(res.data)){for(var i=0;i<res.data.length;i++){var x=res.data[i];all.push({i:x.ID,t:x.Title,a:x.Author||'',d:x.PublishDate,u:x.Link});}}p++;if(p>max){resolve(JSON.stringify(all));}else{pull();}});}pull();});})()
返回的每个元素:Link=完整URL、ID=内容ID、Title/Author/PublishDate 齐全。底层端点是 POST https://www.zgshige.cn/zcms/ajax/invoke(Zving.CONTEXTPATH='/zcms/' + Server.MainServletURL='ajax/invoke'),表单 _ZVING_METHOD=catalogFront.list、_ZVING_URL、_ZVING_DATA(JSON)、_ZVING_DATA_FORMAT=json。curl 直连该端点会被 WAF 403,必须走 browser_console 里页面自己的 window.Server.sendRequest(自带 cookie/referer);browser_console 结果回传后,用 execute_code 硬编码落盘。批量抓正文 + delegate 蒸馏全流程见 references/batch-distillation.md。作者阵容:唐晓渡、王家新、王光明、张清华、陈培浩、董迎春、周瓒、杨小滨、沈奇等一线批评家。
理论文章正文在 <div class="m-lg font14 videoCenter" ...> 里。约1.4%的文章正文用嵌套 <div style="font-family:宋体..."> 分段(而非 <p>),此时简单 find('</div>') 会在第一个嵌套 div 就截断,必须用括号计数法。页面约120KB,terminal stdout 有50KB截断,务必 curl -o 落盘后用 Python open() 读取。样例:
import re, html
t = open(path, encoding='utf-8', errors='ignore').read()
t = re.sub(r'<script.*?</script>', '', t, flags=re.S)
i = t.find('class="m-lg font14 videoCenter"'); j = t.find('>', i)
depth = 0; k = j + 1
while k < len(t):
if t[k] == '<':
if t.startswith('</div', k):
if depth == 0: break
depth -= 1; k = t.find('>', k)+1; continue
if t.startswith('<div', k):
gt = t.find('>', k)
if gt > 0 and not t[k:gt+1].rstrip('>').rstrip().endswith('/'):
depth += 1
k = gt+1; continue
k += 1
body = re.sub(r'<[^>]+>', '', t[j+1:k]); body = html.unescape(body)
zgshige.cn 提取诗正文
诗正文在"浏览:N / 收藏 / 赞赏"之后、"DeepSeek点评"(或"点评")之前。列表页每页50条、共3000+条;用 browser_console 提取 a[href] 拿具体诗链接。
curl -s "https://www.zgshige.cn/c/<日期>/<id>.shtml" | python3 -c "
import sys, re, html
t = sys.stdin.read()
t = re.sub(r'<script.*?</script>','',t,flags=re.S)
t = re.sub(r'<style.*?</style>','',t,flags=re.S)
t = re.sub(r'<br\s*/?>','\n',t)
t = re.sub(r'<[^>]+>',' ',t)
t = html.unescape(t)
t = re.sub(r'[ \t\r]+','',t)
t = re.sub(r'\n\s*\n+','\n',t)
i = t.find('DeepSeek点评')
if i<0: i = t.find('点评:')
seg = t[max(0,i-1200):i]
print(seg.strip()[-700:])
"
Pitfalls
- 用户自己的诗(三里海/父亲节/竹山,诸城本地题材)要真刀真枪评,不吹捧;他明确反感"被漂亮金句糊眼"。
- "上每日好诗"不等于"硬"——该栏目水位浮动,有《在西藏,遇地震》这类应制水货。
- 续生是另一位诗人,不是用户;用户发来的"续生"署名诗要当外人评。