如何仅从句子列表中查找唯一的句子

时间:2018-10-21 03:48:34

标签: python set unique

我有一个这样的列表:

           ['University', 'Cambridge', 'Lesley University', 'Lesley', 
'Office of Information Technology', 
    'Office', 'of', 'Information', 'Technology', 'MA', 
        'United States', 'United', 'States', 'Lesley University ', ' University', 
        'Lesley University Cambridge']
  • 大学(大写)应与大学(小写)一样对待
  • 由于“莱斯利大学”已包含“大学”,因此应跳过“大学”

因此,我只想打印最独特的超集,因此输出看起来像:-

['Office of Information Technology', 'MA', 
            'United States', 
            'Lesley University Cambridge']

=====================我尝试的内容======================= ============

tok= ['University', 'Cambridge', 'Lesley University', 'Lesley', 
    'Office of Information Technology', 
        'Office', 'of', 'Information', 'Technology', 'MA', 
            'United States', 'United', 'States', 'Lesley University ', ' University', 
            'Lesley University Cambridge']
dic={}
for i in [x.lower() for x in tok]:
    dic[i]=1
dic
  

{'大学':1,'剑桥':1,'莱斯利大学':1,'办公室   信息技术'':1,'ma':1,'美国':1,'莱斯利   大学':1,'大学':1,'莱斯利大学剑桥':1,   'lesley':1}

sup_=sorted(jt.keys(), key=len)
se_={}
for i in sup_:
    ctr=0
    status=True

    for k in sup_:
        if i in k.split():
            ctr+=1
            status=status and (i in k.split())
    if status==True:
        #se[i]=1
        #print (ctr)
        if ctr==0:
            se_[i]=1
se_
  

{'美国':1,'莱斯利大学':1,'莱斯利大学   剑桥”:1,“信息技术办公室”:1}

3 个答案:

答案 0 :(得分:1)

该代码如何:

import re
test = ['University', 'Cambridge', 'Lesley University', 'Lesley', 'Office of Information Technology', 'Office', 'of', 'Information', 'Technology', 'MA', 'United States', 'United', 'States', 'Lesley University ', ' University', 'Lesley University Cambridge']
result = []
for i in range(len(test)):
    str_init = test[i].strip()
    flag_add = True
    for j in range(len(test)):
        # exclude variable same index
        if(i!=j):
            str_include = " "+test[j]+" "
            pattern = r"\s{0}\s".format(str_init)
            if(re.search(pattern,str_include,re.IGNORECASE)):
                flag_add = False
    if(flag_add):
        result.append(str_init)
print(result)

输出:

['Office of Information Technology', 'MA', 'United States', 'Lesley University Cambridge']

答案 1 :(得分:1)

您可以这样处理数据:

def is_substr(str,l):
  for s in l:
    if s.lower().strip() != str.lower().strip():
      if str.lower().strip() in s.lower().strip():
        return True
  return False

input = ['University', 'Cambridge', 'Lesley University', 'Lesley', 'Office of Information Technology', 'Office', 'of', 'Information', 'Technology', 'MA', 'United States', 'United', 'States', 'Lesley University', 'University', 'Lesley University Cambridge']

sentences = []
for i in input:
  if not is_substr(i,input):
    sentences.append(i)

print sentences

运行此命令将产生输出:

['Office of Information Technology', 'MA', 'United States', 'Lesley University Cambridge']

答案 2 :(得分:1)

很难知道这是否是您所需要的,但是此功能应该为您提供列表中唯一的单词

def unique_universities(text):
    low = []
    for x in text:
        x.replace(' ', '')
        low.append(x.lower())
    return set(low)

您正在寻找什么?