我正在使用许多包含自然语言的字符串。
例如:
s1 = "good day sir r please send morning text wa x x kind jennifer hardy directory mary advertisement estate west t f marcus peter"
从那开始,我要删除名称(詹妮弗,哈迪,马库斯,彼得)以及序列(r,wa,x,t,f)。
这样结果将类似于
s = "good day sir please send morning text kind directory advertisement estate west"
我已经尝试了一些nltk
程序包,但不幸的是结果并不理想:
import nltk
from nltk import word_tokenize
names = nltk.corpus.names.words()
words = nltk.corpus.words.words()
s1_tok = word_tokenize(s1)
filtered_s1 = [w for w in raw_body if w in words and w not in names]
print(" ".join(filtered_s1))
返回
'good day sir r please send morning text wa x x kind hardy directory mary advertisement estate west t f peter'
因此某些元素已被删除,但并非全部。同样,this post不能解决我的问题(执行类似操作)。我考虑过使用棕色语料库:
from nltk.corpus import brown
brown_corp = brown.words()
filtered_s1 = [w for w in s1_tok if w in brown_corp]
但是这需要很长时间。我有什么想念的吗?有没有一种更聪明的方法可以有效地解决我的问题,理想情况下无需使用RegEx?]
编辑:在这里错误地复制了我的代码,使用了单词而不是句号。
这会更快:
brown_corp = set( brown.words() )
filtered_s1 = ( w for w in s1_tok if w in brown_corp )