【问题标题】:How to find only the unique sentences from a list of sentences如何从句子列表中只找到唯一的句子
【发布时间】:2018-10-21 03:48:33
【问题描述】:

我有一个这样的列表:

           ['University', 'Cambridge', 'Lesley University', 'Lesley', 
'Office of Information Technology', 
    'Office', 'of', 'Information', 'Technology', 'MA', 
        'United States', 'United', 'States', 'Lesley University ', ' University', 
        'Lesley University Cambridge']
  • 大学(大写)应与大学(小写)一样对待
  • 由于“Leslie University”已经包含“University”,因此应该跳过“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,'ma':1,'美国':1,'lesley 大学':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}

【问题讨论】:

  • 此问题缺少上下文或其他详细信息:请通过提供其他上下文来改进问题,最好包括您对问题的想法以及您为解决问题所做的任何尝试。这些信息可以帮助其他人识别您遇到的困难,并帮助他们写出适合您经验水平的答案。您还需要准确说明问题是什么、您的预期、您得到了什么以及任何追溯。
  • 为什么'MA' 应该出现在输出中?这是'Information' 的不区分大小写的子字符串。
  • @JohnGordon 'MA' 代表马萨诸塞州
  • 问题看起来很模糊,因为它有一个列表结构,当你在列表中寻找一个独特的词时,它会逐词匹配,其次正如约翰所说的那样,问题的框架MA 不应该是出现了!

标签: python set unique


【解决方案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']

【讨论】:

    【解决方案2】:

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

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

    这就是你要找的吗?

    【讨论】:

      【解决方案3】:

      您可以像这样处理您的数据:

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

      【讨论】:

        猜你喜欢
        • 2012-02-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多