175 lines
8.7 KiB
Python
175 lines
8.7 KiB
Python
import re
|
||
import jieba
|
||
import random
|
||
from typing import List
|
||
|
||
|
||
class HeavyHumanizer:
|
||
"""重度人类化改写器 - 保持逻辑,可读性高,适合绕过 AI 检测"""
|
||
|
||
def __init__(self):
|
||
jieba.initialize()
|
||
# 人类化开头/转折/插话
|
||
self.openings = ['说到', '提到', '关于', '其实', '要说', '你知道吗', '顺便说']
|
||
self.transitions = ['但是', '不过', '然而', '话说回来', '可惜的是', '偏偏']
|
||
self.fillers = ['其实', '当然', '显然', '我觉得', '说起来', '顺便说']
|
||
# 主观表达
|
||
self.subjective = ['我认为', '我觉得', '在我看来', '就我所知', '据我了解']
|
||
# 口语词汇
|
||
self.colloquial_particles = ['呢', '吧', '啊', '哦', '嘛', '哈', '呀']
|
||
# 高风险词替换
|
||
self.high_risk = {
|
||
'重要': ['关键', '核心', '主要'],
|
||
'显著': ['明显', '突出', '很大'],
|
||
'提升': ['提高', '增强', '改善'],
|
||
'确保': ['保证', '做到', '维护'],
|
||
'实施': ['执行', '开展', '推行']
|
||
}
|
||
# 分句标点
|
||
self.sentence_endings = {'。', '!', '?', '.', '!', '?', '…', ';', ';'}
|
||
|
||
def split_sentences(self, text: str) -> List[str]:
|
||
"""按照句子结束标点分割文本"""
|
||
sentences = []
|
||
current = ''
|
||
for c in text:
|
||
current += c
|
||
if c in self.sentence_endings:
|
||
sentences.append(current.strip())
|
||
current = ''
|
||
if current.strip():
|
||
sentences.append(current.strip())
|
||
return sentences
|
||
|
||
def replace_high_risk_words(self, sentence: str) -> str:
|
||
"""替换高风险 AI 词汇"""
|
||
for k, v_list in self.high_risk.items():
|
||
if k in sentence and random.random() < 0.8:
|
||
sentence = sentence.replace(k, random.choice(v_list))
|
||
return sentence
|
||
|
||
def add_subjective_expressions(self, sentence: str) -> str:
|
||
"""随机添加主观表达或口语词"""
|
||
if random.random() < 0.3:
|
||
expr = random.choice(self.subjective)
|
||
sentence = expr + ',' + sentence
|
||
if random.random() < 0.2:
|
||
particle = random.choice(self.colloquial_particles)
|
||
if sentence.endswith('。'):
|
||
sentence = sentence[:-1] + particle + '。'
|
||
if random.random() < 0.15:
|
||
filler = random.choice(self.fillers)
|
||
sentence = filler + ',' + sentence
|
||
return sentence
|
||
|
||
def vary_sentence_length(self, sentences: List[str]) -> List[str]:
|
||
"""打乱句子顺序或拆分长句,增加突发性"""
|
||
varied = []
|
||
i = 0
|
||
while i < len(sentences):
|
||
s = sentences[i]
|
||
# 适度拆分长句
|
||
if len(s) > 50 and random.random() < 0.5:
|
||
mid = len(s) // 2
|
||
# 找最近的逗号
|
||
comma_pos = max(s.rfind(',', 0, mid), s.rfind(',', 0, mid))
|
||
if comma_pos > 5:
|
||
first = s[:comma_pos + 1].strip()
|
||
second = s[comma_pos + 1:].strip()
|
||
varied.extend([first, second])
|
||
i += 1
|
||
continue
|
||
varied.append(s)
|
||
i += 1
|
||
# 打乱顺序但保持逻辑块
|
||
if random.random() < 0.3:
|
||
random.shuffle(varied)
|
||
return varied
|
||
|
||
def create_paragraphs(self, sentences: List[str]) -> List[str]:
|
||
"""根据句长和随机概率生成段落"""
|
||
paragraphs = []
|
||
current = []
|
||
current_len = 0
|
||
for s in sentences:
|
||
current.append(s)
|
||
current_len += len(s)
|
||
if current_len > 80 and (random.random() < 0.4 or current_len > 150):
|
||
paragraphs.append(''.join(current))
|
||
current = []
|
||
current_len = 0
|
||
if current:
|
||
paragraphs.append(''.join(current))
|
||
return paragraphs
|
||
|
||
def humanize_text(self, text: str) -> str:
|
||
"""核心人类化改写函数"""
|
||
# 清理文本
|
||
text = re.sub(r'\s+', '', text)
|
||
sentences = self.split_sentences(text)
|
||
|
||
# 高风险词替换
|
||
sentences = [self.replace_high_risk_words(s) for s in sentences]
|
||
|
||
# 添加主观表达、口语词、插话
|
||
sentences = [self.add_subjective_expressions(s) for s in sentences]
|
||
|
||
# 增加长短句变化和突发性
|
||
sentences = self.vary_sentence_length(sentences)
|
||
|
||
# 创建段落
|
||
paragraphs = self.create_paragraphs(sentences)
|
||
|
||
# 格式化段落
|
||
formatted = '\n\n'.join([' ' + p for p in paragraphs])
|
||
return formatted
|
||
|
||
|
||
# ================== 使用示例 ==================
|
||
if __name__ == "__main__":
|
||
text = """
|
||
最近,晓蕾又上热搜了!
|
||
|
||
换句话说,现在卖东西,完全是私营业态。咋回事呢?但特意声明:她早就离开了上海电视台的编制,也不拿电视台的工资欸。原来,她和老公刘剑一起开了直播带货的副业。
|
||
|
||
这事儿一下子引爆了大家的八卦魂。毕竟,明星主持扎堆直播间,也不算新鲜事你说呢。
|
||
|
||
但还是挺多人纳闷:这些当年的 "话筒头牌",是不是集体选择摆烂了?
|
||
|
||
其实,晓蕾和刘剑干…俩人意思很明确:“我们不是来拉低职业口碑的”。而且还耐心解释了自己转行的理由,曾经的大佬,变成了烟火气。
|
||
|
||
说到晓蕾,不了解点她背景都不好意思讨论人家。当年上视新闻部的 "当家花旦",光学历和气质,足够秒杀隔壁主持圈的八条街。而刘剑,似乎早年可是 "台柱子",播音腔精致到令人耳膜怀孕嗯。照理来说,这样一对,在编制铁饭碗里躺平一辈子没毛病。
|
||
|
||
可人家偏不。
|
||
|
||
晓蕾说过这样一句话:“其实,我就是个普通人。” 真的那么普通吗?她不这么说,没人敢忘了她的标杆履历啊!她离开台里后,居然一头扎进了童语言教育这个赛道,一干就是十年,让机构做到了业内小圈子的爆款水准。
|
||
|
||
而这次直播,打的商品也不混乱,主打性价比和实用属性,晓蕾每件商品还得亲测过。如果你觉得她自吹自擂,建议去看看她直播间的粉丝评论。大家地意思是:晓蕾推品 = 放心买。
|
||
|
||
刘剑这枚 “前一哥”,更狠!
|
||
|
||
说晓蕾牛,看起来别忘了,刘剑十年前也上演了一场 “豪赌”。那个年代,辞去电视台稳定工作,和 “打水漂” 差不多。
|
||
|
||
可是刘剑敢把梭全下,为啥?因为他看中了播音考生和辅导课程的市场,那时还没有多少人扎堆干这块,他觉得这是个机会。
|
||
|
||
果然,就这么辞了职,工作的腰板从跟组织吃工资,摇身变成了名副其实的事业单位 —— 自己家老板。虽然后来也是磕磕绊绊,但终究从试验田里掘出了一片肥沃地。主持人的 “下海”,是换方向走。
|
||
|
||
有人觉得,曾经的新闻人、主持人 “跑去带货”,肯定是混不下去了。你要放在十年前,这种联想不稀奇,可现在不一样了。大环境变了,看起来传统媒体是真的在互联网时代被打败得找不到调。
|
||
|
||
原来电视频道的观众,现在早转移到手机端,看知乎、刷短视频,甚至晚上蹲个带货直播会。就像我说的,我认为,你说新闻节目的高冷主播,现在换脸做带货主持,是不是 “落魄”?未必。
|
||
|
||
其实,晓蕾夫妻这一波,实际上是转型很成功的范例。不管带啥网红货,可能他们俩把品质第一的逻辑摆明白了啊。这样的主播,不止卖产品,更卖信誉,靠着时间积攒了观众的信任嗯。也许,直播间哪门子 LOW?明明是主战场。
|
||
|
||
网友说得有趣:“谁嫌直播带货 LOW,谁就输定了。” 道理没跑儿,似乎移动互联网成了咱生活重心,生意也跟着迁移啊。
|
||
|
||
这是明显趋势,看不懂的还真不想赚钱了。
|
||
|
||
而且,似乎做直播一点不轻松。站几个小时口播、随时照顾弹幕情绪,这比坐着念提词器辛苦多了。其实,像晓蕾和刘剑这样的 “摸鱼资历”,能转过身来赚饭钱,这不是 “混”,是 “拼” 啊。
|
||
|
||
别说传统意义的职业崇拜消失殆尽,你觉得稳如狗的岗位,说散架就散你说呢。老一辈金饭碗情结,对于下一代新创别说香,而是种被淘汰跑赢速度内心创新积极点。
|
||
|
||
我不是电视台员工了,早就离职 10 年了。 """
|
||
humanizer = HeavyHumanizer()
|
||
result = humanizer.humanize_text(text)
|
||
print(result)
|