如何可视化两组Trigram列表,识别两个列表中完全相同的三词词组组合
两个Trigram列表重合识别与可视化方案
1. 数据预处理
首先需要将字符串格式的Trigram三元组转为可用于绘图的数值特征,同时先统计出两组的重合部分:
- 合并两个列表的所有Trigram,给每个唯一三元组分配唯一标识
- 分别给两组数据打标签,同时标记出重合的三元组
- 将Trigram三个位置的单词分别编码为三个维度的数值,适配pairplot的多维度对比逻辑
对应实现代码:
# 替换为你实际的两个Trigram列表 l1 = [('hello', 'its', 'me'), ('I', 'need', 'help'), ...] l2 = [('I', 'need', 'help'), ('What', 'is', 'this'), ...] import pandas as pd # 统计所有唯一Trigram和重合Trigram all_trigrams = list(set(l1 + l2)) overlap_tgs = set(l1) & set(l2) # 给三个位置的单词分别做数值映射 w1_map = {w:i for i,w in enumerate(set([tg[0] for tg in all_trigrams]))} w2_map = {w:i for i,w in enumerate(set([tg[1] for tg in all_trigrams]))} w3_map = {w:i for i,w in enumerate(set([tg[2] for tg in all_trigrams]))} # 构造绘图用数据集 data = [] for tg in l1: data.append({ "w1": w1_map[tg[0]], "w2": w2_map[tg[1]], "w3": w3_map[tg[2]], "组别": "组1", "是否重合": "是" if tg in overlap_tgs else "否" }) for tg in l2: data.append({ "w1": w1_map[tg[0]], "w2": w2_map[tg[1]], "w3": w3_map[tg[3]], "组别": "组2", "是否重合": "是" if tg in overlap_tgs else "否" }) df = pd.DataFrame(data)
2. pairplot可视化实现
直接用seaborn的pairplot展示三个维度的分布差异,重合点会同时出现两个组的标记:
import seaborn as sns import matplotlib.pyplot as plt sns.pairplot(df, vars=["w1", "w2", "w3"], hue="组别", palette={"组1":"#2E86AB", "组2":"#F24C4C"}, markers=["o", "s"], plot_kws={"alpha":0.8, "s":80}) plt.suptitle("两组Trigram分布对比", y=1.02) plt.show()
3. 结果解读
- 三个维度
w1/w2/w3分别对应Trigram第一个、第二个、第三个单词的数值编码 - 如果某一组坐标同时出现两个组的标记,就代表这是两个列表完全一致的重合Trigram
- 可直接打印重合词组和相似率:
print("完全重合的Trigram:", overlap_tgs) print("两组相似率:{:.2f}%".format(len(overlap_tgs)/20*100))
内容的提问来源于stack exchange,提问作者NeedPythonHelp
相关产品推荐
相关产品推荐

