我在预处理文本语料库时遇到了一个问题。 我想从文本中删除所有非字母数字符号。 我有一些方法,但是它们不能完全解决问题。
E.x。我有一句话:
A B C D ,5 .. AAA55AAA aaa.bbb.ccc
因此,我想得到:
'A' 'B' 'C' 'D' 'AAA' 'AAA' 'aaa' 'bbb' 'ccc'
我尝试过NLTK:
from nltk.tokenize import word_tokenize
tokens = word_tokenize(my_sentence)
但它具有方法 isalpha():
words = [word for word in tokens if word.isalpha()]
结果将是:
'A', 'B', 'C', 'D'
所以它不能解决我的问题。删除所有包含非字母字符的单词
另一个:
import string
table = str.maketrans('', '', string.punctuation)
sripped = [w.translate(table) for w in tokens]
但它仅删除标点符号(和所有单词):
'A', 'B', 'C', 'D', '5', '', 'AAA55AAA'
是否有使用NLTK或smth的解决方案。其他?还是解决问题的唯一方法-对每个单词使用正则表达式? (真的不想这样做,因为正则表达式可以长时间工作,尤其是在大文件上)
答案 0 :(得分:2)
您可以使用regex吗?
import re
rx = re.compile(r'[^a-zA-Z]')
res = rx.sub(" ", "AAA BB2BB")
print(res) # >> AAA BB BB
它的作用:
[^a-zA-Z]
可以匹配任何非alpha字符,sub()
可以用空格代替