NLTK предоставляет совокупность наиболее распространенных английских слов (nltk.corpus.words.words('en')
) и наиболее распространенных английских имен (nltk.corpus.names.words()
).К сожалению, у последнего не будет Sunder или Pichai , поэтому вы должны положиться на первое.К сожалению, есть имена, которые также являются общими английскими словами (например, Hope ), что делает задачу еще более сложной.Вы все еще можете автоматизировать это до некоторой степени:
words = set(nltk.corpus.words.words('en'))
def isname1(string):
return any([w not in words for w in string.lower().split()])
def isname2(string):
return all([w not in words for w in string.lower().split()])
list(map(isname1, ["Sunder Pichai", "View Profile", "Risk Management"]))
#[True, False, False]
list(map(isname2, ["Sunder Pichai", "View Profile", "Risk Management"]))
#[False, False, False]
Как вы можете видеть, вторая функция более агрессивна и не распознает «Sunder Pichai» как имя (потому что «sunder» на самом деле является английским словом).