我正在编写一个代码来清理网址并仅提取底层文本。
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']
使用正则表达式或其他函数时,它们的出现或字母中没有特定的模式。任何人都可以建议删除这些词的方法吗? 谢谢!
答案 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.) 为了处理专有名词,您需要进行命名实体识别