python从科学论文中删除引用

时间:2016-10-08 19:31:59

标签: python string

注意:我对正则表达式缺乏经验。

我希望能够将科学文章转换为iTunes曲目。为此,我将文本复制并粘贴到txt文件中并将其转换为语音轨道。然而,当我这样做时,包括参考,计算机的声音大声读取它们,例如"(Smith J. et al.2016)"这很烦人,因为我希望跳过包含引用的括号中的任何内容。 因此,我想制作一个python脚本,在将其转换为口语轨道之前从txt文件中删除所有这些引用。 我估计我可以使用以下代码执行此操作:

start_ref=find("(")
finish_ref=find(")", start_ref)
# then remove all pieces of the string between each start and finish 

但这还不够准确。相反,我想以某种方式使用正则表达式。

有人可以向我展示一些示例代码,以便我如何迭代删除以下文本中的引用(同时考虑不同的引用样式,例如Harvard vs APA等):

  

"该方法已被证明优于先前讨论的方法   (史密斯,J。等人,2014)虽然有它的缺点,但很明显   好处大于劣势(Jones,A。& Karver,B。,   2009,Lubber,H。等,2013)。"

任何人都可以提供一些示例代码吗?

2 个答案:

答案 0 :(得分:2)

类似

 import re
 text = ...
 re.sub(r'\((?:[\w \.&]+\, )+[0-9]{4}\)', text)

好像是这样做的。 您可以使用Debuggex在正则表达式中训练自己。

答案 1 :(得分:1)

这应该可以解决问题:

import re

a = "This method has been shown to outperform previously discussed methods (Smith, J. et al., 2014) and while it has its draw-backs, it is clear that the benefits outweigh the disadvantages (Jones, A. & Karver, B., 2009, Lubber, H. et al., 2013)."

a = re.sub(r"\s\([A-Z][a-z]+,\s[A-Z][a-z]?\.[^\)]*,\s\d{4}\)", "", a)

取代"" (即没有)每个字符串由空格(组成,一个大写字母后跟一个或多个小写字母(即名称),逗号,空格,一个大写字母和一个点(可选地由一个空格分隔)像克里斯汀这样的名字的小写字母将缩写为Ch.),然后除了右括号之外的任何内容,直到我们达到逗号,空格,四位数和右括号。总而言之,它假定应删除看起来像(Azdfs, E. stuff 2343)的所有内容。我认为这应该足以避免过度检测。

我的代码获得的输出是This method has been shown to outperform previously discussed methods and while it has its draw-backs, it is clear that the benefits outweigh the disadvantages.