是否有一个简单的技巧来隔离大量文本中的第一个句子?(也许使用正则表达式.)
正在搜索第一个完整的"." 不起作用,因为像"美国"这样的首字母缩略词会搞砸.
(可能没有正确答案.)
不,没有简单的伎俩.要正确执行此操作,您需要对文本进行语法分析.没人能做到这一点.至少还没有.至少不是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])。
假设以下情况,这将避免由于首字母缩写词而导致的过早截断:
一个缺点是,如果句子以标点符号首字母缩写词或缩写词结尾,它不会停止,但是出于简单性和有效性的考虑,这似乎是一个公平的权衡。