【问题标题】:Check if a sentence contains two or more words from my list检查一个句子是否包含我列表中的两个或多个单词
【发布时间】:2018-04-03 12:34:45
【问题描述】:

感谢我每次在这里发布问题时提供的快速和巨大的帮助!:)

希望你有美好的日子!

我的问题是如何检查一个句子是否包含我列表中的两个或多个单词

例如

mylist = ['apple', 'banana', 'monkey', 'love']

Sentence1 = "猴子喜欢香蕉"

-> as monkey、love、banana 这三个词在列表中我想让这句话 1 为正面

Sentence2 = "狗爱猫"

-> 因为句子2 只包含我列表中的“爱”这个词,我想把这个句子2 设为否定

我了解到,如果检查一个句子是否包含列表中的任何单个单词,我可以使用

如果有的话(文本中的 e 字集中的 e):

但是,我找不到可以解决上述问题的解决方案。

有人可以帮忙吗?

(由于有一堆不使用英语的句子,因此很难使用 NLP 工具,例如词干提取或词形还原)

【问题讨论】:

    标签: python list


    【解决方案1】:

    除了其他 pythonic 答案之外,这是一种简单(可能很快)的方法:

    >>> mylist = ['apple', 'banana', 'monkey', 'love']
    >>> def in_my_list(sentence):
            found = 0
            sentence = sentence.lower()
            for word in mylist:
                if word in sentence:
                    found += 1
                if found==2:
                    return True
            return False
    
    >>> sentence1 = "Monkeys love bananas"
    >>> sentence2 = "The dog loves cats"
    >>> in_my_list(sentence1)
    True
    >>> in_my_list(sentence2)
    False
    

    它不会检查mylist中的所有单词;因此比len/sum 版本更快。

    【讨论】:

      【解决方案2】:

      您需要遍历您的 mylist 并检查 mylist 中的单词是否出现在您的句子中。如果存在,将其放入列表中并找到长度。如果长度 >= 2 则为正数!

      >>> mylist = ['apple', 'banana', 'monkey', 'love']
      >>> s1 = "Monkeys love bananas"    
      >>> len([each for each in mylist if each.lower() in s1.lower()])>=2
      True
      >>> s2="The dog loves cats"
      >>> len([each for each in mylist if each.lower() in s2.lower()])>=2
      False
      

      同样使用 lambda,

      >>> checkPresence = lambda mylist,s : len([each for each in mylist if each.lower() in s.lower()])>=2
      >>> checkPresence(mylist,s1)
      True
      >>> checkPresence(mylist,s2)
      False
      

      【讨论】:

      • 是的,过滤器是要走的路
      • 此代码将失败,因为您在第 1 句中仍然有 Monkeys 和列表中的 monkeyMonkey 需要小写。
      • 不是真的!示例 IO 没有考虑区分大小写和复数。
      • 虽然您的解决方案非常简洁,但 OP 仍然提到 monkeySentence1 中存在的单词之一,因此应该计算在内。
      • 是的,我明白了。才意识到。我已经添加了相同的编辑。谢谢
      【解决方案3】:

      你可以试试这个:

      mylist = ['apple', 'banana', 'monkey', 'love']
      sentence1 = "Monkeys love bananas"
      final_val = 1 if sum(i in sentence1.lower() for i in mylist) > 1 else -1
      

      输出:

      1
      

      测试 2:

      mylist = ['apple', 'banana', 'monkey', 'love']
      sentence2 = "The dog loves cats"
      final_val = 1 if sum(i in sentence2.lower() for i in mylist) > 1 else -1
      print(final_val)
      

      输出:

      -1
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-05-29
        • 1970-01-01
        • 2018-04-21
        • 1970-01-01
        • 1970-01-01
        • 2019-03-11
        • 2022-06-19
        • 2019-01-06
        相关资源
        最近更新 更多