【问题标题】:Cleaning text data for sentiment analysis and bag-of-words清理文本数据以进行情感分析和词袋
【发布时间】:2020-10-13 18:42:27
【问题描述】:

我目前正在一个项目中测试和训练数据以进行情绪分析。因为,我遇到了一个与 re.sub() 相关的问题,我无法弄清楚如何解决这个问题。我的代码如下:

import re def preprocessor(text):
    text = re.sub(r"<[^>]*>", "",  text) # removes all the html markup
    emoticons = re.findall('(?::|;|= )(?:-)?(?:\)|\(|D|P)', text)
    # removed all the non word charecter and convert them into lower case
    text = (re.sub(r'[\W]+', '', text.lower()) + ''.join(emoticons).replace('-', ''))
    return text

如您所见,该功能运行良好,没有引发异常。但是,由于我想打印文本以查看它是否产生我想要的结果,我得到以下输出:

preprocessor(df.loc[0, 'review'][-50:])` 



'isseventitlebrazilnotavailable'

而我想要的输出应该是:

'is seven title brazil not available'

我猜我的 re.sub() 正在删除所有空格,但我不知道如何解决这个问题。

一个答案将是值得赞赏的。

注: 我想按如下方式清除字符串:例如: 从 '七岁。

标题(巴西):不可用' 到

'is seven title brazil not available'

谢谢

【问题讨论】:

    标签: python scikit-learn


    【解决方案1】:

    您可以尝试以下方法:

    text = 'is seven.<br /><br />Title (Brazil): Not  Available' 
    ## remove tags
    text = re.sub(r"<.*?>", " ",  text)
    ## sub with blank
    text = re.sub(r'[^a-zA-Z0-9\s+]', '', text)
    print(text)
    

    输出:

    'is seven Title Brazil Not Available'

    【讨论】:

    • 谢谢纳伦德拉,我想清理如下文字“是七。

      标题(巴西):不可用”
    • @shaara 如果对您有帮助,您可以投票赞成我的回答。 'is seven.&lt;br /&gt;&lt;br /&gt;Title (Brazil): Not Available' 文本的预期输出是什么?
    • 已经编辑了我最近的帖子,如果你能看一下,请告诉我更准确的信息
    • @shaara,我已经更新了我的解决方案,这正是你想要的。
    【解决方案2】:

    当您在正则表达式中使用 \W 时,它也包括空白字符。在您的情况下,这些也被一个空字符串替换。为了演示,这里是一段sn-p代码,

    import re
    
    text = "This is my Text"
    text1 = re.sub(r'[\W]+', '', text.lower())
    text2 = re.sub(r'[^a-zA-Z0-9_\s]+', '', text.lower())
    
    print(text1)
    print(text2)
    

    如果你检查docs[^a-zA-Z0-9_]实际上等同于\W。如果您不希望它们被空字符串替换,则需要在该列表中添加空白正则表达式符号 (\s)(如上例中 text2 所做的那样)。

    【讨论】:

      猜你喜欢
      • 2022-06-22
      • 1970-01-01
      • 2016-05-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-01-27
      相关资源
      最近更新 更多