如何使用 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'))
我想检查一个 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'))