【问题标题】:Extracting words from text using python regex使用 python 正则表达式从文本中提取单词
【发布时间】:2015-10-28 06:44:06
【问题描述】:

我有一个文本(字符串),我想在 python 中执行此任务:

我执行 CountVectorizer 方法是为了制作一个词袋。你可以在这里找到这个方法:http://scikit-learn.org/stable/modules/generated/sklearn.feature_extraction.text.CountVectorizer.html

此方法包括 stopWords 删除,它工作正常。它删除任何标点符号并打破每个单词。但是除了单词之外,它还会返回很多垃圾,例如单个字母和数字。

不过,这种方法有一个名为“token_pattern”的参数,它采用一个字符串(正则表达式),可以给我更好的结果。

我想做的是: a) 排除任何以数字开头、结尾或包含数字的词。 b) 排除文本中的任何数字 c) 排除 any 字词

例如,这个正则表达式应该给我这个:

text = "乘坐 Fido 兜风可能很危险:http://t.co/eR2WfAnZBIhttp://t.co/RF3bhPNPwR',平均每年,卡车会产生 200 亿英里的空驶里程,这花费了经济数十亿”

final_text = “每年平均乘坐 Fido 行驶数十亿英里的卡车会造成数十亿美元的经济损失”

提前感谢您的时间和关注 :)

【问题讨论】:

  • 你能展示一下你到目前为止所做的尝试吗?

标签: python regex


【解决方案1】:

这是一段正则表达式,它可以抓取任何仅由长度为 3 或以上的字母组成的单词。

[a-zA-Z]{3,}

这是一段正则表达式,它可以抓取任何没有 URL 的行。

^((?!(https?:\/\/)+([\da-z\.-]+)\.([a-z\.]{2,6})([\/\w=?$#% \.-]*)).)*$

我还没有想出如何将两者结合起来。但至少,这是朝着正确方向迈出的一步。您可以将每个单词放在自己的行中,然后删除 url,然后匹配 3 个或更多字母的单词。丑陋,但会工作。

【讨论】:

  • 对于您的第一个正则表达式,使用这个正则表达式会不会更容易:[a-zA-Z]{3,}
  • 是的,我认为有这样的解决方案,但不知道逗号功能。已编辑。
  • 解释一下,{x, y} 表示匹配最小x次和最大y次。省略任何部分意味着我们只需要 min-max 的一部分。
【解决方案2】:

我不知道 python,但是正则表达式对于任何编程语言都是一样的,所以我的答案是:

"(\s?\w+[0-9]+\w+\s?)|([0-9]+)|(\s\w\w\s)|(http://t.co/)"g

【讨论】:

  • 你能展示一个你的正则表达式的活生生的例子吗?我在 regex101 上针对 OP 的文本测试了你的,它根本不起作用
  • 你可以在这张图片中看到它对我来说很好 [1]:i.stack.imgur.com/sTVoo.jpg
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-12-31
  • 1970-01-01
相关资源
最近更新 更多