Python.NLP.Предварительная обработка текста - PullRequest
0 голосов
/ 04 февраля 2019

У меня есть вопрос с предварительной обработкой моего текстового корпуса.Я хочу удалить все не алфавитно-цифровые символы из текста.У меня есть несколько подходов, но они не совсем решают проблему.

Например, у меня есть предложение:

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'

Есть лилюбое решение, использующее НЛТК или что-л.еще?Или единственный способ решить проблему - использовать регулярные выражения для каждого слова?(на самом деле не хочу этого делать, потому что регулярные выражения работают долгое время, особенно на больших файлах)

1 Ответ

0 голосов
/ 04 февраля 2019

Не могли бы вы использовать регулярное выражение ?

import re
rx = re.compile(r'[^a-zA-Z]')

res = rx.sub(" ", "AAA BB2BB")

print(res)  # >> AAA BB BB

Что он делает : [^a-zA-Z] будет соответствовать любым не альфа-символам и sub() заменит их пробелом

...