Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/search/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Python中从另一个字符串中搜索单个单词_Python_Search_Csv - Fatal编程技术网

在Python中从另一个字符串中搜索单个单词

在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_字段

我的问题有几个问题要解决。我需要导入一个包含两个字段的csv文件(一个数字字段用作ID,一个字符串字段用作说明)。然后,将字符串字段转换为单个单词的集合(list?tuple?dict?),并搜索每个集合以计算匹配项

例如:

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)