gpt4 book ai didi

Python 正则表达式 - 拆分字母数字字符但删除和组合带连字符的单词

转载 作者:太空宇宙 更新时间:2023-11-04 05:53:06 24 4
gpt4 key购买 nike

我正在为一个项目解析超过 200 万个文本文件,需要您在正则表达式方面的帮助让它更快。我需要拆分单词,以便能够使用:

text_file = re.sub(r'\W+',' ', text_file)

然而,对于带连字符的词,我想删除连字符,但组合这个词(即非营利将是非营利而不是“非”、“利润”)。目前,我可以通过两次搜索和替换来做到这一点(一点也不理想)。最终输出将是 collections.Counter() 对象将使用的单词列表。

def mod1(text_file):
text_file = re.sub('\s*-\s*', '', text_file) # handling hyphens :( O(n)
text_file = re.sub(r'\W+',' ', text_file)
text_file = text_file.lower()
return(text_file)

除了正则表达式之外,任何更快的处理技巧也将不胜感激。谢谢。

最佳答案

使用lower()后,可以使用re.sub(r'([a-z])-([a-z])', r'\1\2', s ) 删除连字符。

然后 re.split(r'[^a-z]'),拆分单词。

s = s.lower()
s = re.sub(r'([a-z])-([a-z])', r'\1\2', s)
s = re.split(r'[^a-z]', s)

此解决方案可能(也可能不会)更快,取决于使用它的文本。它确实有一些可能的加速:

  • 忽略数字允许使用 [a-z] 而不是 \w
  • lower() 首先被调用,允许 re.sub() 搜索一半的字母;即 [a-z] 而不是 [A-Za-z]
  • 假设连字符前后没有空格(因为通常应该是这种情况)允许用更快的 [a-z]-[a-z 替换 '\s*-\s*' ]

关于Python 正则表达式 - 拆分字母数字字符但删除和组合带连字符的单词,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29187195/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com