如何使用python预处理twitter文本数据

时间:2016-10-07 14:53:45

标签: python regex

我从mongoDB以这种格式检索后有文本数据:

**

[u'In', u'love', u'#Paralympics?\U0001f60d', u"We've", u'got', u'nine', u'different', u'sports', u'live', u'streams', u'https://not_a_real_link', u't_https://anotherLink']

[u't_https://somelink']

[u'RT', u'@sportvibz:', u'African', u'medal', u'table', u'#Paralympics', u't_https://somelink', u't_https://someLink']

**

但是,我想用“' URL'”替换列表中的所有网址。同时保留列表中的其他文本,即如下所示:

[u'In', u'love', u'#Paralympics?\U0001f60d', u"We've", u'got', u'nine', u'different', u'sports', u'live', u'streams', u'URL', u'URL']

但是当我运行停用词删除代码并执行正则表达式时,我得到了这个结果样本:

**

In

URL

RT

**

请允许任何人帮忙解决这个问题,因为我发现这很困难。

这是我目前的代码:

def stopwordsRemover(self, rawText):
    stop = stopwords.words('english')
    ##remove stop words from the rawText argument and store the result list in processedText variable
    processedText = [i for i in rawText.split() if i not in stop]
    return processedText


def clean_text(self, rawText):
    temp_raw = rawText
    for i, text in enumerate(temp_raw):
        temp = re.sub(r'https?:\/\/.*\/[a-zA-Z0-9]*', 'URL', text)
    return temp

1 个答案:

答案 0 :(得分:0)

这是错误的:

def clean_text(self, rawText):
    temp_raw = rawText
    for i, text in enumerate(temp_raw):
        temp = re.sub(r'https?:\/\/.*\/[a-zA-Z0-9]*', 'URL', text)
    return temp

你返回的是最后一个被替换的字符串而不是列表,它应该替换你的rawText输入列表(我必须承认我对你似乎首先获得的快速感到困惑 item,但我对解释仍然充满信心)

改为:

def clean_text(self, rawText):
    temp = list()
    for text in rawText:
        temp.append(re.sub(r'https?:\/\/.*\/\w*', 'URL', text))  # simpler regex with \w
    return temp

使用listcomp:

def clean_text(self, rawText):
   return [re.sub(r'https?:\/\/.*\/\w*', 'URL', text) for text in rawText]

你也可以就地工作,直接修改rawText

def clean_text(self, rawText):
    rawText[:] = [re.sub(r'https?:\/\/.*\/\w*', 'URL', text) for text in rawText]