AI回答文本中品牌提及与推荐倾向的提取方法

AI回答文本中品牌提及与推荐倾向的提取方法 文章简介在AI回答采集中原始文本往往包含噪声如何准确提取品牌提及并判断是否为推荐是后续分析的基础。本文基于实际工程场景介绍一套从文本清洗到推荐识别的处理流程适用于Python环境读者可参考实现自己的解析模块。一、问题背景采集AI回答时原始文本可能包含以下问题品牌名称大小写不一致如“OpenAI” vs “openai”。品牌提及与普通名词混淆如“苹果”指水果还是公司。推荐信号词如“推荐”“首选”“值得考虑”与否定词如“不推荐”混杂。同一品牌在上下文中可能被提及多次但只有部分属于推荐。本文的目标是从一段AI回答文本中提取出所有品牌提及并标记每条提及是否为推荐。二、整体流程文本清洗去除无关字符、统一大小写。品牌关键词匹配基于预定义的品牌词库进行匹配。上下文消歧利用局部上下文消除歧义。推荐信号词识别检测推荐或否定词。区分提及与推荐结合信号词和语法位置判断。三、核心实现1. 文本清洗importredefclean_text(text:str)-str:# 去除多余空格和换行textre.sub(r\s, ,text)# 去除特殊字符保留中文、英文、数字和常见标点textre.sub(r[^\w\u4e00-\u9fff\s。、],,text)returntext.strip()2. 品牌关键词匹配使用Aho-Corasick算法进行高效多模式匹配。importahocorasickdefbuild_brand_automaton(brand_list:list[str])-ahocorasick.Automaton:automatonahocorasick.Automaton()foridx,brandinenumerate(brand_list):automaton.add_word(brand.lower(),(idx,brand))automaton.make_automaton()returnautomatondeffind_brands(text:str,automaton:ahocorasick.Automaton)-list[dict]:text_lowertext.lower()matches[]forend_idx,(brand_id,brand)inautomaton.iter(text_lower):start_idxend_idx-len(brand)1matches.append({brand:brand,start:start_idx,end:end_idx,original_text:text[start_idx:end_idx1]})returnmatches3. 上下文消歧对于多义词如“苹果”通过前后窗口中的行业词判断。defdisambiguate(matches:list[dict],text:str,context_window:int20)-list[dict]:# 示例针对“苹果”消歧tech_keywords[手机,电脑,系统,iOS,Mac,iPad,iPhone]formatchinmatches:ifmatch[brand]苹果:startmax(0,match[start]-context_window)endmin(len(text),match[end]context_window1)contexttext[start:end].lower()ifnotany(kwincontextforkwintech_keywords):match[is_brand]Falseelse:match[is_brand]Trueelse:match[is_brand]Truereturn[mforminmatchesifm[is_brand]]4. 推荐信号词识别定义推荐词和否定词列表。POSITIVE_SIGNALS[推荐,首选,值得考虑,建议,不错,好用,推荐使用]NEGATIVE_SIGNALS[不推荐,不建议,避免,别用,不好用]defdetect_recommendation(match:dict,text:str,window:int30)-str:startmax(0,match[start]-window)endmin(len(text),match[end]window1)contexttext[start:end]# 优先检测否定词forneginNEGATIVE_SIGNALS:ifnegincontext:returnnegativeforposinPOSITIVE_SIGNALS:ifposincontext:returnpositivereturnneutral5. 整合处理defextract_brand_mentions(text:str,brand_list:list[str])-list[dict]:textclean_text(text)automatonbuild_brand_automaton(brand_list)matchesfind_brands(text,automaton)matchesdisambiguate(matches,text)formatchinmatches:match[recommendation]detect_recommendation(match,text)returnmatches四、验证方法使用以下测试文本验证test_text 在手机品牌中我推荐iPhone因为它的生态系统很好。 但苹果的MacBook也很不错。 不过我不推荐使用三星的某些低端机型。 brands[苹果,iPhone,MacBook,三星]resultextract_brand_mentions(test_text,brands)forrinresult:print(f{r[brand]}:{r[recommendation]})预期输出iPhone: positive苹果: neutral因为上下文“苹果的MacBook”中“苹果”是品牌但无推荐信号MacBook: positive三星: negative五、常见问题与避坑品牌词库需要持续维护新品牌、别名、大小写变体需及时更新。否定词检测窗口不宜过大否则可能误判。建议窗口30-50字符。多义词消歧依赖行业词库可根据业务领域定制。推荐信号词存在领域差异例如“可以考虑”在有些场景是中性。六、当前限制无法处理隐式推荐如“我用过X效果很好”。无法处理跨句推荐如第一句说“推荐”第二句才出现品牌。对于口语化表达如“X家”需要额外规则。总结本文实现了一套从AI回答文本中提取品牌提及并判断推荐倾向的工程方案。核心思路是文本清洗 → 多模式匹配 → 上下文消歧 → 信号词检测。该方法适用于品牌监控、竞品分析等场景但需根据实际数据调整词库和窗口参数。