源码深读 · 2019
汽车口碑归一化与相似识别源码深读
还原跨汽车来源的车型主键、评论字段映射、精确与近似去重、情感标签、八维评分及查询导出逻辑。
核心数据模型
平台以三级索引组织品牌/厂商、车系和具体车型。每级保留内部标识、父标识、名称前缀、拼音、价格、图片、来源标识和标签。车型文档再承载配置表、价格区间、能耗、热度、质量问题及八项口碑分数;评论关联车型、来源、作者、购买信息、里程、正文分区、标签、精选等级、疑似异常标记、支持量和浏览量。
内部标识把多个来源映射到同一车型层级,来源记录则用来源前缀加原始评论标识构造唯一键。这一分层使采集页面变化不直接污染在线查询结构。
跨来源评论归一化
两个来源的评论结构完全不同:一个以固定字段提供空间、动力、操控、油耗、舒适、外观、内饰和性价比;另一个把每个维度包装为包含分数、感受名称和正文的子对象。清洗器将两者统一为八个分数字段和“栏目名到正文”的映射。
精选/推荐状态也被映射到统一等级。价格单位被换算,负里程归零;购车目的、图片、经销商和地点按来源分别展开。车型配置来自两个详情集合,后者逐组覆盖前者,用于补齐缺失字段;图片经过对象存储转换。
去重与异常识别
去重前先按栏目名排序,将栏目名与正文拼接,再删除空白和常见中英文标点。第一层对规范文本计算 MD5;相同摘要出现时,代码把首条与后续条目都标为疑似异常,而不是删除。
第二层为尚未精确命中的文本计算 Unicode 词特征 SimHash,与此前所有指纹逐一比较;汉明距离小于 10 时,同样标记双方。设计上保留了原文和风险信号,便于人工复核,这是正确方向。
但实现复杂度近似二次方,数据量增长后不可接受;而且所有历史指纹常驻内存。重建应使用分桶或局部敏感哈希召回候选,再用可解释文本相似度复核,并把阈值、规则版本和候选证据写入结果。
标签与评分
标签来自分析明细与标签字典。组合名称映射到一个或多个分组,并将来源情感键转成无倾向、缺点或优点。评论通过集合追加语义写入标签及标签组,车型也聚合相同标签;索引层保存标签名称、情感、分组和出现次数。
车型评分直接对所有评论的八个维度分别求均值,总分再取八个均值的算术平均,参与数是评论总数。这里存在统计偏差:无法解析的空字符串按零进入分母,且疑似异常评论没有从聚合中排除。更合理的实现应按维度分别统计有效样本,并明确展示样本量、缺失率和异常内容是否参与。
查询服务
Go 服务以注释生成路由,支持按索引层级、来源、车型标签、评论标签组、标签、精选等级和时间范围筛选。车型配置可以转为横向电子表格,覆盖发动机、电机、变速箱、底盘、安全、辅助、座椅和多媒体等分组,说明平台不仅做口碑,也承担选型对比。
两个明显缺陷值得记录:热门查询按计数升序取前十,语义上很可能反了;车型计数与车型列表对具体车型分别使用不同字段条件,可能产生列表有数据但计数不一致。
重建验收
应以固定跨来源样本验证主键映射、单位转换、缺失值、标签情感、精确重复和近似重复;评分返回每维有效样本数;异常识别只产生证据充分的标记;列表与计数共享同一查询构造器;任一结果可回溯到来源快照与清洗版本。
证据边界
清洗、模型和查询逻辑来自 Go 主仓,动态页面及字体处理来自独立采集快照。代码证明了规则存在,但不能证明所有来源在同一批次运行,也不能把文本相似直接解释为虚假账号行为。