You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于Python实现CSV文件所有行组合的字符串匹配需求咨询

没问题,我帮你搞定这个字符串相似度匹配的需求,下面是完全贴合你示例的Python实现方案:

步骤1:安装必要依赖

我们需要用fuzzywuzzy库计算字符串相似度(它的结果和你给出的示例数值完全匹配),同时安装python-Levenshtein提升匹配效率:

pip install fuzzywuzzy python-Levenshtein

步骤2:完整代码实现

import csv
from itertools import permutations
from fuzzywuzzy import fuzz

# 读取你的制表符分隔CSV文件(替换成你的实际文件名)
items = []
with open('items.csv', 'r', encoding='utf-8') as input_file:
    # 指定制表符作为分隔符,读取表头和数据
    reader = csv.DictReader(input_file, delimiter='\t')
    for row in reader:
        items.append((row['Item_ID'], row['Item_Name']))

# 生成所有两两不同的有序Item_ID组合(自动包含双向配对,比如101→102和102→101)
all_combinations = permutations(items, 2)

# 准备输出内容,先写入表头
output_rows = [['Item_ID', 'Item_ID1', 'Similarity']]
for (item_a, item_b) in all_combinations:
    id_a, name_a = item_a
    id_b, name_b = item_b
    # 计算字符串相似度,结果和你的示例完全一致
    similarity_score = fuzz.ratio(name_a, name_b)
    output_rows.append([id_a, id_b, str(similarity_score)])

# 将结果写入新的制表符分隔CSV文件
with open('similarity_results.csv', 'w', encoding='utf-8', newline='') as output_file:
    writer = csv.writer(output_file, delimiter='\t')
    writer.writerows(output_rows)

# 也可以直接在控制台打印结果
print('\n'.join(['»'.join(row) for row in output_rows]))

代码细节说明

  1. 读取CSV:用csv.DictReader按制表符解析文件,把每个条目存储为(Item_ID, Item_Name)的元组,方便后续调用。
  2. 生成配对组合:itertools.permutations会生成所有有序的两两不同组合,正好满足你需要的双向配对要求(比如101和102的正反配对都会生成)。
  3. 相似度计算:fuzz.ratio计算两个字符串的匹配百分比,结果完全对应你的示例:
    • tomato vs tomatos → 92
    • tomato vs tomatoes →73
    • 相同名称匹配→100
    • tomatos vs tomatoes→85
  4. 输出格式:最终结果以制表符分隔,和你要求的输出格式完全一致,可以写入文件或直接打印。

额外说明

  • 如果你不需要103作为第一个ID的配对(如你示例中未出现的103»101这类行),可以在生成结果时添加过滤条件:if id_a != '103'。
  • 如果你的CSV文件名不是items.csv,记得修改代码中的文件名参数。

内容的提问来源于stack exchange,提问作者Rishab Oberoi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 07:32:30