php - 使用正则表达式和 PHP 将段落拆分为句子

标签 php regex text-segmentation

我是一个正则表达式菜鸟,试图将段落分成句子。在我的语言中,我们在句子中间使用相当多的缩写(例如:bl.a.),所以我得出的结论是,我需要做的是寻找标点符号,后面跟着一个空格,然后是一个以大写字母开头的单词,例如:

[sentence1]...anymore. However...[sentence2]

这样的段落:

Der er en lang og bevæget forhistorie bag lov om varsling m.v. i forbindelse med afskedigelser af større omfang. Det er ikke en bureaukratisk lovtekst blandt så mange andre.

应以此输出结束:

[0] => Der er en lang og bevæget forhistorie bag lov om varsling m.v. i forbindelse med afskedigelser af større omfang.
[1] => Det er ikke en bureaukratisk lovtekst blandt så mange andre.

而不是这个:

[0] => Der er en lang og bevæget forhistorie bag lov om varsling m.v. 
[1] => i forbindelse med afskedigelser af større omfang.
[2] => Det er ikke en bureaukratisk lovtekst blandt så mange andre.

我找到了一个解决方案,可以使用积极的后向功能来完成第一部分:

$regexp = (?<=[.!?] | [.!?][\'"]);

然后

$sentences = preg_split($regexp, $paragraph, -1, PREG_SPLIT_NO_EMPTY);

这是一个很好的起点,但由于缩写太多, split 了太多次。

我尝试过这样做:

(?<=[.!?]\s[A-Z] | [.!?][\'"])

针对其中任何一个出现的情况

. or ! or ?

后跟一个空格和一个大写字母,但这不起作用。

有谁知道是否有办法完成我想做的事情?

最佳答案

用于分割句子的 Unicode RegExp:(?<=[.?!;])\s+(?=\p{Lu})

此处解释了演示:http://regex101.com/r/iR7cC8

关于php - 使用正则表达式和 PHP 将段落拆分为句子,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15853097/

相关文章:

algorithm - 有没有好的开源或者免费的中文分词算法?

php - 想要显示ajax加载gif

php - 显示正确的错误验证消息

php - 比较 mysql 中的单个字段的多个值

php - 使用 PHPMailer 为 Gmail API 格式化 MIME 消息时如何发送到 BCC 地址?

c++ - C++11 中的正则表达式

python - 与正则表达式匹配的句子

regex - 轻量级正则优化

正则表达式用于限制字符池中没有重复的字符

javascript - 将 HTML 内容拆分成句子,但保持子标签完整