Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/svg/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 使用正则表达式解析文本以提取有效段落_Python_Regex - Fatal编程技术网

Python 使用正则表达式解析文本以提取有效段落

Python 使用正则表达式解析文本以提取有效段落,python,regex,Python,Regex,如何使用正则表达式在python上解析文本,以从诸如 近住宿\n\n近住宿是住宿的一种情况。通过改变透镜的形状,调节耐火材料的强度以适应观察对象的距离。问题是 我想提取 近住宿是住宿的一种情况。通过改变透镜的形状,调节耐火材料的强度以适应观察对象的距离 这意味着有效文本应以句号结尾,并删除诸如“问题是”之类的未完成句子以及字符之前的任何内容,如\n 另一个例子是 神经末梢中可用的多巴胺水平由单胺氧化酶控制,单胺氧化酶使突触前的神经递质失活\n\n 哪个应该提取 神经末梢的多巴胺水平由单胺类氧化酶

如何使用正则表达式在python上解析文本,以从诸如

近住宿\n\n近住宿是住宿的一种情况。通过改变透镜的形状,调节耐火材料的强度以适应观察对象的距离。问题是

我想提取

近住宿是住宿的一种情况。通过改变透镜的形状,调节耐火材料的强度以适应观察对象的距离

这意味着有效文本应以句号结尾,并删除诸如“问题是”之类的未完成句子以及字符之前的任何内容,如\n

另一个例子是

神经末梢中可用的多巴胺水平由单胺氧化酶控制,单胺氧化酶使突触前的神经递质失活<代码>

\n\n

哪个应该提取

神经末梢的多巴胺水平由单胺类氧化酶控制,单胺类氧化酶使突触前的神经递质失活

所以也要去掉任何html标记


所以我需要干净的段落,在一段时间内结束。没有任何换行符或html标记,可能出现在相关段落之后或之前。所有段落或多或少都与我提供的示例相似。

例如,我建议将删除HTML标记(您应该这样做)从主要任务中分离出来

然后,可以使用以下正则表达式解决任务的其余部分:

(?:^|\n|\.)(.*\.)
我们首先匹配文本的开头(
^
)、新行或文字点。
?:
只是为了使该组不被捕获。然后我们以贪婪的方式收集所有东西直到一个点(这意味着我们得到了最大可能的匹配)

您可以这样使用它:

import re
m = re.findall(r"(?:^|\n|\.)(.*\.)", your_string)
if m:
    print(m[0].strip())

关键是能够准确说明以下条件:

  • 开始比赛
  • 继续比赛
  • 结束比赛
在你的情况下,这些似乎是

  • 大写字母[A-Z]
  • 不是来自“\n”和“>>导入的任何字符 >>>matcher=re.compile(“[A-Z][^\n]+\”) 使用您提供的:

    >>> matcher.findall('''<p>The level of dopamine available in nerve terminals is controlled by the enzyme monoamineoxidase, which inactivates the neurotransmitter in the presynapse. </p>\n\n</body></html>''')[0]
    'The level of dopamine available in nerve terminals is controlled by the enzyme monoamineoxidase, which inactivates the neurotransmitter in the presynapse.'
    >>> matcher.findall('''near accomodation\n\nNear accomodation is one case of accomodation. By changing the shape of the lens, accomodation adjusts the refractory power to the distance of an object under observation. The issue is''')[0]
    'Near accomodation is one case of accomodation. By changing the shape of the lens, accomodation adjusts the refractory power to the distance of an object under observation.'
    
    >>matcher.findall(“”神经末梢中可用的多巴胺水平由单胺氧化酶控制,单胺氧化酶使突触前的神经递质失活。

    \n\n“”)[0] “神经末梢中的多巴胺水平由单胺氧化酶控制,单胺氧化酶可使突触前的神经递质失活。” >>>matcher.findall(''近调节\n\n近调节是调节的一种情况。通过改变透镜的形状,调节将耐火强度调整到被观察对象的距离。问题是“”)[0] “近住宿是住宿的一种情况。通过改变透镜的形状,调节耐火材料的强度以适应观察对象的距离

    您可以根据需要随意调整。

    您需要为找到的不同情况创建正则表达式。然后你需要应用它们。从阅读开始,然后将文本移到并尝试使用正则表达式。迭代直到统计完毕。顺便说一句,你的第一个示例捕获了两个句子,它不会在第一个
    处停止。您的第二个示例:您可能应该先去掉html,然后再提取。Html太复杂了,无法用正则表达式轻松处理——有些人甚至会告诉您使用Html解析器(这是个好主意)。您的第一个示例后面还会有更多的文本-正则表达式是一种模式分析,没有文本理解功能,因此它会找到模式,而不理解哪些文本属于同一个模式。@PatrickArtner感谢您的解释。是的,月经不应该是第一次,你是对的。但事实上,正则表达式是贪婪的,就像解释的答案一样,这使得它非常适合获得最长的通道。在此之前,我已经应用了文本理解程序,因此第一个示例已经足够准确,但“问题是”应该忽略不计。这就是为什么我需要在句号上停下来,以确保它至少能完成一个完整的句子。效果很好!ThanksI刚刚发现了一个新的例子,它的开头是“具有终身分裂能力的小脑细胞。胶质细胞的类型是星形胶质细胞”。上面提到的一切都是重复的,但是如果只需要一个新句子的开头,那么从“胶质细胞的类型是星形胶质细胞”开始,就更好了。如何修改上面的表达式,使其查找以大写字母开头的模式?如果是这种情况,请将正则表达式更改为
    (?:^\n |\)(?=[A-Z])(.*\)
    >>> matcher.findall('''<p>The level of dopamine available in nerve terminals is controlled by the enzyme monoamineoxidase, which inactivates the neurotransmitter in the presynapse. </p>\n\n</body></html>''')[0]
    'The level of dopamine available in nerve terminals is controlled by the enzyme monoamineoxidase, which inactivates the neurotransmitter in the presynapse.'
    >>> matcher.findall('''near accomodation\n\nNear accomodation is one case of accomodation. By changing the shape of the lens, accomodation adjusts the refractory power to the distance of an object under observation. The issue is''')[0]
    'Near accomodation is one case of accomodation. By changing the shape of the lens, accomodation adjusts the refractory power to the distance of an object under observation.'