蟒蛇。 NLP。预处理文字

时间:2019-02-04 13:47:20

标签: python-3.x machine-learning nlp nltk

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

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的解决方案。其他?还是解决问题的唯一方法-对每个单词使用正则表达式? (真的不想这样做,因为正则表达式可以长时间工作,尤其是在大文件上)

1 个答案:

答案 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()可以用空格代替