我有一个相当大的语料库(500k篇新文章)在一个数据框架中的一列中。大多数(并非所有)文章的开头都有各种各样的随意丢弃的文本,直到短语“(路透社)-”
我尝试了以下正则表达式的各种排列,试图一次性调整整个列,但运气不佳,因为它要么删除了文章的大块,要么什么也不做
r = re.compile(r'\A\b.*[Reuters]\b')
reuters3 = reuters2['story_text'].str.replace(r,'', regex=True)
从regex和pandas方法的角度来看,如何最好地解决这个问题,有什么想法吗?多谢各位
下面提供了一个例子,展示了文本在开始时(通常包括和(路透社))要移除的一般模式,以保持中间的去掉并在最后得到(所有的后续和包括)(由…编辑).除了这些关键词外,文章的确切语言、字符和长度各不相同
路透1月1日电(记者Chris Scicluna VALLETTA)---周二午夜钟声敲响,地中海岛国马耳他成为欧元区最小的成员国……[各行各业的文章文本]……公众宣传运动取得了公认的成功。(迈克尔·温弗瑞编辑)((加文。jones@reuters.com;+39-06-8522-4232;路透社消息:gavin.jones.Reuters。com@reuters.net))关键词:欧洲央行扩张/欧元区
如果你需要遵守诺言,你可以使用
如果你不需要保留单词,你可以使用
或者,像这样使用
Series.str.split
:详细信息
(?s)
-DOTALL修饰符,使.
匹配任何字符^
-字符串的开头.*?
-任何0个或更多字符尽可能少\(Reuters\)
-文字(Reuters)
文本(?=\(Reuters\)\s*-)
-与紧跟(Reuters)
、0+空格和-
的位置匹配的正向前瞻\s*-\s*
--
用0+空格括起来李>见regex demo #1和regex demo #2
split
解决方案使用一个简单得多的正则表达式,\(Reuters\)\s*-
并将字符串拆分为两部分(因为n=1
是定义的,n
是拆分的数量),并且.str[-1]
获取最后一个(这里的第二个)项就在上面
.split()
范例
在分割目标周围添加空格或其他字符也会有所帮助
总而言之:
您可能需要对可能出现的情况做一些额外的验证,即您的拆分字符串并没有在标题中没有的文章中简单地提到。也许很简单,如果有两个部分,第二部分比第一部分长,最多N个字符
相关问题 更多 >
编程相关推荐