如何使用python nltk删除没有图案的乱码?

时间:2016-10-03 15:48:51

标签: python python-3.x nltk

我正在编写一个代码来清理网址并仅提取底层文本。

 train_str = train_df.to_string()
 letters_only = re.sub("[^a-zA-Z]", " ", train_str)
 words = letters_only.lower().split()
 stops = set(stopwords.words("english"))
 stops.update(['url','https','http','com'])
 meaningful_words = [w for w in words if not w in stops]
 long_words = [w for w in meaningful_words if len(w) > 3]

使用上面的代码,我可以在删除标点符号,停用词等后只提取单词。但是我无法删除本质上乱码的单词。这些是我清理网址后得到的许多单词中的一部分。

['uact', 'ahukewim', 'asvpoahuhxbqkhdtibveqfggtmam', 'fchrisalbon','afqjcnhil', 'ukai', 'khnaantjejdfrhpeza']

使用正则表达式或其他函数时,它们的出现或字母中没有特定的模式。任何人都可以建议删除这些词的方法吗? 谢谢!

2 个答案:

答案 0 :(得分:0)

创建一个空列表。遍历当前列表中的所有单词。使用corpera中的words.words()来检查它是否是真实的世界。将所有“非垃圾词”附加到该新列表中。将这个新列表用于您想要的任何内容。

from nltk.corpus import words

test = ['uact', 'ahukewim', 'asvpoahuhxbqkhdtibveqfggtmam', 'fchrisalbon',\
'afqjcnhil', 'ukai', 'khnaantjejdfrhpeza', 'this', 'is' , 'a' , 'word']
final = []

for x in test:
    if x in words.words():
        final.append(x)
print(final)

输出:

['this', 'is', 'a', 'word']

答案 1 :(得分:0)

你可以这样做:

import nltk
nltk.download('words')

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

sent = "basldlad and Rakadajlnv  share"

" ".join(w for w in nltk.wordpunct_tokenize(sent) \

         if w.lower() in words or not w.isalpha())

1.) 'nltk.download('words')' 下载英语单词语料库。

2.) 'set(nltk.corpus.words.words())' 创建一组英语 words 并将其分配给 words。

3.) 最后一个循环只是从你的句子中提取每个单词,然后 检查它是否是单词语料库的一部分,也不是 字母数字。

4.) 请注意专有名词,如人名 在这里被视为胡言乱语。

5.) 为了处理专有名词,您需要进行命名实体识别