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

Removing non-English words from a dictionary using nltk

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

 verified={'日本': '19 日本',
 'له': 'إستعداد له',
 'لسنا': 'القادم لسنا',
 'غيتس': 'بيل غيتس',
 'على': 'على إستعداد',
 'بيل': 'بيل غيتس',
 'الوباء': 'الوباء القادم',
 'إستعداد': 'إستعداد له',
 'és': 'koronavírus és',
 'állnak': 'kik állnak',
 'zu': 'könig zu',
 'zero': 'agenda zero'}

我尝试使用 nltk,特别是 words:

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]

但是当我 运行 它时,没有应用任何更改。那里仍然是非英语单词。 请注意,我提供的示例是数据示例:我有数千个英文单词,但我想删除一些非英语单词,而无需复制和粘贴列表。

没有应用任何更改,因为您没有修改任何现有数据结构。 not_en_list 将被创建,但 verified 将不会被修改。试试这个,如果不行,请 post 一个最小的工作示例。

raw =  {'日本': '19 日本',
 'له': 'إستعداد له',
 'لسنا': 'القادم لسنا',
 'غيتس': 'بيل غيتس',
 'على': 'على إستعداد',
 'بيل': 'بيل غيتس',
 'الوباء': 'الوباء القادم',
 'إستعداد': 'إستعداد له',
 'és': 'koronavírus és',
 'állnak': 'kik állnak',
 'zu': 'könig zu',
 'zero': 'agenda zero'}

words = set(['zero'])
verified = {k: v for k, v in raw.items() if k in 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)