如何使用 python 检查给定的英语句子是否包含所有无意义的单词?

How to check if a given english sentence contains all non-meaning words using python?

我想检查一个 Python 程序是否给定的英语句子包含所有无意义的词。

Return 如果句子中的所有单词都没有意义,则为真

例如sdfsdf sdf ssdf fsdf dsd sd

Return 如果句子包含至少一个有意义的词则为假

例如你好 asdf

这是我写的代码。

更新了 is_meaningless 变量的代码

import nltk

nltk.download('words')

from nltk.corpus import words

def is_sentence_meaningless(sentence):
  is_meaningless = True
  for word in sentence.split():
    if(word in words.words()):
      is_meaningless = False
      break
  return is_meaningless    


print(is_sentence_meaningless("sss sss asdfasdf asdfasdfa asdfasfsd"))

print(is_sentence_meaningless(" sss sss asdfasdf asdfasdfa asdfasfsd TEST"))

是否有更好的替代代码?另外,如何将自己的语料库添加到其中?例如,我有几个领域特定的词,我希望它 return 为真,这可能吗?

你可以使用set.difference方法(注意,由于nltk.corpus.words中的单词大多是小写,所以也必须使用str.lower方法,例如“hello”在但是“你好”不是):

def is_sentence_meaningless(sentence, domain_specific_words):
    s_set = set(sentence.lower().split())
    if s_set.difference(words.words()+domain_specific_words) == s_set:
        return True
    return False

仅供参考,但您的功能与您的解释不符。

鉴于单词列表只包含唯一的单词,可以通过将列表转换为集合来提高函数的效率。

此外,您的逻辑似乎与函数的隐含目的(基于其名称)不一致。如果在语料库集中找不到句子中的任何单词,则该句子将毫无意义。

将单词列表转换为集合有相当大的开销。因此,如果要多次使用该函数,最好将其包装在 class.

因此:

import nltk.corpus

class sentence_checker:
    def __init__(self):
        self.words = set(nltk.corpus.words.words())
    def is_sentence_meaningless(self, sentence):
        for word in sentence.split():
            if not word in self.words:
                return True
        return False

sc = sentence_checker()
print(sc.is_sentence_meaningless('hello'))
print(sc.is_sentence_meaningless('hellfffo'))