我在预处理我的文本语料库时遇到一个问题。我想从文本中删除所有非字母数字符号。我尝试了一些方法,但它们并未完全解决问题。
例如,我有一句话:
A B C D ,5 .. AAA55AAA aaa.bbb.ccc
我希望得到的结果是:
'A' 'B' 'C' 'D' 'AAA' 'AAA' 'aaa' 'bbb' 'ccc'
我尝试使用了NLTK:
from nltk.tokenize import word_tokenizetokens = word_tokenize(my_sentence)
但它有方法 isalpha():
words = [word for word in tokens if word.isalpha()]
结果将是:
'A', 'B', 'C', 'D'
所以这并未解决我的问题。它删除了所有包含非字母字符的词。
还有另外一种方法:
import stringtable = str.maketrans('', '', string.punctuation)sripped = [w.translate(table) for w in tokens]
但它只删除标点符号(以及所有词):
'A', 'B', 'C', 'D', '5', '', 'AAA55AAA'
有没有使用NLTK或其他方法的解决方案?还是只能对每个词使用正则表达式来解决问题?(我真的不想这么做,因为正则表达式在处理大型文件时非常耗时)
回答:
你可以使用正则表达式吗?
它的作用:
[^a-zA-Z]
将匹配任何非字母字符,sub()
将它们替换为一个空格