确定python中两个字符串的接近距离

时间:2018-01-16 12:28:47

标签: python

Clean_data是包含超过9000个文本文件的列表。 rules是包含500多个元素的字典列表。以下是规则列表

rules = [{'id': 1, 'kwd_root': 'add', 'kwd_sub': 'price target', 'word_count': 5, 'occurance': 1, 'kwd_search': 1, 'status': 1}, {'id': 2, 'kwd_root': 'add', 'kwd_sub': 'PT', 'word_count': 5, 'occurance': 1, 'kwd_search': 1, 'status': 1},.....]

我的问题是:我需要为clean_data list中的每个元素应用规则。下面是我使用过的代码

for word in clean_data:
    for i,d in enumerate(rules):
        if  any(d['kwd_root'] in word and d['kwd_sub'] in word):
            if abs(word.index(d['kwd_root']) - word.index(d['kwd_sub'])) <= d['word_count']:
            research.append(word)
        else:
            non_research.append(word)
    else:
            non_research.append(word)

运行此代码后,我将len(non_research)设为110000,len(研究)为5500

但len(non_research)+ len(研究)的预期输出应该等于len(clean_data)

由于

1 个答案:

答案 0 :(得分:0)

发布的代码缩进是错误的。另一方面,第3行使用“any”,需要列表作为参数。此外,research / non_research会为每个单词和每个条件(单词x条件次数)附加一个值。也许你可以使用:

for word in clean_data:
    flag_rules = False
    for i,d in enumerate(rules):
        if d['kwd_root'] in word and d['kwd_sub'] in word:
            if abs(word.index(d['kwd_root']) - word.index(d['kwd_sub'])) <= d['word_count']:
                flag_rules = True
    if flag_rules:
        research.append(word) 
    else:
        non_research.append(word)