我在预处理文本语料库时遇到了一个问题。
我想从文本中删除所有非字母数字符号。
我有一些方法,但是它们不能完全解决问题。
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的解决方案?其他?还是解决问题的唯一方法-对每个单词使用正则表达式? (确实不希望这样做,因为正则表达式可以工作很长时间,尤其是在大文件上)
最佳答案
您可以使用regex吗?
import re
rx = re.compile(r'[^a-zA-Z]')
res = rx.sub(" ", "AAA BB2BB")
print(res) # >> AAA BB BB
它的作用:
[^a-zA-Z]
将匹配任何非字母字符,并且sub()
将其替换为空格关于python-3.x - python 。 NLP。预处理文字,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/54517501/