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



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

如果句子中包含所有没有意义的单词,则返回true

例如sdfsdf sdf ssdf fsdf dsd sd

如果句子中至少包含一个具有含义的单词,则返回false

例如Hello 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"))

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

您可以使用set.difference方法(注意,由于nltk.corpus.words中的单词大多使用小写,因此也必须使用str.lower方法,例如"hello"在中,但"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

仅供参考,但你的函数并没有按照你的解释去做。

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

此外,您的逻辑似乎与函数的隐含目的(基于其名称(不一致。如果一个句子中的任何单词都没有在语料库中找到,那么这个句子就没有意义了。

将单词列表转换为集合会产生相当大的开销。因此,如果函数要被多次使用,最好将其封装在一个类中。

因此:

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

相关内容

最新更新