使用正则表达式删除单词中的空格 - 用于文本挖掘的预处理数据

Posted

技术标签:

【中文标题】使用正则表达式删除单词中的空格 - 用于文本挖掘的预处理数据【英文标题】:Deleting spaces within words with regex - pre-processing data for text mining 【发布时间】:2021-08-05 11:36:04 【问题描述】:

对于一个学校项目,我正在研究 Kaggle 上的 kickstarter 数据集; https://www.kaggle.com/kemical/kickstarter-projects

在“name”变量中,有几个标题之间有空格; 例如实例 373 “C R O S S T O W N”。

我整天都在研究一些正则表达式来重新划分多余的空格并尝试让它看起来像一个正常的单词。虽然我认为这是一个更经常发生的问题,但大多数正则表达式内容是添加空格,或者添加双空格。从来没有这个特定的任务。

我尝试了几种方法来描述需要删除的确切类型的空间,将字符单独作为一个组保留,并将它们用作替换字符串。虽然它看起来应该可以工作,但我的数据没有改变。

编写长正则表达式以识别写为空格 + 单个大写字母的单词(为此尝试了几个不同的) r'\2\4' 指第二组和第四组(第一个和第二个字母字符)

Names_fixed = []
for i in Name_New: 
    Names_fixed.append(re.sub(r'(\s|^)([A-Z])(\s)(A-Z)\s/g', r'\2\4', i))

由于我对 regex 还很陌生,因此向社区寻求帮助;非常感谢。

【问题讨论】:

试试re.sub(r'(?<!\S)[A-Z](?:\s[A-Z])+(?!\S)', lambda x: re.sub(r'\s', '', x.group()), i) @Wiktor Stribizev,当时的英雄,完美地工作!!!用了一整天都没破解,太完美了! 完成!感谢您的提醒,太棒了。 谢谢。不要忘记,您也可以为您认为有帮助的答案投票。 【参考方案1】:

使用这个:

re.sub(r'(?<![ \t])[A-Z](?:[ \t][A-Z])+(?![ \t])', lambda x: x.group().replace(' ','').replace('\t',''), i)

查找空格/制表符分隔的单词并从找到的文本中删除空格/制表符。

解释

--------------------------------------------------------------------------------
  (?<!                     look behind to see if there is not:
--------------------------------------------------------------------------------
    [ \t]                    any character of: ' ', '\t' (tab)
--------------------------------------------------------------------------------
  )                        end of look-behind
--------------------------------------------------------------------------------
  [A-Z]                    any character of: 'A' to 'Z'
--------------------------------------------------------------------------------
  (?:                      group, but do not capture (1 or more times
                           (matching the most amount possible)):
--------------------------------------------------------------------------------
    [ \t]                    any character of: ' ', '\t' (tab)
--------------------------------------------------------------------------------
    [A-Z]                    any character of: 'A' to 'Z'
--------------------------------------------------------------------------------
  )+                       end of grouping
--------------------------------------------------------------------------------
  (?!                      look ahead to see if there is not:
--------------------------------------------------------------------------------
    [ \t]                    any character of: ' ', '\t' (tab)
--------------------------------------------------------------------------------
  )                        end of look-ahead

【讨论】:

非常感谢 Ryszard,非常清晰的描述!【参考方案2】:

如果您的目标只是从单词中删除空格,则不确定您是否真的需要正则表达式。

你可以像这样使用简单的 replace() 函数:

x = "C R O S S T O W N"
x = x.replace(' ','')

您可以在您的列表中循环查找所有此类单词。

【讨论】:

好一个,虽然它会增加识别和挑选这些值的额外步骤..记住它,感谢您的帮助:D 非常欢迎。不,您不需要挑选单词,您可以对所有单词运行此功能,此功能将删除多余的空格(如果有),并保留单词的其余部分。希望它有所帮助:)

以上是关于使用正则表达式删除单词中的空格 - 用于文本挖掘的预处理数据的主要内容,如果未能解决你的问题,请参考以下文章

Winforms 文本框允许用户只输入字母、数字、点和单词之间的空格。正则表达式

正则表达式用于检查单词中间的额外空格(多个)[重复]

正则表达式只允许单词之间有一个空格

正则表达式 - 对 URL 友好的任何文本

删除重复的单词、逗号和空格

使用正则表达式从文本中删除连续重复的单词并显示新文本