我正在为一个项目解析超过200万个文本文件,需要您的正则表达式帮助以使其更快。我需要拆分单词,以便能够使用以下命令:
text_file = re.sub(r'\W+',' ', text_file)
但是,对于带连字符的单词,我想删除连字符,但合并单词(即非营利组织将是非营利组织,而不是“ non”,“ profit”)。目前,我可以通过两次搜索和替换来完成此操作(根本不理想)。最终输出将是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]
。'\s*-\s*'
更快的速度替换[a-z]-[a-z]
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句