我在预处理文本语料库时遇到了一个问题。
我想从文本中删除所有非字母数字符号。
我有一些方法,但是它们不能完全解决问题。

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/

10-12 20:58