Python 使用nltk从词典中删除非英语单词

Python 使用nltk从词典中删除非英语单词,python,nltk,Python,Nltk,我在我的字典(CountVectorizer)中发现了一些非英语单词,我想删除: verified={'日本': '19 日本', 'له': 'إستعداد له', 'لسنا': 'القادم لسنا', 'غيتس': 'بيل غيتس', 'على': 'على إستعداد', 'بيل': 'بيل غيتس', 'الوباء': 'الوباء القادم', 'إستعداد': 'إستعداد له', 'és': 'koronavírus

我在我的字典(CountVectorizer)中发现了一些非英语单词,我想删除:

 verified={'日本': '19 日本',
 'له': 'إستعداد له',
 'لسنا': 'القادم لسنا',
 'غيتس': 'بيل غيتس',
 'على': 'على إستعداد',
 'بيل': 'بيل غيتس',
 'الوباء': 'الوباء القادم',
 'إستعداد': 'إستعداد له',
 'és': 'koronavírus és',
 'állnak': 'kik állnak',
 'zu': 'könig zu',
 'zero': 'agenda zero'}
我的尝试是使用nltk,特别是
单词

import nltk
words = set(nltk.corpus.words.words())

not_en_list = [x for x, v in verified.items() if v!='[]' if x not in words]
但当我运行它时,没有应用任何更改。还有非英语单词。
请注意,我提供的示例是一个数据示例:我有数千个英语单词,但有一些非英语单词需要删除,无需复制和粘贴列表。

没有应用任何更改,因为您没有修改任何现有数据结构<将生成代码>非编码列表,但不会修改
已验证
。试试这个,如果不是,请张贴一个最低限度的工作示例

raw={'日本': '19日本',
'له': 'إستعداد له',
'لسنا': 'القادم لسنا',
'غيتس': 'بيل غيتس',
'على': 'على إستعداد',
'بيل': 'بيل غيتس',
'الوباء': 'الوباء القادم',
'إستعداد': 'إستعداد له',
"s":"koronavírusés",,
“阿尔纳克”:“基卡纳克”,
"zu":"könig zu",,
“零”:“零议程”}
words=set(['zero'])
已验证={k:v代表k,v在raw.items()中,如果k在words中}
assert verified=={'zero':'agenda zero'}

也许这可以帮助您:

import nltk
import ast
#nltk.download('words')
'''-> Remove HashTag if the word list has not been downloaded'''
dict_ = {'日本': '19 日本',
         'له': 'إستعداد له',
         'لسنا': 'القادم لسنا',
         'غيتس': 'بيل غيتس',
         'على': 'على إستعداد',
         'بيل': 'بيل غيتس',
         'الوباء': 'الوباء القادم',
         'إستعداد': 'إستعداد له',
         'és': 'koronavírus és',
         'állnak': 'kik állnak',
         'zu': 'könig zu',
         'zero': 'agenda zero'}

words = set(nltk.corpus.words.words())

new_string = ''.join(w for w in nltk.wordpunct_tokenize(str(dict_)) \
             if w.lower() in words or not w.isalpha())

new_dic = ast.literal_eval(new_string)
new_dic = {k: v for k, v in new_dic.items() if k and v is not None}
print(new_dic)

谢谢你,斯帕格迪。如果我理解正确的话,您所做的就是在列表中包含零,以便选择该项。但是如果我有很多元素呢?
words=set(['zero','any','other','words','you','will','like'])
我认为这是不可行的。如果我有数千个单词,我就无法列出它们。因此,在这一点上使用检测语言可能会更好。无论如何,谢谢用
words=set(nltk.corpus.words.words())替换它。
这能回答你的问题吗?我已经应用了他们在那里提出的答案(你可以在我的问题和尝试中看到)。在我的情况下,它根本不起作用。我现在已经更新了它。您的输出现在应该如下所示:{'':'19','':'','','','','','','','','','','','','','','','','','','','','',''零:''议程零'}。您好,方舟,您能指定您的问题吗?:)非常感谢,@Higs。修正了;)好了,现在我明白你的问题了。让我看看我能做什么。我刚刚更新了代码。现在您有了所需的输出。从语言工具包下载单词列表(单词)非常重要。代码现在编写得不好,但您可以处理:)