在Python中从另一个字符串中搜索单个单词
我的问题有几个问题要解决。我需要导入一个包含两个字段的csv文件(一个数字字段用作ID,一个字符串字段用作说明)。然后,将字符串字段转换为单个单词的集合(list?tuple?dict?),并搜索每个集合以计算匹配项 例如:在Python中从另一个字符串中搜索单个单词,python,search,csv,Python,Search,Csv,我的问题有几个问题要解决。我需要导入一个包含两个字段的csv文件(一个数字字段用作ID,一个字符串字段用作说明)。然后,将字符串字段转换为单个单词的集合(list?tuple?dict?),并搜索每个集合以计算匹配项 例如: id_field | desc_field 1 | some description 2 | some other description 3 | some third other description 我需要的是一个id_字段
id_field | desc_field
1 | some description
2 | some other description
3 | some third other description
我需要的是一个id_字段匹配列表
id_field 1 has 2 matches in id_field 2
id_field 1 has 2 matches in id_field 3
id_field 2 has 3 matches in id_field 3
等
导入csv
文件应该很容易,可以使用:
import csv
reader = csv.reader(open('SOMEFILE.csv'), delimiter=',', quotechar='"'
我确信我可以使用find或in运算符查找和计算单词,但我在编写代码以搜索csv字符串字段时遇到了问题。这应该可以做到:
import csv
reader = csv.reader(open('SOMEFILE.csv'), delimiter=',', quotechar='"')
data = [[line[0], line[1].split()] for line in reader]
for no1, words1 in data:
for i in range(int(no1), len(data)):
no2, words2 = data[i][0], data[i][1]
matches = len(words1 + words2) - len(set(words1 + words2))
print 'id_field', no1, 'has', matches, 'matches in id_field', no2
如果您对代码有任何问题,请告诉我。我假设您只想像您的示例中那样检查转发,即当在1上检查与2和3的匹配时,当在2上只检查3(如果有3行)
如果要排除匹配项为零的案例,只需在打印前添加以下行并缩进打印即可:
if matched > 0:
嗨,约翰!欢迎来到SO。我不明白你要什么。你能澄清一下吗?如果还有以下几行,说明字段
1
的分数是多少:4 |其他顺序的一些描述
和5 |其他情况下的一些描述是蓝色的
?你可以先做:csvfile.readline()
来避免使用枚举
import csv
import itertools
import re
id_2_desc = {}
with open('SOMEFILE.csv') as csvfile:
reader = csv.reader(csvfile, delimiter='|')
for n, (id_field, desc_field) in enumerate(reader):
if n > 0:
id_2_desc[id_field.strip()] = desc_field.strip()
id_fields = id_2_desc.keys()
for id_field1, id_field2 in itertools.combinations(id_fields, 2):
desc_field1 = id_2_desc[id_field1]
desc_field2 = id_2_desc[id_field2]
desc_tokens1 = re.split('\s+', desc_field1)
desc_tokens2 = re.split('\s+', desc_field2)
matches = set(desc_tokens1) & set(desc_tokens2)
print 'id_field {} has {} matches in id_field {}'.format(id_field1, len(matches), id_field2)