Как найти только уникальные предложения из списка предложений - PullRequest
0 голосов
/ 21 октября 2018

У меня есть такой список:

           ['University', 'Cambridge', 'Lesley University', 'Lesley', 
'Office of Information Technology', 
    'Office', 'of', 'Information', 'Technology', 'MA', 
        'United States', 'United', 'States', 'Lesley University ', ' University', 
        'Lesley University Cambridge']
  • Университет (с заглавной буквы) следует рассматривать так же, как университет (строчные буквы)
  • Поскольку «Университет Лесли» уже содержит «Университет', поэтому' University 'должен быть пропущен

Следовательно, я хотел бы печатать только самые уникальные надмножества, поэтому вывод будет выглядеть так: -

['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, 'ма':1, «Соединенные Штаты»: 1, «Университет Лесли»: 1, «Университет»: 1, «Университет Лесли Кембридж»: 1, «Лесли»: 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 голосов
/ 21 октября 2018

Вы можете обработать ваши данные следующим образом:

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']
0 голосов
/ 21 октября 2018

Немного трудно понять, нужно ли вам это, но эта функция должна дать вам уникальные слова из вашего списка

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

Это то, что вы ищете?

0 голосов
/ 21 октября 2018

Как насчет этого кода:

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']
...