Избавиться от тегов HTML, символов, цифр и однобуквенных слов одновременно с Regex в Python? - PullRequest
0 голосов
/ 06 июля 2018

У меня проблема с очисткой данных для анализа текста. Теперь я сделал четыре регулярных выражения для своих данных, и все еще есть нежелательные слова. Я хотел знать, есть ли способ выбрать только слова! Я знаю, что у Scikit-learn есть эта опция, но я не работаю над английским текстом. Это то, что я ввел для каждого из вышеперечисленных, но мне было интересно, есть ли другой способ сделать это

def clean(data):
    e = re.compile(r"\b[a-zA-Z]\b") #single letters
    data = e.sub('', data)
    r = re.compile(r'<[^<]*?>') # html tags
    data = r.sub('', data)
    p = re.compile(r'[^-\w]') # remove characters like \n
    data = p.sub(' ', data)
    q = re.compile(r'[\d_\.]*') # remove numbers
    return q.sub('', data)

Ответы [ 2 ]

0 голосов
/ 09 июля 2018

Я заменил первый и второй регулярные выражения на некоторую строку кода и работал очень лучше.

def clean(data):
p = re.compile(r'[^-\w]') # remove characters
data = p.sub(' ', data)
q = re.compile(r'[\d_\.]*') # remove numbers
return q.sub('', data)
for i in text_train:
    for j, t in enumerate(text_train[i]):
        text_train[i][j] = [w for w in clean(t).split() if len(w)>1]

код выше маркирует текст и принимает только слова с более чем одной буквой. для другой проблемы я попытался ответить @laurent_laporte, но я все еще получил &amp в моем тексте. Вместо этого добавил, что в файле стоп-слов, не профессиональный, но работает.

0 голосов
/ 06 июля 2018

Если вы действительно хотите использовать RegEx для этого, вы можете использовать RegEx r'<[^>]+>', чтобы сопоставить и удалить все теги.

Существует также стандартная функция для преобразования &smp; и других классических сущностей в символы: xml.sax.saxutils.unescape.

Вот простая демонстрация:

from xml.sax.saxutils import unescape
import re

sub_text = re.compile(r'<[^>]+>').sub

html = '<p class="Body">me &amp; you</p>'

text = unescape(sub_text('', html))

print(text)

Вы получаете: «я и ты»

Затем вы можете добавить больше правил для фильтрации ваших данных.

Другой способ - использовать lxml для анализа ваших HTML-данных и функцию xpath для получения текста

import lxml.html

root = lxml.html.fragment_fromstring(html)
text = root.xpath('string()')

(не тестировалось)

...