从文本字符串中提取第一个句子

pau*_*doo 3 regex string

是否有一个简单的技巧来隔离大量文本中的第一个句子?(也许使用正则表达式.)

正在搜索第一个完整的"." 不起作用,因为像"美国"这样的首字母缩略词会搞砸.

(可能没有正确答案.)

Dar*_*mas 9

不,没有简单的伎俩.要正确执行此操作,您需要对文本进行语法分析.没人能做到这一点.至少还没有.至少不是100%的时间.主要是因为它还需要对文本进行语义分析.你会看到,与在学校教你语法的语言学家所认为的相反,构成一个句子的内容很难用计算机可以遵循的一套规则来概括而不理解文本.

花几年时间寻找计算语言学.也许到那时会有一条捷径?

但你可以接近.

我可能会尝试寻找第一个时期,问号或感叹号,然后是空格.

/^(.*?)[.?!]\s/
Run Code Online (Sandbox Code Playgroud)

(这(.*?)是一个非贪婪的正则表达式,以确保你真的只找到第一句话.


小智 6

不能以保证的方式完成此操作,但这可以通过一个相对简单的表达式使您更加接近:

/(^.*?[a-z]{2,}[.!?])\s+\W*[A-Z]/
Run Code Online (Sandbox Code Playgroud)

从行(^)的开头开始,它非贪婪地查找任意数量的任意字符(.*?),这些字符以至少两个小写字母([a-z]{2,})和句号,问号或感叹号()结尾[.!?],后跟一个或多个空格(\s+),零个或多个非单词字符,例如,左括号(\W*)和大写字母([A-Z])。

假设以下情况,这将避免由于首字母缩写词而导致的过早截断:

  • 大写,如“美国”
  • 是小写字母,但为单个字母,例如“ eg”或“ ie”
  • 或后跟小写字母,如“此缩写代表缩写”。

一个缺点是,如果句子以标点符号首字母缩写词或缩写词结尾,它不会停止,但是出于简单性和有效性的考虑,这似乎是一个公平的权衡。


Pur*_*lot 5

你会为这件事买单吗?如果是亚马逊的机械土耳其人以任何速度向真人发送任务,那么每次更新可以说是0.01美元.至少它打败了两年的计算语言学.;-)


kyn*_*igs 0

使用纯文本字符串没有保证的方法可以做到这一点,但是使用带有一些掩码的字符串例如,如果您的字符串在每行或句子的末尾有 \n ,您可以使用它来确定行的结尾,除了你必须猜测它。