python从科学论文中删除引用

python从科学论文中删除引用,python,string,Python,String,注意:我对正则表达式缺乏经验 我希望能够将科学文章转换成iTunes曲目。为此,我将文本复制粘贴到txt文件中,并将其转换为语音曲目。然而,当我这样做时,引用被包括在内,并且计算机的声音会大声读出它们,例如“(Smith J.et al.2016)”,这很烦人,因为我希望跳过包含引用的括号中的任何内容。 因此,我想制作一个python脚本,在将txt文件转换为语音曲目之前,从txt文件中删除所有这些引用。 我想我可以用下面的代码来实现这一点: start_ref=find("(") finish

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

我希望能够将科学文章转换成iTunes曲目。为此,我将文本复制粘贴到txt文件中,并将其转换为语音曲目。然而,当我这样做时,引用被包括在内,并且计算机的声音会大声读出它们,例如“(Smith J.et al.2016)”,这很烦人,因为我希望跳过包含引用的括号中的任何内容。 因此,我想制作一个python脚本,在将txt文件转换为语音曲目之前,从txt文件中删除所有这些引用。 我想我可以用下面的代码来实现这一点:

start_ref=find("(")
finish_ref=find(")", start_ref)
# then remove all pieces of the string between each start and finish 
但这还不够准确。相反,我想以某种方式使用正则表达式

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

“该方法已被证明优于先前讨论的方法 (Smith,J.等人,2014年)虽然它有它的倒退,但很明显 利大于弊(Jones,A.&Karver,B.)。, 2009年,Lubber,H.等人,2013年)


有人能提供一些示例代码吗?

这应该可以做到:

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)
它用“”(即nothing)替换每个由空格组成的字符串,
,一个大写字母后跟一个或多个小写字母(即名称)、逗号、空格、一个大写字母和一个点(对于类似Christine的名称,可以选择用小写字母分隔,这些名称将被缩写为
Ch.
),然后除了一个右括号之外的任何东西,直到我们到达一个逗号、一个空格、四位数字和一个右括号。总之,它假设所有看起来像
(Azdfs,E.stuff 2343)
的东西都应该被删除。我认为这应该足以避免过度检测


我从代码中得到的结果是
这个方法已经被证明比前面讨论的方法表现得更好,虽然它有它的缺点,但显然利大于弊。

这应该可以做到:

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)
它用“”(即nothing)替换每个由空格组成的字符串,
,一个大写字母后跟一个或多个小写字母(即名称)、逗号、空格、一个大写字母和一个点(对于类似Christine的名称,可以选择用小写字母分隔,这些名称将被缩写为
Ch.
),然后除了一个右括号之外的任何东西,直到我们到达一个逗号、一个空格、四位数字和一个右括号。总之,它假设所有看起来像
(Azdfs,E.stuff 2343)
的东西都应该被删除。我认为这应该足以避免过度检测

我从代码中得到的结果是
这个方法已经被证明比前面讨论的方法表现得更好,虽然它有它的缺点,但很明显,它的优点大于缺点。

类似于

 import re
 text = ...
 re.sub(r'\((?:[\w \.&]+\, )+[0-9]{4}\)', text)
似乎是这样。 您可以使用正则表达式来训练自己。

类似

 import re
 text = ...
 re.sub(r'\((?:[\w \.&]+\, )+[0-9]{4}\)', text)
似乎是这样。
你可以用正则表达式来训练自己。

我认为你需要的不仅仅是正则表达式来区分引用和其他插入短语。重复@chepner的评论,正则表达式可能不够。你可能想看看自然语言处理。只满足不同风格中的一种——哈佛或者APA本身就已经是一个相当大的挑战。愉快地试图抓住两者只会导致更多的错误匹配。是的,从这些评论判断,问题比想象的更复杂。下面的两个答案都适用于我在问题中给出的示例字符串,但当涉及到实际的整篇文章时,两个答案都不是ons工作……好的,谢谢。我想你需要的不仅仅是一个正则表达式来区分引用和其他插入短语。回应@chepner的评论,正则表达式可能还不够。你可能想看看自然语言处理。在itself已经是一个相当大的挑战。愉快地试图抓住两者只会导致更多的错误匹配。是的,根据这些评论判断,问题比想象的更复杂。下面的两个答案都适用于我在问题中给出的示例字符串,但当涉及到实际的整篇文章时,两个解决方案都不起作用k谢谢你