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

2024-10-02 00:43:07 发布

您现在位置:Python中文网/ 问答频道 /正文

我在我的字典(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]

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


Tags: in示例if字典notverifiedwordszu
2条回答

由于未修改任何现有数据结构,因此不会应用任何更改not_en_list将被生成,但verified将不会被修改。试试这个,如果不是,请张贴一个最低限度的工作示例

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)

相关问题 更多 >

    热门问题